Computer >> 컴퓨터 >  >> 프로그램 작성 >> 프로그램 작성

Git이 .git/FETCH_HEAD를 열 수 없음:권한이 거부됨 솔루션

Git은 프로젝트 폴더 내의 .git/ 디렉토리에 있는 파일에 대한 쓰기 권한이 필요합니다. Git 명령줄에 이 폴더에 대한 액세스 권한이 없으면 파일을 가져오려고 할 때 "Cannot open .git/FETCH_HEAD:Permission denied"와 같은 오류가 발생합니다.

이 가이드에서는 이 오류의 의미와 원인에 대해 설명합니다. 프로그램에서 수정하는 방법을 배울 수 있도록 예제를 살펴보겠습니다.

.git/FETCH_HEAD를 열 수 없음:권한이 거부되었습니다.

Git 리포지토리에는 .git/이라는 특수 폴더가 있습니다. 이 폴더는 숨겨져 있기 때문에 보지 못했을 수 있습니다. 이 폴더의 숨겨진 상태는 폴더 이름의 시작 부분에 오는 마침표(".")로 표시됩니다.

이 폴더에는 리포지토리에 대한 다양한 메타데이터가 포함되어 있습니다. 프로젝트별 구성 옵션, 프로젝트의 참조, 현재 HEAD 등 리포지토리에 대한 중요한 정보를 추적합니다.

Git은 이 폴더에 대한 읽기 및 쓰기 권한이 필요합니다. git config 및 git pull과 같은 명령을 실행하면 내용이 변경되기 때문입니다.

예시 시나리오

GitHub에서 ck-git이라는 저장소를 복제할 것입니다. 이 저장소에는 README.md라는 파일이 있습니다. 이 리포지토리를 복제하려면 git clone 명령을 사용할 수 있습니다.

sudo git clone https://github.com/Career-Karma-Tutorials/ck-git

README.md 파일의 내용은 현재 다음과 같습니다.

# ck-git

보다 설명적인 README.md를 포함하도록 이 파일을 변경하려고 합니다. 이 파일을 텍스트 편집기에서 열고 내용을 다음과 같이 변경할 것입니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

# Career Karma Git Demo

Career Karma의 Git 튜토리얼을 위한 데모 파일이 있는 저장소.

그게 낫다. 우리 파일은 Git 저장소의 목적을 보다 정확하게 설명합니다. 이제 커밋을 생성할 수 있도록 스테이징 영역에 이 변경 사항을 추가해 보겠습니다.

sudo git add README.md

Git은 다음 커밋에 README.md를 추가하고 싶다는 것을 알고 있습니다. 변경 사항을 원격 저장소에 표시하려면 커밋에 추가해야 합니다.

sudo git commit -m "docs: Make README.md more descriptive"

이제 커밋을 원격 저장소로 푸시할 준비가 되었습니다. 코드를 푸시하기 전에 원격 버전의 저장소를 가져올 것입니다. 이렇게 하면 리포지토리를 복제한 이후 변경된 사항이 최신 상태인지 확인할 수 있습니다.

git pull

이 명령은 다음을 반환합니다.

error: cannot open .git/FETCH_HEAD: Permission denied

이 오류는 Git이 구성 파일 중 하나인 FETCH_HEAD에 액세스할 수 없음을 알려줍니다.

해결책

"sudo" 명령을 사용하여 ck-git 저장소를 복제했습니다. 이것은 저장소가 루트 사용자로 복제되었음을 의미합니다. 루트 사용자가 리포지토리를 복제했기 때문에 리포지토리의 파일은 루트 사용자가 소유합니다.

ls -la 명령을 실행하여 이를 확인할 수 있습니다.

total 8
drwxr-xr-x   4 root   staff   128 Sep 17 07:15 .
drwxr-xr-x+ 90 James  staff  2880 Sep 17 07:15 ..
drwxr-xr-x  12 root   staff   384 Sep 17 07:15 .git
-rw-r--r--   1 root   staff 	1 Sep 17 07:15 README.md

폴더의 모든 파일은 "직원" 계정의 일부인 "루트"가 소유합니다. "sudo"를 사용하지 않고 원격 저장소를 가져오려고 하면 오류가 반환됩니다. 이는 표준 사용자 계정에 폴더의 파일을 수정할 수 있는 권한이 없기 때문입니다.

이 문제를 해결하기 위해 폴더에 있는 파일의 소유권을 변경할 것입니다. chown 명령을 사용하여 이 작업을 수행할 수 있습니다.

sudo chown -R james:staff .

이 명령은 .git/ 폴더를 포함하여 저장소에 있는 모든 파일 및 폴더의 소유권 세부 정보를 변경합니다. 이제 우리는 디렉토리의 소유자이며 프로젝트 폴더에 대한 전체 액세스 권한을 가집니다. 이제 코드를 가져올 수 있습니다.

git pull

이 명령은 성공적으로 실행되고 다음을 반환합니다.

Already up to date.

이제 마지막으로 코드를 가져온 이후로 원격 저장소에 변경 사항이 없음을 알고 있습니다. 저장소를 만들 때 마지막으로 코드를 가져왔습니다.

결론

Git "Cannot open .git/FETCH_HEAD:Permission denied" 오류는 현재 사용자가 프로젝트 폴더의 .git/ 디렉토리에 액세스할 수 없을 때 원격 리포지토리에서 코드를 가져오려고 할 때 발생합니다.

이 오류를 해결하려면 현재 사용자에게 작업 중인 Git 저장소에 대한 읽기-쓰기 권한이 있는지 확인하십시오.