我们在 FreeBSD 上使用 Git 时遇到了权限问题。设置相当简单。我们在同一台服务器上有几个不同的存储库。为简单起见,我们假设它们位于 /git/repo1 和 /git/repo2 中。
每个 repo 都归用户“git”和一个同名组(例如 repo1)所有。repo 配置有 g+rwX 访问权限。
提交到存储库的每个用户也是存储库组的成员(例如 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
有人知道问题出在哪里吗?
答案1
我首先想到的可能是 umask 问题?
您是否考虑过使用 gitosis 包装 git(http://vafer.org/blog/20080115011413)?我发现这是使用 Git 的一种更加愉快的方式(由于 repo 由一个 OS 用户拥有,因此没有权限方面的麻烦),并且使用 gitosis 可以实现的权限是一个很有吸引力的奖励。
答案2
当您创建新的存储库时,设置文件夹的组所有权,并赋予其粘性位:
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