我们在 FreeBSD 上遇到了 Git 的权限问题。设置相当简单。我们在同一台服务器上有几个不同的存储库。为简单起见,假设它们位于 /git/repo1 和 /git/repo2 中。
每个 repo 都由用户 'git' 和一个自命名的组(例如 repo1)拥有。该 repo 配置了 g+rwX 访问权限。
每个提交到存储库的用户也是 repo 组的成员(例如 repo1)。
Git 存储库都设置了“sharedRepository = group”。
到目前为止一切顺利,所有用户都可以从存储库中签出代码,并且第一个用户可以毫无问题地提交。但是,当下一个用户尝试提交存储库时,他将收到权限错误。
一段时间以来,我们一直在努力解决这个问题,我们设法解决它的唯一方法是在提交之间运行以下脚本(这显然非常不方便):
查找 /git/repo1 -type d -exec chmod g+s {} \;
chmod -R g+rwX /git/repo1
chown -R git:repo1 /git/repo1/
cd /git/repo1
git gc
有人知道问题出在哪里吗?
在我的脑海中,可能是 umask 问题?
您是否考虑过用 gitosis ( http://vafer.org/blog/20080115011413 ) 包装 git?我发现它是一种使用 Git 的更愉快的方式(没有权限问题,因为 repo 由一个操作系统用户拥有),并且您可以使用 gitosis 实现的权限是一个有吸引力的奖励。
创建新存储库时,设置文件夹的组所有权,并给它一个粘性位:
chown git:repo1 /git/repo1
chmod g+ws /git/repo1
还要确保您的每个用户都有正确的 umask。您可以在 /etc/login.conf 中设置默认的 umask。在 :default 下查找如下所示的行:
:umask=002:
将其更改为:
:umask=022:
并运行:
sudo cap_mkdb /etc/login.conf