有没有办法阻止代码直接推送到master?我尝试在.git/hooks/update
中添加脚本:
#!/bin/sh
if [ $USER != "git-repo-admin" ];
then
if [ "$1" == refs/heads/master ];
then
echo "Manual pushing to this repo is restricted"
exit 1
fi
fi
但这不起作用 - 每个人仍然可以推动。我想只允许特定用户推送掌握和阻止他人。
答案 0 :(得分:11)
原始脚本非常完美,我只需要将它从远程服务器上的.git/hooks/update.sample
重命名为.git/hooks/update
,并确保它是可执行的。
#!/bin/sh
if [ $USER != "git-repo-admin" ];
then
if [ "$1" == refs/heads/master ];
then
echo "Manual pushing to this repo is restricted"
exit 1
fi
fi
答案 1 :(得分:6)
使用git hook来控制访问可能是一次性的黑客攻击,但可能是一个滑坡,导致难以维护的git服务器配置。
因此,我建议您设置 gitolite ,这正是针对此类访问控制所做的。
它管理bare repos(有利于推送)。
您可以在“Gitolite permissions on branches”中找到阻止推送分支的示例:
repo @project
RW+ = @git-repo-admin
R master = @developers
- master = @developers
RW+ = @developers
Gitolite可以依靠ssh进行身份验证部分,并自动执行公钥注册过程。
但是如果没有Gitolite,您仍然可以使用ssh保护对Git仓库的读/写访问权限,如Git on the Server - Setting Up the Server的“Pro Git Book”所述(如Anthony Geoghegan所述) the comments)
作为额外的预防措施,您可以轻松地将“git”用户限制为仅使用Git附带的名为
git-shell
的有限shell工具执行Git活动。 如果将其设置为“git
”用户的登录shell,则“git
”用户无法正常访问您的服务器。要使用此功能,请为用户的登录shell指定git-shell
而不是bash
或csh
。为此,您可能需要修改/etc/passwd
文件。
答案 2 :(得分:4)