当我尝试推入git时,我遇到了这个问题:
error: insufficient permission for adding an object to repository database ./objects
fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To ssh://<repo url>/<repo dir>
! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'ssh://<repo url>/<repo dir>'
我偶尔会有这个,我们总是不得不通过每个用户sshing到repo并使用
设置所有文件的组权限来解决它chmod -R g+w *
这从来都不是一个令人满意的解决方案,现在因为其中一个人离开而且没有人知道他的回购用户的密码,我们在屁股上咬了我们。所以,我正在努力解决它。
当有人试图推翻将改变另一个用户拥有的repo目录的更改时(因此设置上面的组写选项),似乎会发生错误。我已经做了一些谷歌搜索,并找到了几个正在讨论的解决方案(这两个解决方案都没有对我有用)
1)确保与repo dirs共享的组是每个用户的主要组(我相信已经是这样的情况:每个用户只有一个组,因此必须是他们的主要组,对吗?)< / p>
2)git repo core.sharedRepository设置,详见此处:Git: Can't push from one computer 我改变了这个但是没有任何区别。我是否需要重新加载配置或实际影响更改的内容?
这是我的repo配置看起来像atm:
[core]
repositoryformatversion = 0
filemode = true
bare = true
sharedRepository = all
[receive]
denyNonFastForwards = True
感谢任何建议或意见! 最大
答案 0 :(得分:26)
更简单的方法是添加一个运行chmod命令的post-receive脚本 每次推送到服务器上的“hub”仓库之后。将以下行添加到服务器上git文件夹中的hooks / post-receive:
chmod -Rf u+w /path/to/git/repo/objects
答案 1 :(得分:19)
我有两个星期的错误,大多数解决方案都说“chmod -R”作为答案,不幸的是,我的git repos(本地/远程/共享 - 与团队)都在Windows操作系统上,即使chmod -Rv显示所有文件都改为'rwxrwxrwx',后续的'ls -l'仍然显示所有文件为'rwxr-xr-x'并且错误重复。我最终看到了Ariejan de Vroom的this solution。它起作用,我们都能够再次拉动。
在本地(推送有问题的本地)和远程repos上,运行以下命令:
$ git fsck
$ git prune
$ git repack
$ git fsck
在旁注中,我尝试使用Windows的本机文件权限/ ACL,甚至将问题用户提升为管理员,但这些似乎都没有帮助。不确定环境是否重要,但它可以帮助具有类似设置的人 - 问题团队成员和远程(Windows Server 2008 R2标准版),我的本地(Windows 7 VM)。
答案 2 :(得分:8)
这是一个权限错误。对我来说最合适和最安全的方式是回购。{3}}。由(或反之亦然)拥有:
groupadd git
chgrp -R git .git
chgrp -R git ./
usermod -G -a git $(whoami)
答案 3 :(得分:6)
如果其他人坚持这个:它只是意味着写 您要推送的仓库中的权限是错误的。去和chmod -R它使您访问git服务器的用户具有写访问权。
http://blog.shamess.info/2011/05/06/remote-rejected-na-unpacker-error/
它只是有效。
答案 4 :(得分:3)
我使用gitosis来管理这种东西。 Gitosis拥有一个拥有所有存储库的用户(通常称为“git”),它对每个存储库使用基于公钥的访问控制。它可能不适合您的设置,但可能值得一试(没有双关语)。
答案 5 :(得分:3)
对我来说,当我的遥控器上的空间不足时发生了这个错误。
我只需要阅读其余的错误消息:
error: file write error (No space left on device)
fatal: unable to write sha1 file
error: unpack failed: unpack-objects abnormal exit
答案 6 :(得分:2)
对于在AWS实例上使用git存储库的权限错误,我成功创建了一个组,并将其递归地分配到存储库文件夹(-R),并为该组提供了书面权利,从而成功解决了该问题将默认的aws实例用户(ec2-user或ubuntu)分配给该组。
sudo groupadd share_group
sudo chgrp -R share_group /path/to/your/repository
sudo chmod -R g+w /path/to/your/repository
sudo usermod -a -G share_group ubuntu
顺便说一句,要查看文件夹或文件的所有权,只需键入:
ls -l /path/to/your/repository
'
drwxr-x--x 2 root shared_group
(说明,请参见:https://wiki.archlinux.org/index.php/File_permissions_and_attributes)。
步骤3之后,您将看到
drwx--x--x 2 root root
drwxr-x--x 2 root share_group
chmod -Rf u+w /path/to/git/repo/objects
它对我不起作用,我认为这应该是我的存储库文件夹属于根用户而不是Ubuntu用户的原因,默认情况下,'git'使用默认用户(ec2-user或Ubuntu用户。您可以尝试更改用户并对其进行测试。
sudo chmod -R 777 /path/to/your/repo
答案 7 :(得分:1)
我也遇到了这个问题,认为我的远程gitolite-admin已损坏或出现问题。
我的设置是Mac OS X(10.6.6)笔记本电脑,带有带gitolite的远程Ubuntu 10服务器。
事实证明问题出在我的本地结帐gitolite-admin。
尽管“unpack failed”错误,但事实证明问题是本地的。
我通过再次检查它作为gitolite-admin2,做出改变和推动来解决这个问题。
瞧!它奏效了!
答案 8 :(得分:1)
在需要重新启动的Ubuntu升级后,也会出现此问题。
如果文件/var/run/reboot-required
存在,请执行或安排重新启动。
答案 9 :(得分:1)
对于它的价值,我在自己的VPS上遇到了同样的问题,这是由于我在VPS上的低硬盘空间造成的。由df -h
命令确认并在我清理了VPS的硬盘之后;问题消失了。
干杯。
答案 10 :(得分:0)
我遇到了类似的错误,请看下面我是如何解决的。
我的目录结构: /opt/git/project.git 和git用户是git
$ cd /opt/git/project.git
$ sudo chown -R git:git .
chown with -R选项以递归方式更改当前目录的所有权和组(因为我在上面的命令中输入了git:git)。 chown -R是必要的,因为当你推送到存储库时,git会改变git目录中的许多文件。
答案 11 :(得分:0)
在我工作的地方,我们已经在我们所有的存储库上使用这种方法几年没有任何问题(除非我们创建一个新的存储库而忘记以这种方式设置它):
将存储库的组ID更改为允许推送给它的所有用户共享的组:
chgrp -R shared_group /git/our_repos
chmod -R g+w /git/our_repos
在存储库中的所有目录上设置setgid位,以便新文件/目录保持相同的组:
find /git/our_repos -type d -exec chmod g+s {} +
将此行添加到存储库中的预接收挂钩,以确保新的文件权限允许组读/写:
umask 007
答案 12 :(得分:0)
对我来说是权限问题:
在git服务器上,在repo目录
上运行此命令sudo chmod -R 777 theDirectory/