[git] Git을 사용할 때“오류 : 잘못된 색인 – 치명적 : 색인 파일 손상”을 해결하는 방법

이후 git init에는 몇 개의 파일을 추가 및 커밋하고 일부 변경 한 후 추가 및 커밋했습니다. git 데몬 (WinXP의 Cygwin에서 실행)을 설정하고 저장소를 한 번 복제했습니다. 이제 복제 된 저장소 에이 오류가 발생합니다.

$ git status
error: bad index file sha1 signature
fatal: index file corrupt

저장소의 새 사본을 얻는 것 외에이 문제를 해결할 수있는 방법이 있습니까?



답변

문제가 커밋에 대한 준비 영역 으로 인덱스에 문제가있는 경우 (예 🙂.git/index 인덱스를 제거하고 (원하는 경우 백업 복사본 만들기) 마지막 커밋에서 버전으로 인덱스를 복원하면됩니다.

OSX / Linux에서 :

rm -f .git/index
git reset

Windows에서 :

del .git\index
git reset

( reset위 의 명령은와 동일합니다 git reset --mixed HEAD)

또는 대신에 낮은 수준의 배관을 사용할 수 있습니다 .git read-treegit reset


문제가 packfile의 색인에있는 경우을 사용하여 복구 할 수 있습니다 git index-pack.


답변

실수로 .git / index 파일을 프로젝트 루트의 sed (아마 리팩토링?)로 손상했을 수 있습니다.

sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr "$SEARCHPATERN" "$PROJECTROOT")

나중에 이것을 피하려면 grep / sed로 바이너리 파일을 무시하십시오.

sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr --binary-files=without-match "$SEARCHPATERN" "$PROJECTROOT")


답변

나는 그 문제가 있었고, 이것으로 ti fix를 시도한다.

rm -f .git/index
git reset

그러나 그것은 작동하지 않았습니다. 해결책은 ? 어떤 이유로 하위 디렉토리에 다른 .git 폴더가 있습니다. 해당 .git 폴더 (주체 아님)를 삭제하고 git reset다시 삭제 합니다. 일단 삭제되면 모든 것이 다시 작동했습니다.


답변

이것은 나쁜 클론처럼 들립니다. 더 많은 정보를 얻으려면 다음을 시도해보십시오.

git fsck --full


답변

위의 솔루션으로 인해 계속 문제가 발생했기 때문에이 둔한 솔루션을 사용했습니다.

  1. 다른 곳의 리포지토리를 복제
  2. 새로운 .git 디렉토리를 커밋하려는 변경 사항이 포함 된 (깨진) 저장소에 복사하십시오.

트릭을 했어. Btw, sed@hobs가 짐작했던 것처럼 프로젝트 루트에서 작업했습니다. 내 수업을 배웠습니다.


답변

이것은 나를 위해 일했습니다. 이유가 궁금하지만 처음부터 오류가 발생하기 시작했습니다. 어제 로그 아웃했을 때 문제가 없었습니다. 오늘 아침에 로그인하지 않았습니다.

rm .git/index

git reset


답변

자식 서브 모듈 사용자를위한 참고 사항-여기의 솔루션은 그대로 작동하지 않습니다.

예를 들어라는 부모 dev저장소가 있고 하위 모듈 저장소가이라고 가정 해 봅시다 api.

당신이 안에 있고이 api질문에 언급 된 오류가 발생하면 :

error: bad index file sha1 signature
fatal: index file corrupt

index파일은 내부되지 않습니다 .git폴더. 실제로 .git폴더도 아닙니다.이 저장소의 실제 .git 데이터 위치가있는 텍스트 문서가됩니다. 다음과 같은 것 같습니다.

~/dev/api $ cat .git
gitdir: ../.git/modules/api

따라서 대신에 rm -f .git/index다음을 수행해야합니다.

rm -f ../.git/modules/api/index
git reset

또는 더 일반적으로

rm -f ../.git/modules/INSERT_YOUR_REPO_NAME_HERE/index
git reset