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回购和设置组中的所有文件的权限

 chmod -R g+w * 

这不是一个令人满意的解决scheme,现在它被我们扼杀了,因为其中一个人离开了,没有人知道他的回购用户的密码。 所以,我正在努力解决它。

这个错误似乎发生在有人试图推动一个改变,这将改变另一个用户拥有的回购目录(因此设置上面的组写入选项)。 我已经做了一些Googlesearch,发现了一些正在讨论的解决scheme(两者都不适用于我)

1)确保共享库的组是每个用户的主要组(我相信已经是这种情况了:每个用户只有一个组,所以必须是他们的主组,对吧?)

2)git回购core.sharedRepository设置,详细在这里: Git:不能从一台计算机推我改变了这一点,但没有任何区别。 我是否需要重新加载configuration或其他内容才能真正实现更改?

这是我的回购configuration看起来像atm:

 [core] repositoryformatversion = 0 filemode = true bare = true sharedRepository = all [receive] denyNonFastForwards = True 

感谢您的任何意见或build议! 最大

更简单的方法是添加一个post-receive脚本,在每次推送到服务器上的“hub”回购后运行chmod命令。 添加下面一行到git文件夹中的hooks / post-receive:

 chmod -Rf u+w /path/to/git/repo/objects 

我有两个星期的错误,大部分的解决scheme都声明'chmod -R'作为答案,不幸的是我的git repos(本地/远程/与团队共享)都在Windows操作系统上,尽pipechmod -Rv显示所有文件改为'rwxrwxrwx',随后的'ls -l'仍然将所有文件显示为'rwxr-xr-x',错误重复。 我最终看到了Ariejan de Vroom的解决scheme 。 它的工作,我们都能够拉和推再次。

在本地(推送困难的本地)和远程仓库中,运行以下命令:

 $ git fsck $ git prune $ git repack $ git fsck 

在一个侧面说明,我试图使用Windows的本地文件权限/ ACL,甚至诉诸提升问题的用户到pipe理员,但似乎没有任何帮助。 不知道这个环境是否重要,但它可以帮助有类似问题的组员和远程(Windows Server 2008 R2 Standard),本地(Windows 7 VM)的人员。

这是一个权限错误。 对我来说最合适和最安全的方式是将用户添加到回购的补充小组中。 归属于(反之亦然):

 groupadd git chgrp -R git .git chgrp -R git ./ usermod -G -a git $(whoami) 

如果有其他人坚持这样做:这只是意味着你正在推动的回购的写权限是错误的。 去和chmod -R它,这样你访问Git服务器的用户有写权限。

http://blog.shamess.info/2011/05/06/remote-rejected-na-unpacker-error/

它只是工作。

我用gitosis来pipe理这种东西。 Gitosis拥有一个拥有所有存储库的用户(通常称为“git”),它使用基于公钥的访问控制到每个回购。 它可能不适合你的设置,但可能值得检查(没有双关语意图)。

我也遇到了麻烦,认为我的远程gitolitepipe理已损坏或出了什么问题。

我的设置是Mac OS X(10.6.6)笔记本电脑与远程Ubuntu 10服务器与gitolite。

事实certificate,问题出在我当地的gitolitepipe理员结帐。

尽pipe“解压缩失败”的错误,原来的问题是本地。

我想通过gitolite-admin2再次检查出来,做出改变和推动。

瞧! 有效!

Ubuntu升级需要重启后,也会出现这个问题。

如果文件/var/run/reboot-required存在,请执行或计划重新启动。

对于它的价值,我有我自己的VPS相同的问题,这是由我的VPS硬盘空间低。 由df -h命令确认后,我清理了我的VPS的硬盘; 问题没有了。

干杯。

对我来说,它是一个权限问题:

在git服务器上,在repo目录下运行这个命令

 sudo chmod -R 777 theDirectory/ 

对于我来说,当我的遥控器空间不足时,就会出现这个错误。

我只需要阅读其余的错误信息:

 error: file write error (No space left on device) fatal: unable to write sha1 file error: unpack failed: unpack-objects abnormal exit 

我得到类似的错误,请参阅下面如何解决它。

我的目录结构:/opt/git/project.git和git用户是git

 $ cd /opt/git/project.git $ sudo chown -R git:git . 

用-R选项recursion地更改当前目录的所有权和组(因为我在上面的命令中inputgit:git)。 chown -R是必要的,因为git在你推送到版本库时会改变git目录中的许多文件。

在我工作的地方,我们已经在我们所有的软件仓库中使用了这个方法几年没有任何问题(除了当我们创build一个新的仓库并忘记设置它时):

  1. 在configuration文件的'[core]'部分设置'sharedRepository = true'。
  2. 将存储库的组标识更改为允许推送给它的所有用户共享的组:

     chgrp -R shared_group /git/our_repos chmod -R g+w /git/our_repos 
  3. 在存储库中的所有目录上设置setgid位,以便新的文件/目录保持相同的组:

     find /git/our_repos -type d -exec chmod g+s {} + 
  4. 将此行添加到存储库中的预接收挂接,以确保新的文件权限允许组读/写:

     umask 007