힘내 푸시 오류 : 이전 연결을 해제 할 수 없습니다 (권한 거부).


192

원격 서버에는 저장소의 자식 체크 아웃을하기 위해 수신 후 후크가 설정되어 있습니다.

#!/bin/sh
GIT_WORK_TREE=/var/www/<website> git checkout -f

그러나 로컬 컴퓨터에서 서버의 git 리포지토리로 푸시하면 다음 오류 메시지가 나타납니다.

remote: error: unable to unlink old '<file>' (Permission denied)

이것은 거의 모든 파일에 대해 한 번의 오류 메시지로 여러 번 나타납니다.

그러나 git을 사용하여 변경할 수있는 README.txt 파일이 있습니다. 권한은 다음과 같습니다.

-rw-r--r--  1 <serverusername>  <serverusername>  2939 Aug  2 10:58 README.txt

그러나 소유자와 권한이 동일한 다른 파일은 오류가 발생합니다.

다른 웹 사이트의 다른 로컬 저장소에는 로컬 컴퓨터 사용자 이름이 소유자 인 파일이 있으며 원격 서버로 푸시하면 파일의 원격 서버 소유자를 존중하고 매력처럼 작동합니다.

분명히 권한 관련 오류 인 것 같지만 제안을 해결할 방법을 찾을 수 없습니다.

답변:


336

파일을 링크 해제해야 할 경우 파일이 아닌 파일에 대한 권한 'w'가 있어야합니다.


65
실제로 이것이 문제였으며 sudo chmod -R g+w유죄 폴더를 사용하여 문제를 해결했습니다 .
rfc1484

1
세상에 고마워 파일에 대한 올바른 사용 권한이 있다고 생각하여 화가났습니다. 업데이트는 실제로 mv덮어 쓰는 것보다 실제로 동작 과 비슷 합니다.
doublejosh

1
dir 권한을 변경하면 나에게 도움이되었습니다 (감사합니다!). 문제의 sftp를 통해 문제의 파일을 수동으로 덮어 쓸 수 있기 때문에 이상합니다. 자식이 똑같이하려고 할 때 할 수 없었습니다.
Jonathan Stark

1
또한 파일을 여전히 열어 놓은 경우이 오류도 나타납니다. 같은 오류가 있었기 때문에 변경 사항을 적용 할 수 없었습니다.
Matias

1
ls -l디스플레이 의 첫 문자 는 파일 형식을 나타내며 권한과 관련이 없습니다. 나머지 9 개의 문자는 3 개의 세트에 있으며 각각 3 개의 권한 클래스를 나타냅니다. 첫 번째 세트는 사용자 클래스를 나타냅니다. 두 번째 세트는 그룹 클래스를 나타냅니다. 세 번째 세트는 다른 클래스를 나타냅니다. g+wchmod를의 그룹을 설정합니다 (제공 g쓰기 (받는 매개 변수) 권한 w매개 변수)
rfc1484


42

IDE를 사용하는 경우 문제는 파일이 일부 프로세스에서 사용되었다는 것입니다. 바람둥이가 파일을 사용하는 것처럼. 특정 프로세스를 식별하고 닫으십시오. 문제가 해결 될 것입니다.


13

나는 같은 문제가 있었고 위의 해결책 중 어느 것도 나를 위해 일하지 않았다. 문제가있는 폴더를 삭제했습니다. 그때:

git reset --hard

git 상태를 정리하기 위해 남아있는 파일을 모두 삭제 한 후 다음을 수행하십시오.

git pull

마침내 효과가있었습니다.

참고 : 폴더가 예를 들어 빌드 파일이있는 공용 폴더 인 경우 파일을 다시 빌드해야합니다.


고마워, 아무것도 나를 위해 일하고 있었는데 그것을 삭제하는 것이 유일한 옵션 인 것 같습니다.
math0ne

제 경우에는 해당 폴더는 .git
Tushar Kathuria입니다.

13

폴더에 대한 소유권에 문제가 있다고 생각하여 현재 사용자 소유권으로 설정하십시오.

sudo chown -R your_login_name /path/to/folder
해결책을 찾을 수 있습니다 [여기] [1]

8

FWIW-비슷한 문제가 있었고 이것이 권한 모드를 넘어서서 그것을 완화했는지 확실하지 않습니다.이 문제로 분기를 사용하고있는 Eclipse를 닫는 중입니다.


마찬가지로 버전 제어 CSV 파일을 Excel에서 열 때이 오류가 발생했습니다. Excel을 닫으면 해결되었습니다. 이것은 아마도 Windows의 다른 응용 프로그램에서도 마찬가지이며 편집하는 동안 프로그램이 파일을 열린 것으로 표시하는 방법에 따라 다릅니다.
Carel

4

이것은 오래된 질문이지만 Mac 사용자에게 도움이 될 수 있습니다.

Time Machine에서 수동으로 파일을 복사하는 경우 Time Machine을 통해 파일을 복원하는 대신 모든 것에 ACL 을 추가 하여 권한을 손상시킬 수 있습니다.

예를 들어, 이 기사 에서 "Mac OS X 파일 권한을 수정하는 방법" 섹션은 "모두"가 사용자 설정 권한을 가지고 있음을 보여줍니다.

http://dreamlight.com/how-to-fix-mac-os-x-file-permissions의 잘못된 권한

해당 디렉토리 / 파일에서 ACL을 제거해야합니다. 이 수퍼 유저 답변 은 여기에 있지만 다음 명령은 다음과 같습니다.

sudo chmod -RN .

그런 다음 디렉토리와 파일에 적절한 권한이 있는지 확인할 수 있습니다. 750디렉토리와 644파일에 사용 합니다.


3

서버가 Intellij에서 실행 중일 때이 오류와 다른 이상한 자식 오류가 발생합니다. 서버를 중지하고 git 명령을 다시 시도하면 자주 해결됩니다.


3
git reset --hard

나를 위해 일했다


4
그것은 훨씬 더 많은 일을하기 때문에 약간 극단적 일 수 있습니다.
cdaddr

3
sudo chown -R $USER:$USER .

나를 위해 일을 했어.


2

당기면 지역 변경이 발생했을 수 있습니다.

추적되지 않은 파일을 추가하십시오.

git add.

스 태쉬 변경.

자식 숨김

로컬 변경 사항을 삭제하십시오.

자식 숨김 드롭

sudo 권한으로 가져 오기

sudo git pull 원격 브랜치


그것은 로컬 파일의 허가에 관한 것입니다. git과는 아무런 관련이 없습니다. sudo로 명령을 실행했는데 모든 단계가 필요하지 않았습니다.
raviramani

이것이 나를 위해 유일하게 일한 것입니다.
에릭

2

git조차도 덮어 쓸 수없는 일부 파일은 쓰기 방지되어 있습니다. sudo chmod 775 foldername과 같이 쓰기를 허용하도록 폴더 권한을 변경하십시오.

그런 다음 실행

git pull 

다시


1

또한 루트 디렉토리 자체의 권한을 확인하십시오!

당신은 찾을 수 있습니다 :

drwxr-xr-x  9 not-you www-data  4096 Aug  8 16:36 ./
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 README.txt
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 UPDATE.txt

'permission denied'오류가 나타납니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.