一年多来,我一直遇到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之一,我不知道如何修复它。当用户推送到存储库时,如何阻止更改组?
答案 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