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을 찾기 위해 절대 경로를 사용했습니다. 해결책은 다음과 같습니다.
- git을 최신 버전으로 업그레이드하십시오 . 일부는 버전 1.7.10 이상이 필요하다고 말합니다. 방금 git 1.8.3으로 문제를 성공적으로 해결했습니다.
- 깨진 하위 모듈 폴더를 모두 삭제하십시오.
rm -rf broken_submodule_folder
- 등록 된 하위 모듈 업데이트 :
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 파일을 제공합니다. 소원에 따라 보관 또는 폐기
'Nice programing' 카테고리의 다른 글
Entity Framework Migrations 4.3을 사용할 때 데이터베이스 이름을 명시 적으로 지정하는 방법 (0) | 2020.12.10 |
---|---|
Java에서 상수 문자열 정의? (0) | 2020.12.10 |
PHP 삼항 연산자를 작성하는 방법 (0) | 2020.12.10 |
angularjs $ http.delete () 요청으로 데이터를 보내는 방법은 무엇입니까? (0) | 2020.12.10 |
태그를 한 커밋 앞으로 이동 (0) | 2020.12.10 |