Nice programing

git status returns fatal : git 저장소가 아니지만 .git이 존재하고 HEAD에 적절한 권한이 있음

nicepro 2020. 12. 10. 21:09
반응형

git status returns fatal : git 저장소가 아니지만 .git이 존재하고 HEAD에 적절한 권한이 있음


내 저장소에서 git status를 실행하면 fatal: Not a git repository: /my repo/.git/modules/docs

확인했고 .git이 존재하고 적절한 권한이있는 HEAD를 포함합니다. 다른 다양한 명령을 잘 실행할 수 있습니다. git gui를 실행하면 제대로 열리고 변경된 파일 몇 개가 나열되지만 많은 파일이 누락됩니다.

HEAD에 일종의 손상이있을 수 있다고 생각하지만 확실하지 않습니다. 전체 저장소를 지우지 않고이 문제를 해결하는 방법을 아십니까?

업데이트 : 리포지토리의 디렉토리 이름을 변경했음을 깨달았습니다. 오류에서 참조되는 디렉토리는 디렉토리의 이전 이름입니다. 그래서 내 현재 저장소에 /new dir/.git있지만 오류가 Not a git repository: /old dir/.git/modules/docs있습니다. 그래서 git이 혼란 스러울까요?


이 두 파일에는 절대 하위 모듈 경로가 포함되어 있습니다.

{submodule}/.git
.git/modules/{submodule}/config

따라서 저장소를 이동하면이 두 파일의 절대 경로가 유효하지 않으며 'git 저장소가 아닙니다'오류가 발생합니다. 이 파일을 수동으로 수정하십시오.


이전 버전의 git은 하위 모듈의 gitdir을 찾기 위해 절대 경로를 사용했습니다. 해결책은 다음과 같습니다.

  1. git을 최신 버전으로 업그레이드하십시오 . 일부는 버전 1.7.10 이상이 필요하다고 말합니다. 방금 git 1.8.3으로 문제를 성공적으로 해결했습니다.
  2. 깨진 하위 모듈 폴더를 모두 삭제하십시오. rm -rf broken_submodule_folder
  3. 등록 된 하위 모듈 업데이트 : git submodule update. 체크 아웃중인 하위 모듈이 표시되어야합니다.

마침내 문제가 하위 모듈 중 하나의 문제로 인한 것이라고 분류했습니다. 단순히 repo 디렉토리의 이름을 바꾸면 해당 하위 모듈과 충돌이 발생했습니다. 하위 모듈로 git 저장소의 이름어떻게 바꿀 수 있습니까? 의 토론을 본 후 리포지토리를 복제하는 것이 디렉토리 이름을 바꾸는 것보다 더 나은 방법이라는 것을 깨달았고 그로 인해 하위 모듈 문제가 해결되었습니다.


모든 git-submodules를 재설정하여이 문제를 해결했습니다.

rm -rf .git/modules
git submodule update --init

@ ax003d 대답에 따라 다음 명령을 사용하여 모든 이전 경로 ( old/path)를 새 경로 ( new/path)로 바꿀 수 있습니다 .

find . -type f \( -name ".git" -o \( -path "*.git/modules/*" -name config \) \)  -print0 | xargs -0 sed -i -e "s#old/path#new/path#g"

교체하기 전에 이전 경로가 어떻게 보이는지 확인하고 싶을 수 있습니다.

find . -type f \( -name ".git" -o \( -path "*.git/modules/*" -name config \) \)  -print0 | xargs -0 grep --colour "old/path"

제 경우 문제는 .git / HEAD 파일이 아무데도 가리 키지 않고 이상한 문자 시퀀스를 포함한다는 것입니다. .git / ORIG_HEAD의 내용을 .git / HEAD에 복사했고 다시 작동했습니다.

출처


하위 모듈에서도이 문제에 직면했지만 두 파일을 분석 한 후

{submodule} /. git .git / modules / submodules / {submodule} / config

제 경우에는 이것이 문제가 아니라는 것을 깨달았습니다.

약간의 조사 끝에 나는 내 경우에 git (command : module add git)을 추가해야하고 오류가 사라 졌다는 것을 발견했습니다.


해결책 :

1) HEAD 파일 (.git 아래)을 살펴 봅니다.-> 손상된 경우 (임의 값 포함) 내용을 'ref : refs / heads / develop'텍스트로 교체합니다 (develop은 내가 작업 한 마지막 분기입니다. )

2) try-git status.

3) 2 단계로 문제가 해결되지 않으면 다음 명령을 시도하십시오 (모두 작동하지는 않지만 시도해 볼 가치가 있음).

rm -f .git / index git reset

4) git은 재설정 후 unstaged 파일을 제공합니다. 소원에 따라 보관 또는 폐기

참고 URL : https://stackoverflow.com/questions/10144149/git-status-returns-fatal-not-a-git-repository-but-git-exists-and-head-has-prop

반응형