programing

Git Push 오류: 저장소 데이터베이스에 개체를 추가할 수 있는 권한이 없습니다.

css3 2023. 4. 15. 09:10

Git Push 오류: 저장소 데이터베이스에 개체를 추가할 수 있는 권한이 없습니다.

리모트로 , 에러가 합니다.「 GIT 」insufficient permission for adding an object to repository database

그 후 여기에서 수정에 대해 읽었습니다.모든 파일이 올바른 그룹에 속했기 때문에 다음 번 푸시에서는 이 방법이 효과가 있었습니다만, 다음 번에는 다른 사용자가 변경을 가하면 오브젝트 폴더에 새로운 항목이 생성되어 기본 그룹이 그룹으로 지정되었습니다.디벨로퍼의 체크인을 위한 디폴트 그룹을 모두 변경하는 것밖에 생각할 수 없지만, 그것은 해킹인 것 같습니다.좋은 생각 있어요?감사해요.

복구 권한

근본 원인을 파악하고 수정한 후(아래 참조) 권한을 복구해야 합니다.

cd /path/to/repo/.git
sudo chgrp -R groupname .
sudo chmod -R g+rwX .
sudo find . -type d -exec chmod g+s '{}' +

할 수 , 「 」는.chgrp를 chmod로 합니다.sudo chmod -R a+rwX .

근본적인 원인을 수정하지 않으면 오류가 계속 발생하고 위의 명령을 계속해서 다시 실행해야 합니다.

근본 원인

이 에러는, 다음의 몇개의 원인으로 발생할 가능성이 있습니다.

  • ( ).core.sharedRepositorygit help config의은 다음과 같습니다.

     git config core.sharedRepository
    

    group ★★★★★★★★★★★★★★★★★」true ★★★★★★★★★★★★★★★★★」1또는 일부 마스크를 실행합니다.

     git config core.sharedRepository group
    

    다음 재귀적인 '재귀적'을 합니다.chmod ★★★★★★★★★★★★★★★★★」chgrp('어느 쪽인가')

  • 운영체제는 디렉토리의 setgid 비트를 "모든 새 파일과 하위 디렉토리가 그룹 소유자를 상속해야 합니다"로 해석하지 않습니다.

    core.sharedRepositorytrue ★★★★★★★★★★★★★★★★★」groupGit는 GNU 운영체제의 기능(예를 들어 모든 Linux 디스트리뷰션)에 의존하여 새로 생성된 서브디렉토리가 올바른 그룹(저장소의 모든 사용자가 속한 그룹)에 의해 소유되도록 합니다.이 기능은 GNU coreutils 매뉴얼에 기재되어 있습니다.

    set-group-ID는 set-group-ID로 설정되어 있습니다.chmod ★★★★★★★★★★★★★★★★★」chown을 사용하다

    operating system, operating system, operating system, operating system, operating system, operating system.이러한 운영 체제에서는 모든 Git 사용자가 동일한 기본 그룹을 가지고 있는지 확인해야 합니다.저장소의 하려면 , 「Data」를 실행합니다.git config core.sharedRepository world(서양속담, 서양속담)

  • 파일 시스템이 setgid 비트(예: FAT)를 지원하지 않습니다.ext2, ext3, ext4는 모두 setgid 비트를 지원합니다.제가 알기로는 setgid 비트를 지원하지 않는 파일 시스템도 그룹 소유의 개념을 지원하지 않기 때문에 모든 파일과 디렉토리는 같은 그룹에 의해 소유됩니다(어느 그룹이 마운트 옵션인지).이 경우 모든 Git 사용자가 파일 시스템 내의 모든 파일을 소유한 그룹에 속해 있는지 확인하십시오.

  • 모든 Git 사용자가 저장소 디렉토리를 소유하는 동일한 그룹에 속하지는 않습니다.디렉토리의 그룹 소유자가 올바르고 모든 사용자가 해당 그룹에 속해 있는지 확인합니다.

Ubuntu(또는 Linux)의 경우

프로젝트 루트부터

cd .git/objects
ls -al
sudo chown -R yourname:yourgroup *

다음과 같이 이름과 그룹을 식별할 수 있습니다.

# for yourname
whoami
# for yourgroup
id -g -n <yourname>

주의: sudo 라인의 끝에 있는 별을 기억하십시오.

다음 명령을 사용하여 마법처럼 작동합니다.

sudo chown -R "${USER:-$(id -un)}" .

명령어를 그대로 입력합니다(여분 공백과 끝에 점 1개 포함).

명령어 분류

sudo

루트 사용자로 실행하다

chown

소유권을 변경하다

-R

모든 파일 및 폴더에 대한 재귀 작업

"${USER:-$(id -un)}"

$ 경우 $USER 실행에서 .id -un

.

현재 디렉터리 대상 지정

sudo chmod -R ug+w .;

으로는 ★★★★★★★★★★★★★★★★★」.git/objects파일에 쓰기 권한이 없습니다.위 행은 디렉토리의 모든 파일 및 폴더에 권한을 부여합니다.

솔루션을 추가하고 싶었을 뿐입니다.OS X에서 일부 디렉토리와 다른 디렉토리(사용자 디렉토리)의 root 소유권을 가진 리포(repo)가 있어 위에서 설명한 것과 같은 오류가 발생했습니다.

다행히 해결책은 간단했다.터미널에서:

sudo chown -R Home projectdirectory

난 해결했어...이것만:

sudo chmod 777 -R .git/objects

은 다음 리모트레포에 SSH를 하여 SSH의 하는 것입니다.ls -al.

user:group 소유권이 다른 파일이 2~3개 있는 경우, 이것이 문제입니다.

과거에도 몇 가지 레거시 스크립트가 Git Repo에 액세스하여 보통 다른 (유닉스) 사용자가 마지막으로 푸시/수정된 파일을 의미하며, 사용자는 이러한 파일을 덮어쓸 권한이 없습니다., 그 후 git 그룹을 으로 생성해야 .chgrpobjects와 그.git

된 모든 ""의 을 가질 수해야 합니다.git.

chmod g+s 디렉토리 이름

업데이트: Core에 대해 몰랐습니다.공유 저장소다행이군요, 아마 위와 같은 기능을 하고 있을 겁니다.

가장 간단한 솔루션은 다음과 같습니다.

프로젝트 dir:

sudo chmod 777 -R .git/objects

복사해서 단말기에 붙여넣기만 하면 됩니다.

sudo chown -R "${USER:-$(id -un)}" .

이 문제는 달리기를 하면 쉽게 발생할 수 있습니다.git init변경 내용을 푸시할 때 사용하는 사용자와 다른 사용자가 있습니다.

[1]의 지시에 맹목적으로 따르면 git-user를 root로 만들고 중간에 사용자를 변경하지 않고 git init으로 바로 넘어갔기 때문에 발생합니다.

[1] http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server

Linux, macOS:

cd .git/
sudo chown -R name:group *

서 ''는name과 """입니다.group는 사용자 그룹입니다

단말기에 다음 명령을 복사하여 붙여넣어야 합니다.

sudo chmod 777 -R .git/objects

몇 가지를 더하고 나면...그들을 저지하고 결국 그것을 밀고 나가라! 빵!!모든 문제 시작...아시다시피 신규 프로젝트와 기존 프로젝트를 모두 정의하는 방식에는 몇 가지 차이가 있습니다.다른 사람이 같은 파일 또는 콘텐츠를 추가/커밋/푸시하려고 하면(양쪽을 같은 개체로 유지) 다음과 같은 오류가 발생합니다.

$ 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에 해당하는 새 속성을 추가해야 합니다. 설명서에 따르면, 이 경우 저장소 그룹이 다음 작업을 수행합니다.

$ git config core.sharedRepository group

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

디렉토리 내에서 특정 소유권을 가진 파일을 발견하는 방법으로서 제 의견을 덧붙이겠습니다.

이 문제는 루트로 git 명령어를 실행했기 때문에 발생했습니다.수신된 메시지는 다음과 같습니다.

$ git commit -a -m "fix xxx"
error: insufficient permission for adding an object to repository database .git/objects
error: setup.sh: failed to insert into database

는 처음에 ★★★★★★★★★★★★★★★★★★★★★★★★★를 보았다.git config -l 저는 다음과 같이 ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ

find .git/ -exec stat --format="%G %n" {} + |grep root

chown -R $(id -un):$(id -gn) .git/objects/

git commit -a -m "fixed git objects ownership"

내 경우에는 어떤 제안도 효과가 없었다.Windows 를 사용하고 있는 경우, 다음과 같이 조작할 수 있습니다.

  • 원격 보고서를 다른 폴더에 복사
  • 폴더를 공유하고 적절한 권한을 부여합니다.
  • 로컬 컴퓨터에서 폴더에 액세스할 수 있는지 확인하십시오.
  • git remote add foo //SERVERNAME/path/to/copied/git)
  • 를를누누누누누git push foo master과가있??? ??좋아! 이제 작동하지 않는 리포는 삭제하고 이전 이름으로 변경해 주세요.사용 권한과 공유 속성이 동일한지 확인하십시오.

나도 같은 문제에 부딪혔어.여기서 읽으면서 나는 그 메세지가 언급하고 있는 것이 파일 허가라는 것을 깨달았다.해결 방법은 다음과 같습니다.

/etc/inetd.d/syslog-gpv

사용자 'nobody'로 git-daemon을 시작했기 때문에 쓰기 권한이 없었습니다.

# Who   When    What
# GPV   20Nov13 Created this by hand while reading: http://linuxclues.blogspot.co.uk/2013/06>/git-daemon-ssh-create-repository-debian.html
# GPV   20Nov13 Changed owner (to user_git) otherise nobody lack permission to update the repository
#git stream tcp nowait nobody  /usr/bin/git git daemon --inetd --verbose --enable=receive-pack --export-all /gitrepo
git stream tcp nowait user_git  /usr/bin/git git daemon --inetd --verbose --enable=receive-pack --export-all /gitrepo

(다른 사람이 inetd conf 파일 git-gpv를 호출하는 것은 의심됩니다.일반적으로 /etc/inetd.conf에 직접 있습니다.)

효과가 있다

sudo chmod -R g+rwX .

푸시하는 디렉터리에 대한 충분한 쓰기 권한이 필요합니다.

내 경우:Windows 2008 서버

git repo 디렉토리 또는 부모 디렉토리를 오른쪽 클릭합니다.

[ Properties ]> [ Sharing ]탭> [ Advanced Sharing ]> [ Permissions ]> 사용자에게 적절한 접근권이 있는지 확인합니다.

또한 동일한 별칭을 가진 다른 로컬 저장소를 추가했을 수도 있습니다.예를 들어 푸시하려고 하면 원격 저장소에서 사용자의 자격 증명을 받아들이지 않는 2개의 로컬 폴더가 있습니다.

로컬 저장소 별칭 이름을 바꿉니다. https://stackoverflow.com/a/26651835/2270348 링크를 따라갈 수 있습니다.

의 로컬 를 1개의 로컬 저장소로 .origin, 예를 이름을 바꾼다, 라고 합니다.origin로로 합니다.anotherorigin이들은 에일리어스일 뿐이므로 새로운 에일리어스와 각각의 리모트브런치를 기억하기만 하면 됩니다.

복구 권한

이것을 사용하여 .git 폴더를 복구했는데, @richard-hansen의 답변이 누락되었습니다.

먼저 .git 폴더에 들어가야 합니다.

cd /path/to/repo/.git

그런 다음 다음 다음 명령을 실행합니다.

sudo chown -R user:groupname .
sudo chmod -R g+rwX .
sudo find . -type d -exec chmod g+s '{}' +

그러면 모든 서브모듈도 수정됩니다.

이 문제에 대한 해결 방법은 여러 개의 실행 중인 도커 컨테이너를 사용하여 변경 및 커밋/푸시를 시도할 때 재현할 수 있는 방법이 하나 더 있습니다.

저 같은 경우에는 모든 컨테이너가 가동되는 동안 아무것도 할 수 없었습니다.하지만 내가 그들을 죽이자마자 - 나는 아무 문제없이 헌신할 수 있었다.

이러한 동작의 이유에 대해서는 별로 연구하지 않았습니다만, 로컬로 변경하는 코드는 도커 컨테이너에서 재사용되어 루트 유저로부터 실행되고 있기 때문에, 사용하는 파일의 권한을 변경할 수 있기 때문에, 문제가 발생할 가능성이 있습니다.

이건 Rstudio 프로젝트에 참여했을 때 받은 거예요.깜빡 잊고 있었구나

sudo rstudio

프로그램 시작 시.다른 버그가 있기 때문에, 실제로 할 필요가 있습니다.

sudo rstudio --no-sandbox

이 를 를 、 it 、 it 、 it 、 after 、 after 、 after 、 after 、 after after after after after after after 。생각해 본 후, 는 내가 .umask 022른른른른

은 모두 도움이 . , 하다.chmod새로운 것이다.umask합니다..git/object/은 '바꾸다'입니다umask으로 022.

Vagrant를 사용하여 원격 개발 머신을 실행할 때 이 오류가 발생했습니다.모든 파일에 올바른 권한이 있기 때문에 위의 해결 방법이 작동하지 않았습니다.

고쳤어요.config.vm.box = "hasicorp/bionic64"로로 합니다.config.vm.box = "bento/ubuntu-20.10".

'아까', '아까', '아까'로 해결했습니다.git commit

그 문제는 자동적으로 해결되었다.

무슨 일입니까?^C(Control-C)를 사용하여 부정한 커밋메시지 기입을 중단했습니다.(잘못된 클립보드에서 잘못된 메시지를 붙여넣었습니다.)프로세스가 백그라운드에서 일시적으로 동결되어 데이터베이스가 일시적으로 잠겼을 것입니다.

ssh://「」의 URL이 , http://URL 입니다.

에 이 저장소를 했습니다.http://복제와 푸시 사이에 내 계정에서 2FA를 활성화하고 그 후에 공개키를 코드 저장소에 추가해야 했습니다.

가 유효하게 되어 에, 2FA는 유효하게 되어 .http://URL 입니다.

명령줄 프롬프트를 admin으로 여십시오.그런 다음 프로젝트 파일이 읽기 전용이 아닌지 확인하십시오.

윈도에서는 프로젝트 폴더를 오른쪽 클릭하여 [추가 옵션 표시]를 클릭합니다.-> [속성]를 클릭합니다.-> [읽기 전용]-> [적용]의 선택을 취소합니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

여기에 이미지 설명 입력

이 문제에 너무 많이 직면했지만 발생할 때마다 sudo 명령어를 사용하여 푸시 또는 커밋을 시도합니다.패스워드 입력 후 sudo 없이 푸시 또는 커밋합니다.

sudo git commit -m "message"

그리고 내 패스워드 i를 다시 입력한 후

git commit -m "message"

는 방금 ★★★★★★★★★★★★★★★★★★★★★★sudo git commit -m "XY"하고 Ctrl+C로 다시 했습니다.git commit -m "XY"자기기작작작작작

가장 쉽고 간단한 솔루션 ↓

sudo chmod 777 -R /path/to/your/git/repository/.git/objects

언급URL : https://stackoverflow.com/questions/6448242/git-push-error-insufficient-permission-for-adding-an-object-to-repository-datab