Git over samba无法再获取/添加/提交

时间:2013-12-13 13:10:47

标签: git samba

我已经多次使用git trough samba而没有任何问题。

在最后几天,似乎无法git all / fetch / commit

错误是:

error: insufficient permission for adding an object to repository database .git/objects

使用strace我可以看到错误是由于打开时调用:

[pid 31303] open(".git/objects/b7/tmp_obj_6wi717", O_RDWR|O_CREAT|O_EXCL, 0444) = -1 EACCES (Permission denied)
[pid 31303] write(2, "error: insufficient permission f"..., 88error: insufficient permission for adding an object to repository database .git/objects

我无法理解改变了什么,也不知道为什么git试图用446(每个人都读)用标志RDRW(读/写?)打开一个文件。

我在archlinux上使用git 1.8.5.1和samba 4.1.3-1,samba服务器是一个windows(git 1.8.4-1即使我在使用它时仍然使用它也无法解决问题)

我已阅读其他SO问题,例如Git over samba - unable to write sha1 filename | Permission denied,但没有找到任何有关如何解决问题的提示。

2 个答案:

答案 0 :(得分:1)

您可以在“Debugging git repo permissions on samba share”中看到各种调试方式:

  • 为共享设置不同的权限
  • 手动安装
  • 将samba和git降级到早期版本
  • sudo - 这有效,但除非绝对必要,否则我不想使用它
  • 使用sudo后更改所有者和群组

Andrew Myers suggests确保您的裸仓库已将core.sharedRepository设置为分组。
如果没有,请设置并运行

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

如果无效,请确保它不是与kernel version相关的问题:

  

我已经将内核降级为3.11.6并且当用户重新开始工作时git add / commit。


更新:OP kamaradclimber报告(or tried to)是 kernel issue (bug 66251)

  

将内核从3.11.6升级到3.12.1后,Git在samba共享上无法正常工作

this patch修正。

答案 1 :(得分:1)

就我而言,看起来Git(v 2.6.3)试图在Samba驱动器上创建自己的读/写权限。这样可以防止打包文件和/或对象(解包错误)

remote: error: unable to write sha1 filename ./objects/pack/pack-<some_hex_string>.pack: Permission denied
remote: fatal: cannot store pack file
error: unpack failed: index-pack abnormal exit
To z:\git\<repo name>
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs

我在试图修复时来回走动。最后,由于我控制了Samba机器,我在samba驱动器配置中添加了一行,表示&#34;继承权限=是&#34;。我重新启动了Samba并尝试推送。它奏效了!

这对我有用,因为我是唯一一个使用Samba服务器的人。对于其他人,您可以使用&#34;强制目录模式&#34;或者&#34;强制创建模式&#34;。您可以在这里找到那些人的手册页:

https://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/AccessControls.html