2012-05-13 5 views
40

Windows를 사용하고 있습니다. 파일을 스테이징 할 때이 오류가 발생합니다.이유는 '힘내 색인 업데이트 실패'입니다.

Updating the Git index failed. A rescan will be automatically started to resynchronize git-gui.

망할 놈의 사용 크로스 플랫폼과 CRLF/LF 문제에 독서를 많이 한

을 CRLF하는 LF에서 변환 된 파일의 목록 다음에, 나는 어느 정도 이해 무슨 일이 벌어지고 있고, 어떤 자동 설정이 나에게 가장 적합한 지 결정하려고 시도하고 있지만 Git이 인덱스 업데이트가 실패했다고 말하는 이유를 이해할 수 없습니다. 내 이해는 EOF를 변환했기 때문에 그 문제가 무엇이며 색인을 업데이트하는 것이 실패했다고 말하는 이유는 무엇입니까? 적절한 자동 맞춤 설정을 선택하는 것 외에 다른 작업을 수행해야합니까 아니면 그냥 진행할 수 있습니까

다음 두 가지 옵션이 있습니다. 계속 및 색인 해제, 이러한 의미는 무엇이며 최선의 행동 방침은 무엇입니까?

+0

[LF는 git에서 CRLF로 대체 될 수 있습니다 - 그게 무엇이며 중요합니까?] (https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf- in-git-what-is-that-it-important) –

답변

40
git config --global core.autocrlf false 

항상 권장 사항입니다 ("Git 1.6.4 beta on Windows (msysgit) - Unix or DOS line termination"참조).

그러나, 귀하의 경우, 당신은 "계속"할 수 있지만,이 경고는 특정 파일의 변환이 가역적하지 않을 수 있습니다 언급이 : 변환하는 경우

core.safecrlf 

true의 경우, 자식 체크한다 CRLF는 행 끝 변환이 활성화 될 때 되돌릴 수 있습니다. Git은 명령이 작업 트리의 파일을 직접 또는 간접적으로 수정하는지 확인합니다. 예를 들어 파일을 커밋 한 다음 동일한 파일을 체크 아웃하면 작업 트리에 원래 파일이 생성됩니다. 현재 설정이 core.autocrlf이 아닌 경우 git은 파일을 거부합니다.
변수를 "warn"으로 설정할 수 있습니다.이 경우 git은 되돌릴 수없는 변환에 대해서만 경고하지만 작업을 계속합니다. 당신이 this thread에서 설명한 바와 같이,이 경고를 표시하지 않으려면

, 당신은 falsecore.safecrlf을 설정할 수 있습니다.

또한 git gui의 도구 메뉴를 통해 파일을 숨기고이 도구에 몇 가지 옵션을 추가 할 수 있습니다 (예 : git config file).
관심은 각 도구에 대한, 당신은 추가 할 수 있다는 것입니다 : 공구가 실행을 완료 한 후

guitool.<name>.norescan 

변경 작업 디렉토리를 다시 검색하지 마십시오.


당신은

당신이 index.tcl git-gui script에서 해당 메시지를 볼 수 있습니다 잠금 해제 색인에 조금 정교한 시겠어요 : 그것은 index.lock이 파일 제거를 조작 할 때 자식 - GUI를 생성 색인.
당신은 "lockfile API" documentation page에서 자세한 내용을 볼 수 있습니다

상호 배제합니다.
새 인덱스 파일을 작성할 때 먼저 새 파일 $GIT_DIR/index.lock을 만들고 새 내용을 파일에 쓰고 최종 대상 이름을 $GIT_DIR/index으로 바꿉니다.
O_EXCL과 함께 $GIT_DIR/index.lock 파일을 만들어 다른 사용자가 이미 색인 파일을 업데이트하려고 할 때 알아 차릴 수 있습니다.

+1

포괄적 인 답변을 주셔서 감사합니다. 그러나 몇 차례 경고를 보내지 만 그게 정확히 내 문제입니다. 경고는 아니지만 오류라고 암시하지 않습니다. 'Git 색인을 업데이트하지 못했습니다. '... 아니면 이것을 잘못 해석합니까? – byronyasgur

+0

@byronyasgur 답변에서 언급 한 스레드는 "경고"로이 메시지를 참조합니다. 왜냐하면 * 실패 * completly the git 명령이 아니기 때문입니다. 단지 "norescan' 또는'core.safecrlf'를'false'로 지정하지 않는 한, 선택을 요구할 뿐이다. – VonC

+0

나는 이해하기 시작했다. 이 두 가지 선택 사항의 차이점을 설명하거나 자원으로 안내 할 수 있습니까?이 문맥에서 잠금 해제 및 계속이 의미하는 바를 찾을 수없는 것 같습니다. – byronyasgur

1

나는 또한 심지어 내 core.autocrlf 설정 그래도이에 달렸다는 falsecore.safecrlf가 설정되지 이미. 나는 범인이 config 설정 diff.astextplain.textconv이라고 생각한다. 내가 git config --list를 실행하면

는, 다음 줄은 출력에 나타내었다 :

diff.astextplain.textconv=astextplain 

나는이 설정은 실제로 경고/오류와 관련된 생각하지 않습니다하지만 텍스트 변환에보고 나에게 영감을 그 할 수 있습니다.

* text=auto 

[. 아마받은 .gitattributes GitHub의에서 파일]

감안할 : 온라인 내의 repo에있는 작은 동굴 탐험 후, 나는 내 REPO의 .gitattributes에서 파일을 다음 줄을 발견 위의 행만 주석 처리되지 않았으며 '자동 완성'행 끝 변환을 처리하는 경우 이 항상으로 두통이 발생했기 때문에 해당 파일을 내 repo에서 제거하기로했습니다. 그 후에 동일한 파일을 준비하지 않아도 "Git 색인 업데이트 실패"경고/오류 메시지가 표시되지 않습니다.