我已经多次使用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,但没有找到任何有关如何解决问题的提示。
答案 0 :(得分:1)
您可以在“Debugging git repo permissions on samba share”中看到各种调试方式:
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