尝试对我的GitHub存储库执行“git push”时,我遇到了一个异常错误:
Counting objects: 8, done. Delta compression using 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (5/5), 1.37 KiB, done. Total 5 (delta 2), reused 0 (delta 0) error: insufficient permission for adding an object to repository database ./objects fatal: failed to write object error: unpack-objects exited with error code 128 error: unpack failed: unpack-objects abnormal exit To git@github.com:bixo/bixo.git ! [remote rejected] master -> master (n/a (unpacker error)) error: failed to push some refs to 'git@github.com:bixo/bixo.git'
以上存储库是我之前Stack Overflow问题(SO 1904860)的乐趣之源,因此GitHub存储库可能已损坏。我通过搜索找到的唯一类似问题是在github上报告的unpack failed问题。有没有其他人遇到此问题,尤其是当不使用GitHub时?
答案 0 :(得分:208)
当你在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时应使用组文件权限。
答案 1 :(得分:55)
通常,此问题是由Git服务器文件系统上的用户和组权限错误引起的。 git存储库必须由用户和他的组拥有。
示例:的
如果您的用户被称为“git”,他的组“gitgroup”和Git仓库的位置是:git@mygitserverxyz.com:path / to / repo.git
然后做一个:
sudo chown -R git:gitgroup path/to/repo.git/
这为我修复了git不足的权限错误。
答案 2 :(得分:33)
sudo chmod 777 -R .git/objects
答案 3 :(得分:10)
当我尝试git pull
时,这发生在我身上。一些分析表明,过去曾有人提交root用户,因此在.git/objects
中创建了一些具有root权限的对象。
所以我跑了
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 :(得分:4)
chmod应该是chown,所以正确的行是:
sudo chown -R gituser:gituser objects
答案 5 :(得分:3)
我收到此错误是因为每次用户推送某些内容时,该文件的组都会更改为该用户。然后,如果其他一些用户试图进入存储库,则会导致权限错误并且推送被拒绝。因此,需要请求您的系统管理员更改存储库的设置,以便任何用户的任何推送都不会更改存储库中任何文件的组。
要避免此类问题,请确保在初始化git存储库时使用命令“git init --shared = group”。
答案 6 :(得分:3)
奇怪的是,我在我的回购的一个克隆上遇到了这个问题,而不是我的另一个。除了重新克隆repo(同事为成功解决这个问题所做的那样)之外,我设法对失败开始之前的提交进行了“git reset”。然后我重新提交了更改,之后我才能成功推送。因此,尽管所有迹象表明服务器上存在问题,但在这种情况下,它显然表明本地回购有些奇怪。
答案 7 :(得分: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/
答案 8 :(得分:2)
你可以使用这个
sudo chown -R $USER:$USER "$(git rev-parse --show-toplevel)/.git"
答案 9 :(得分:2)
尝试执行以下操作:
转到您的服务器
cd rep.git
chmod -R g+ws *
chgrp -R git *
git config core.sharedRepository true
然后转到您的工作副本(本地存储库)并按git repack master
对我来说很完美。
答案 10 :(得分:2)
sudo su root
chown -R user:group dir
dir是你的git repo。
然后做:
git pull origin master
您会看到其他人提交的更改。
答案 11 :(得分: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
要解决此问题,您必须考虑操作系统的权限系统,因为在这种情况下您受其限制。 Tu更好地理解问题,继续检查你的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
解决问题
如果您拥有超级用户权限,则可以使用第二步自行更改所有权限,在任何其他情况下,您需要向所有用户询问使用其用户创建的对象,请使用以下命令知道他们是谁:
$ ls -la | awk '{print $3}' | sort -u
<your user_name>
<his user_name>
现在您和所有文件的所有者用户必须更改这些文件权限,执行:
$ chmod -R 774 .
之后,您将需要添加一个新属性,该属性相当于--shared =为新存储库完成的组,根据文档,这使存储库组可写,执行它:
$ git config core.sharedRepository group
答案 12 :(得分:2)
如果在设置权限之后稍后仍然出现此错误,则可能需要修改创建掩码。我们发现我们的新提交(对象下的文件夹)仍在创建时没有组写权限,因此只有提交它们的人才能进入存储库。
我们通过将SSH用户的umask设置为002并使用所有用户共享的相应组来解决此问题。
e.g。
umask 002
其中,中间0默认允许组写。
答案 13 :(得分: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将在不同的用户名下进行身份验证,因此会发生此错误。
答案 14 :(得分:1)
我想像我这样的很多人在上面讨论的git问题出现时会在这样的论坛中结束。然而,有很多原因可能会导致这个问题,我只是想分享是什么原因导致我的麻烦让别人学习,就像我从上面已经学到的那样。
我在sitecom的Linux NAS上有我的回购(从不从Sitecom购买NAS,pleeaaase)。我在这里有一个repo克隆在许多计算机上,但我突然被拒绝推送。最近我安装了一个插件,这样我的NAS可以作为一个挤压箱服务器。
此服务器扫描要共享的媒体。我不知道的是,可能因为一个错误,服务器将用户和组设置更改为挤压:用户查看它所查看的所有文件。这就是所有文件。从而改变了我必须推动的权利。
服务器已经消失,重新建立了正确的权限设置,一切正常。
我用过
chmod -R g+ws *
chown -R <myuser>:<mygroup> *
必须使用适当的系统设置替换myuser和mygroup off-course。尝试git:git或gituser:gituser或其他你可能喜欢的东西。
答案 15 :(得分:1)
在我的情况下,我的机器和git虚拟服务器之间没有统一的身份验证(例如,在域+ AD类服务中)。因此,git用户和组是虚拟服务器的本地用户。在我的情况下,我的远程用户(我用来登录远程服务器)只是没有添加到远程git组。
ssh root@<remote_git_server>
usermod -G <remote_git_group> <your_remote_user>
之后检查上面帖子中描述的权限......
答案 16 :(得分:1)
由于错误涉及对象文件夹的权限,我直接在对象文件夹上做了一个chown,它对我有用。
答案 17 :(得分:1)
您是否尝试过 sudo git push -u origin --all ?有时它是您唯一需要避免此问题的方法。它会询问您输入管理员系统密码 - 您可以登录到您的计算机的密码 - 以及您需要推送或提交的密码(如果是这种情况)。
答案 18 :(得分:1)
这有效:
sudo chmod -R gituser.gituser objects
答案 19 :(得分:1)
确定 - 事实证明这是GitHub上的权限问题,发生在emi / bixo到bixo / bixo的分支期间。一旦Tekkub解决了这些问题,它就会重新开始工作。