当用户推送到GIT存储库时,文件所有权/组被更改

时间:2013-04-24 04:23:49

标签: git file-permissions

一年多来,我一直遇到GIT和目录/文件权限问题。我有一个中央存储库,多个开发人员使用ssh(源设置为ssh:// example / git / repository)向其推送代码。我按如下方式设置了存储库:

1)我在中央存储库中的配置文件:     [核心]       repositoryformatversion = 0       filemode = true       bare = true       sharedrepository = 0660

2)所有存储库目录权限都设置为770(rwxrwx ---) 3)./objects/XX和./objects/info中的所有文件都设置为440(r - r -----) 4)所有其他文件设置为660(rw-rw ----) 5)所有权设置为root:group_name

(请注意,这来自此主题中顶部回复中的推荐设置:Making git push respect permissions?

所有访问用户都是“group_name”组的成员。

问题是如果user1推送到存储库,则某些文件的文件所有权设置为user1:user1 - 表示该组已更改。一旦发生这种情况,其他任何用户都无法从存储库中推送(或拉出),因为他们无权从存储库中的所需文件进行读取,写入或执行。

我已经阅读了有关Stack Overflow上的问题的所有线程以及网络上的其他任何地方,但我仍然遇到同样的问题。

问题是,我不确定这个问题是GIT还是UNIX之一,我不知道如何修复它。当用户推送到存储库时,如何阻止更改组?

1 个答案:

答案 0 :(得分:16)

看起来您在初始化存储库后更改了core.sharedRepository,而不是使用init --shared=group来正确设置权限。这意味着不会在git存储库的目录中正确设置sgid位。你必须手动修复这个(假设GNU find和xargs):

find . -print0 | xargs -0 chgrp group_name

find . -type d -print0 | xargs -0 chmod g+s