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


一年多来,我一直遇到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

(请注意,这来自此主题中顶部响应中的推荐设置: 制作git push尊重权限?

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

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

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

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


9277
2018-04-24 04:23


起源

怎么......你在推?您正在使用哪些用户权限? - Makoto
推送使用:git push我们正在推动ssh。每个用户都使用他们的UNIX用户帐户进入服务器。例如,我是服务器上的用户shiro。我用于SSH的登录凭据是用户shiro。用户shiro是群组shirogroup的一部分。该文件的所有权是root:shirogroup。这回答了你的问题了吗? - Shiro
我的服务器上有suphp - 这可能是改变我的文件权限,而不是GIT吗? - Shiro


答案:


看起来你改变了 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

16
2018-04-24 08:06



你先生是个王子。你是正确的,我在初始化存储库后更改了core.shareRepository,你的修复确实有效。在过去的一年中,我一直在不同的时间与此作斗争,所以我非常感谢最终让它发挥作用! - Shiro
这一切都是正确和有用的,但是稍微补充一点:文件的组所有权将基于每个目录基于目录组所有者(当设置g + s时)重置。这意味着您可以为不同的目录拥有多个组所有者,只要这是基于每个目录,每个存储库设置(并且所有g +都已设置)。 - dmansfield