GitHub로 푸시 오류-저장소 데이터베이스에 객체를 추가 할 수있는 권한이 없습니다


126

내 GitHub 리포지토리에 "git push"를 시도하는 동안 비정상적인 오류가 발생합니다.

계산 개체 : 8, 완료.
2 개의 스레드를 사용한 델타 압축.
압축 객체 : 100 % (4/4) 완료
객체 쓰기 : 100 % (5/5), 1.37 KiB, 완료
총 5 (델타 2), 재사용 된 0 (델타 0)
오류 : 저장소 데이터베이스에 개체를 추가 할 수있는 권한이 없습니다.

치명적 : 개체를 쓰지 못했습니다.
오류 : unpack-objects가 오류 코드 128과 함께 종료되었습니다
오류 : 포장 풀기 실패 : 포장 풀기 비정상 종료
git@github.com으로 : bixo / bixo.git
 ! [원격 거부 됨] master-> master (해당 패키지 없음 오류)
오류 : 일부 심판을 'git@github.com : bixo / bixo.git'으로 푸시하지 못했습니다.
  • GitHub에서 클린 클론을 수행 한 후 수정 된 파일을 편집 / 추가 / 커밋 / 푸시 할 수 있습니다.
  • 그런 다음 이것을 두 번 반복하면 위의 오류가 발생합니다.
  • 다른 GitHub 리포지토리로 잘 밀어 넣을 수 있습니다.
  • 내 파일 / 디렉토리 권한을 확인했는데 문제가없는 것 같습니다.
  • Mac OS X 10.5.8에서 git 1.6.2.3을 실행 중입니다.

위의 저장소는 이전 스택 오버플로 질문 ( SO 1904860 )의 재미의 원천 이므로 GitHub 저장소가 손상 되었을 수 있습니다. 검색을 통해 찾은 유일한 유사한 문제는 github에서보고 된 압축 풀기 문제 였습니다 . 특히 GitHub를 사용 하지 않을 때 다른 사람이이 문제 를 겪은 적이 있습니까?



1
이 오류가있는 사람들을위한 또 다른 힌트 : 잘못된 사용자를 사용하여 푸시했기 때문에이 오류가 발생했습니다. 내 서버에는 사용자가 foo있으며 git; 둘 다 읽을 수 /opt/git/<repo>는 있지만 git쓸 수는 있습니다. git에 아무것도 주어지지 않으면 현재 사용자로 기본 설정됩니다 .git/config. 아래의 정교한 답변은 필요하지 않았습니다.
Sebastian

답변:


209

github 외부 에서이 오류가 표시되면 해결 방법이 있습니다.

http://mapopa.blogspot.com/2009/10/git-insufficient-permission-for-adding.html 에서 가져 왔습니다.

ssh me@myserver
cd repository/.git

sudo chmod -R g+ws *
sudo chgrp -R mygroup *

git config core.sharedRepository true

그런 다음 git 데몬은 .git / objects에 쓸 때 그룹 파일 권한을 사용해야합니다.


4
+1 그것은 우리를 위해 일했다. 의 '는 무엇입니까 sudo chmod -R g+ws *?
Erik B

5
이렇게하면 다른 사용자가 만든 새 파일이 루트 디렉토리의 그룹 권한을 유지할 수 있습니다. 그렇지 않으면 저장소로 푸시 오류가 발생합니다.
syvex

Debian 6 및 PHPStorm IDE에서 Gitorious와 동일한 오류가 발생했습니다. "오류 : 저장소 데이터베이스 .git / objects에 개체를 추가 할 수있는 권한이 없습니다"라는 메시지가 표시됩니다. 이 솔루션을 프로젝트 상위 폴더에서 사용했으며 "+ s trick"으로 잘 작동합니다.
Benj

3
repo-config는 더 이상 사용되지 않습니다. 이어야 git config core.sharedRepository true합니다.
lpapp

4
참고 : 와일드 카드 " " 를 사용하면 숨겨진 파일 및 폴더 (예 : .git!)에는 영향을 미치지 않을 수 있습니다! 그래서 위의 경우에 대한 연구는, ./.git에 대한 명령을 실행하지 않습니다 뿐만 아니라
벤 Rogmans

54

일반적으로이 문제는 Git 서버 파일 시스템에 대한 잘못된 사용자 및 그룹 권한으로 인해 발생합니다. 자식 저장소는 사용자와 그의 그룹이 소유해야합니다.

예:

사용자가 "git", 그룹 "gitgroup"및 Git 리포지토리의 위치는 git@mygitserverxyz.com : path / to / repo.git입니다.

그런 다음 :

sudo chown -R git : gitgroup 경로 /to/repo.git/

이것은 git 불충분 한 권한 오류를 수정했습니다.


chown : 잘못된 사용자 :`git : git '
Alan Coromano

4
@MariusKavansky 시도 git : git 대신 $ USER : $ USER
dwurf

이것은 내 경우에는 한동안 만 작동합니다. 약간의 푸시 후 다시 실행해야합니다.
BuZZ-dEE

이것이 가장 좋은 대답이지만 chown을 ".git / objects"로 제한 할 수 있고 "git"이라고 부르는 사용자는 로그인 한 사용자 일뿐입니다. 사용자라는 사실은 git 서버에 의해 알려져 있거나 중요하지 않습니다.
Tristan

34
sudo chmod 777 -R .git/objects

4
이것은 나를 위해 일했지만 ... WTF ?? 나는 달 동안 REPO를 업데이트 된이 갑자기 ... 오늘 오후에 시작
GojiraDeMonstah

나에게 대한 해결책은 거의 동일하지만 .git 디렉토리에있는 일부 파일의 소유자를 변경 / 수정하는 것과 관련이 있습니다. 'root'로 로그인하는 동안 git 유지 관리를 수행했으며 소유자가 root로 변경되었거나 git가 의존하는 root 소유자로 새 파일을 만든 것으로 보입니다. 'apache'소유자로 자동 배포 스크립트를 실행 한 다음 작동이 중지되었습니다.
coatesap

9
chmod 777좋은 해결책은 아니며 안전하지 않은 해결 방법입니다. @Syvex의 답변을 대신보십시오 (setgid 사용)
4wk_

10

내가하려고 할 때 이런 일이 일어났다 git pull. 일부 분석에 따르면 누군가 과거에 루트로 커밋하여에 루트 소유권이있는 개체를 만들었습니다 .git/objects.

그래서 나는 달렸다

cd <repo>
la .git/objects/

그리고 root이것은 다음과 같은 일부 객체 (디렉토리)에 대한 소유권을 보여주었습니다 .

user@host:/repo> la .git/objects/
total 540
drwxr-xr-x 135 user user 4096 Jun 16 16:29 .
drwxr-xr-x   8 user user 4096 Jun 16 16:33 ..
drwxr-xr-x   2 user user 4096 Mar  1 17:28 01
drwxr-xr-x   2 user user 4096 Mar  1 17:28 02
drwxr-xr-x   2 user user 4096 Jun 16 16:27 03
drwxr-xr-x   2 user user 4096 Mar  3 13:22 04
drwxr-xr-x   2 root root 4096 Jun 16 16:29 05
drwxr-xr-x   2 user user 4096 Jun 16 16:28 07
drwxr-xr-x   2 root root 4096 Jun 16 16:29 08

그런 다음 나는 달렸다

sudo chown -R user:user .git/objects/

그리고 그것은 효과가 있었다!

나는 대체 된 사용자 물론, 내 진짜 사용자와.


4

위의 어느 것도 나를 위해 일하지 않았습니다. 몇 시간 후에 문제의 원인을 발견했습니다. 유형의 저장소 URL을 사용했습니다.

ssh://git@example.com/~git/repo.git

불행히도 나는 example.comuser로 로그인하도록 구성된 이름의 퍼티 세션을 저장했습니다 myOtherUser.

따라서 git example.com이 User 'git' 을 사용하여 호스트에 연결한다고 생각했지만 Git / TortoiseGit은 example.comUser를 사용하는 퍼티 세션에 연결했습니다 myOtherUser. 이로 ..insufficient permission..인해 동일한 오류가 발생합니다 (두 사용자가 서로 다른 그룹에 있기 때문에).

솔루션 : 퍼티 세션의 이름 example.commyOtherUse@example.com


4

chmod는 chown이어야하므로 올바른 행은 다음과 같습니다.

sudo chown -R gituser:gituser objects

3

이상하게도, 나는 가지고있는 레포의 복제본 하나에이 문제가 있었지만 다른 복제본에는 없었습니다. 동료 가이 문제를 성공적으로 해결 한 repo를 다시 복제하는 것 외에도 실패가 시작되기 전에 커밋에 대해 "git reset"을 수행했습니다. 그런 다음 변경 사항을 다시 커밋하고 그 후 성공적으로 푸시 할 수있었습니다. 따라서 모든 표시에도 불구하고 서버에 문제가 있었지만이 경우 로컬 리포지토리에 이상한 점이 있음을 나타냅니다.


3

사용자가 일부 내용을 푸시 할 때마다 파일 그룹이 사용자로 변경 되어이 오류가 발생했습니다. 그런 다음 다른 사용자가 리포지토리에 푸시하려고하면 권한 오류가 발생하여 푸시가 거부되었습니다. 따라서 sysadmin에게 리포지토리의 설정을 변경하도록 요청해야 리포지토리의 모든 파일 그룹이 사용자에 의한 푸시에 대해 변경되지 않도록합니다.

이러한 문제를 피하려면 git 저장소를 초기화 할 때 "git init --shared = group"명령을 사용하십시오.



2

그래도 나중에이 오류가 발생하면 이후에 권한을 설정 당신은 당신의 창조 마스크를 수정해야 할 수 있습니다. 그룹 커밋 권한이없는 새로운 커밋 (오브젝트 아래의 폴더)이 여전히 생성되고 있으므로 커밋 한 사람 만 저장소로 푸시 할 수 있습니다.

SSH 사용자의 umask를 모든 사용자가 공유하는 적절한 그룹으로 002로 설정하여이 문제를 해결했습니다.

예 :

umask 002

여기서 중간 0은 기본적으로 그룹 쓰기를 허용합니다.


유닉스 나 리눅스에서 그런 명령이 있습니까? umask가 특정 위치에 있지 않다고 확신하기 때문입니다.
Jan Hudec

예, 죄송합니다. 추가 디렉토리 매개 변수가 있다고 생각하는 이유를 모르겠습니다. 그것은 단순히 사용자에게 적용됩니다. 의견을 업데이트했습니다.
scipilot

2

당신이 몇 가지 물건을 추가 한 후 ... 그들을 저지른 후 그것을 모두 밀어! 쾅!! 모든 문제를 시작하십시오 ... 새 프로젝트와 기존 프로젝트가 정의 된 방식에 약간의 차이가 있습니다. 다른 사람이 동일한 파일 또는 내용을 추가 / 커밋 / 푸시하려고하면 (git은 둘 다 동일한 객체로 유지) 다음 오류가 발생합니다.

$ git push
Counting objects: 31, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (21/21), 2.07 KiB | 0 bytes/s, done.
Total 21 (delta 12), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects  remote: fatal: failed to write object

이 문제를 해결하려면이 경우 제한되는 운영 체제 권한 시스템을 염두에 두어야합니다. 문제를 더 잘 이해하고 git 객체의 폴더 (.git / objects)를 확인하십시오. 아마도 다음과 같은 것을 보게 될 것입니다.

<your user_name>@<the machine name> objects]$ ls -la
total 200
drwxr-xr-x 25 <your user_name> <group_name> 2048 Feb 10 09:28 .
drwxr-xr-x  3 <his user_name> <group_name> 1024 Feb  3 15:06 ..
drwxr-xr-x  2 <his user_name> <group_name> 1024 Jan 31 13:39 02
drwxr-xr-x  2 <his user_name> <group_name> 1024 Feb  3 13:24 08

*이 파일의 사용 권한은 사용자에게만 부여되었으며 아무도 변경할 수 없습니다 ... *

Level       u   g   o
Permission rwx r-x ---
Binary     111 101 000
Octal       7   5   0

문제 해결

수퍼 유저 권한이있는 경우 2 단계를 사용하여 직접 모든 권한을 변경하고 변경할 수 있습니다. 다른 경우에는 모든 사용자에게 사용자로 작성된 오브젝트를 요청해야합니다. 다음 명령을 사용하여 자신이 누구인지 확인하십시오. :

$ ls -la | awk '{print $3}' | sort -u 
<your user_name>
<his user_name>

이제 귀하와 모든 파일 소유자는 다음을 수행하여 해당 파일 권한을 변경해야합니다.

$ chmod -R 774 .

그런 다음 문서에 따라 새 리포지토리에 대해 --shared = group done과 동일한 새 속성을 추가해야합니다.

$ git config core.sharedRepository group

https://coderwall.com/p/8b3ksg


2

다음을 시도하십시오.

서버로 이동

    cd rep.git
    chmod -R g+ws *
    chgrp -R git *
    git config core.sharedRepository true

그런 다음 작업 사본 (로컬 저장소)으로 이동하여 git repack master

나에게 완벽하게 작동합니다.


2

당신은 이것을 사용할 수 있습니다

sudo chown -R $USER:$USER "$(git rev-parse --show-toplevel)/.git"

1
이게 뭐야? 설명을 추가 할 수 있습니까?
Anubian Noob

리포지토리의 최상위 디렉토리를 가져 오므로 현재 리포지토리의 위치에 관계없이 명령이 작동합니다. 이미 루트에 있다면 sudo chown -R $ USER : $ USER .git을 실행할 수 있습니다.
T Junn Tâm

질문으로 편집하십시오. 그렇지 않으면 귀하의 질문은 쓸모가 없습니다.
Anubian Noob 2016 년

2
sudo su root

chown -R user:group dir

dir은 git repo입니다.

그런 다음 수행하십시오.

git pull origin master

다른 사람의 커밋에 대한 변경 사항이 표시됩니다.


2
 user@M063:/var/www/html/app/.git/objects$ sudo chmod 777 -R .git/objects
 user@M063:/var/www/html/app/.git/objects$ sudo chown -R user:user .git/objects/

1

OK-GitHub에서 emi / bixo를 bixo / bixo로 포크하는 동안 발생하는 권한 문제였습니다. Tekkub가이 문제를 해결하면 다시 작동하기 시작했습니다.


무슨 일이 있었으며 어떻게 고쳤습니까? 얼마 전인 것 같은데 ... 어떤 아이디어?
Metagrapher

1
GitHub 측의 문제였습니다. 그래서 GitHub의 "Tekkub"가 "사용 권한을 수정했습니다"라고 말한 후 문제를 해결하기 위해 정확히 무엇을했는지 모르겠습니다.
kkrugler

멋있는. 정보 주셔서 감사합니다. 레포를 다시 복제했습니다. 차선책이지만 효과가있었습니다. 건배!
Metagrapher

4
우리는, 어, 우리는 고정 결함을 . 그래서 그는 더 이상 월급을받지 않을 것이기 때문에 자연스럽게 해결 될 것입니다.
Alan

1

오류가 객체 폴더에 대한 권한을 처리하기 때문에 객체 폴더에서 직접 chown을 수행하여 저에게 효과적이었습니다.


1

이것은 작동합니다 :

sudo chmod -R gituser.gituser objects

1
아니요 chmod. 파일 권한을 변경하고 사용자 및 그룹이 아닌 인수로 모드가 필요합니다. 그것은 하나의 chmod -R ${some_octal_num} blachown -R ${some_user}:${some_group} bla
데니스 겨울

1

위에서 설명한대로 git 문제가 발생하면 나와 같은 많은 사람들이 이와 같은 포럼에서 끝나는 것 같습니다. 그러나 문제로 이어질 수있는 원인이 너무 많아서 이미 위에서 배운 것처럼 다른 사람들이 배우는 데 어려움을 겪었던 원인을 공유하고 싶습니다.

sitecom의 Linux NAS에 대한 리포지토리가 있습니다 (Sitecom에서 NAS를 구매하지 마십시오). 나는 많은 컴퓨터에서 복제되었지만 갑자기 추진이 거부 된 레포가 있습니다. 최근에 NAS를 스퀴즈 박스 서버로 사용할 수 있도록 플러그인을 설치했습니다.

이 서버는 공유 할 미디어를 검색합니다. 내가 모르는 것은 버그로 인해 서버가 사용자와 그룹 설정을 squeeze : user로 변경한다는 것입니다. 그리고 그것은 모든 파일입니다. 따라서 내가 추진해야 할 권리를 변경했습니다.

서버가 사라지고 적절한 권한 설정이 다시 설정되고 모든 것이 완벽하게 작동합니다.

나는 사용했다

chmod -R g+ws *
chown -R <myuser>:<mygroup> *

myuser 및 mygroup 오프 코스가 시스템에 적합한 설정으로 교체되어야하는 경우 git : git 또는 gituser : gituser 또는 다른 것을 시도하십시오.,


1

저장소를 확인하십시오. $ git remote -v

origin  ssh://git@example.com:2283/srv/git/repo.git (fetch)
origin  ssh://git@example.com:2283/srv/git/repo.git (push)

여기에 'git @'하위 문자열이 있으며 원격 서버에서 git이 사용자 이름 'git'으로 인증하도록 지시합니다. 이 줄을 생략하면 git은 다른 사용자 이름으로 인증하므로이 오류가 발생합니다.


1

내 경우에는 내 컴퓨터와 git 가상 서버 사이에 통합 인증 (예 : 도메인 + AD와 같은 서비스)이 없었습니다. 따라서 git 사용자와 그룹은 가상 서버에 대해 로컬입니다. 필자의 경우 원격 사용자 (원격 서버에 로그인하는 데 사용)가 원격 자식 그룹에 추가되지 않았습니다.

ssh root@<remote_git_server>
usermod -G <remote_git_group> <your_remote_user>

그 후 위의 게시물에 설명 된 것처럼 권한을 확인하십시오 ...


1

sudo git push -u origin --all 을 사용해 보셨습니까 ? 때로는이 문제를 피하는 것이 유일한 방법 일 수도 있습니다. 관리자 시스템 암호 (시스템에 로그인 할 수있는 암호)를 묻는 메시지가 표시되면 암호를 입력하거나 커밋해야합니다.

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