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

Shi*_*iro 13 git file-permissions

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

1)我在中央存储库中的配置文件:[core] 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之一,我不知道如何修复它.当用户推送到存储库时,如何阻止更改组?

CB *_*ley 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
Run Code Online (Sandbox Code Playgroud)