git:无法推送(解包器错误)与权限问题相关

Max*_*ams 54 linux git

当我尝试推入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>'
Run Code Online (Sandbox Code Playgroud)

我偶尔会有这个,我们总是不得不通过每个用户sshing到repo并在其中设置所有文件的组权限来解决它

chmod -R g+w *
Run Code Online (Sandbox Code Playgroud)

这从来都不是一个令人满意的解决方案,现在它被叮叮当当,因为其中一个人离开了,没有人知道他的回购用户的密码.所以,我正在努力解决它.

当有人试图推翻将改变另一个用户拥有的repo目录的更改时(因此设置上面的组写选项),似乎会发生错误.我已经做了一些谷歌搜索,并发现了几个正在讨论的解决方案(这两个解决方案都没有对我有用)

1)确保repo dirs与之共享的组是每个用户的主要组(我相信已经是这样的情况:每个用户只有一个组,因此必须是他们的主要组,对吗?)

2)git repo core.sharedRepository设置,详见此处:Git:无法从一台计算机上推送 我改变了这个但它没有任何区别.我是否需要重新加载配置或其他内容以实际实现更改?

这是我的repo配置看起来像atm:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
        sharedRepository = all
[receive]
        denyNonFastForwards = True
Run Code Online (Sandbox Code Playgroud)

感谢任何建议或意见!最大

spa*_*ers 27

一种更简单的方法是添加一个post-receive脚本,该脚本在每次推送到服务器上的"hub"repo后运行chmod命令.将以下行添加到服务器上git文件夹中的hooks/post-receive:

chmod -Rf u+w /path/to/git/repo/objects
Run Code Online (Sandbox Code Playgroud)

  • 如果远程存储库中的某些文件夹/文件由另一个远程用户修改/创建,则与推送器不同,也可能是所有者问题 (3认同)
  • 这个post-recieve脚本对我有用:chown -R git:git /home/git/repositories/myrepo.git/objects/ (2认同)

Jas*_*son 23

我有两个星期的错误,大多数解决方案都说"chmod -R"作为答案,不幸的是我的git repos(本地/远程/共享 - 与团队)都在Windows操作系统上,即使chmod -Rv显示所有文件都改为'rwxrwxrwx',随后的'ls -l'仍显示所有文件为'rwxr-xr-x'并且错误重复.我最终看到了Ariejan de Vroom的解决方案.它起作用,我们都能够再次拉动和推动.

在本地(无法推送的本地)和远程repos上,运行以下命令:

$ git fsck
$ git prune
$ git repack
$ git fsck
Run Code Online (Sandbox Code Playgroud)

在旁注中,我尝试使用Windows的本机文件权限/ ACL,甚至将问题用户提升为管理员,但这些似乎都没有帮助.不确定环境是否重要,但它可以帮助具有类似设置的人 - 问题团队成员和远程(Windows Server 2008 R2标准),我的本地(Windows 7 VM).

  • 当git文件系统损坏并且这些说明有助于更正此错误时,有时会出现此错误。谢谢 (2认同)

Ala*_*air 9

这是一个权限错误.对我来说最合适和最安全的方式是将用户添加到 repo 的补充组中.由(或反之亦然)拥有:

groupadd git
chgrp -R git .git
chgrp -R git ./
usermod -G -a git $(whoami)
Run Code Online (Sandbox Code Playgroud)

  • 不应该是`usermod -G -a ...`以避免从除`git`之外的所有组中删除用户? (3认同)

sja*_*jas 6

如果其他人坚持这一点:它只是意味着您要推送的回购中的写权限是错误的.转到chmod -R它,以便您访问git服务器的用户具有写访问权限.

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

它只是有效.

  • 正如@ThorSummoner 提到的,最好将博客中的内容放到这篇文章中。该链接现已过时。 (3认同)
  • 请在stackoverflow上发布外部答案的内容:对于外部URL关闭的情况. (2认同)

ara*_*dil 5

对我来说,这个错误发生在我的遥控器空间不足时。

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

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