我有一个GIT仓库,可以为我的办公室管理。由于公司政策,我们不能使用外部托管服务提供商,如GitHub等。所以,我仍然要尽我所能与我们的本地网络。共享GIT远程仓库的文件权限问题
每个人都管理自己的本地存储库,但我们也有一个远程存储库,我们的用户将其推送到(并且可以被Hudson和Fisheye等应用程序访问),类似于一个中央repo在颠覆中的工作方式。每个用户都有公钥设置,因此他们可以对托管我们远程存储库的盒子执行无密码验证。
对于我们的远程仓库,我让他们配置为:在“组”模式共享:
git config core.sharedRepository group
我们所有的用户群也混帐组的成员,但不是主组的许多的用户。看起来,当git在“push”上创建或更新任何对象时,它使用用户的主要组。相反,我需要它使用每个用户都是成员的通用“混帐”组。我曾经在网上看过有关设置粘性位的文档,但它似乎根据源代码有所不同,并没有真正解决创建公共组的问题(如果我只是使文件可任意写入,我不妨让他们777)。
更新:
使用马修•富兰琛的answer below
chgrp -R git repo.git
find repo.git -type d -exec chmod g+rws {} +
我能够创建一个仓库,每个人都可以推,从拉在一起。我也会研究gitolite,但我的需求是非常基础的,我们的环境允许用户和密钥自动配置,所以它的使用不是关键。但是,我想确保我正确处理这个问题。
我的存储库结构包括一个顶级目录(remote-repos)和我的每个存储库(app-1.git,app-2.git,library-1.git等)的子目录。我应该能够将chmod g + rws {} +应用到顶层目录(remote-repos)而不是每个单独的回购库,对吗?查找命令
find /opt/remote-repos -type d -exec ...
查找/ opt/remote-repos位置下的所有目录,并对它们执行命令。命令(chmod g + rws)确保组可以读取和写入这些文件,并设置粘性赌注,以便在执行时始终使用指定的组。 (我不知道使用{} +部分,我假设它与find exec选项有关)。
无论如何,只是想确认我对这个解决方案的理解是正确的。
更多的参考资料:
- chmod从维基百科 从维基百科
- SetGID(或的SetUID)
- Git SharedRepository选项讨论
设置基于HTTP的解决方案可能更容易,并且只有服务器进程写入中央资源库文件。 – Thilo 2011-03-15 02:17:58
你应该尝试[gitolite](https://github.com/sitaramc/gitolite)! – Simon 2011-03-15 02:19:04
虽然gitolite看起来不错,但我已经有很多功能(SSH访问,密钥等)被烘焙到我的环境中。唯一真正缺少的是适当的组权限。 – 2011-03-15 15:29:27