FreeBSD 上 Git (通过 S​​SH) 的权限问题

FreeBSD 上 Git (通过 S​​SH) 的权限问题

我们在 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

相关内容