有没有办法阻止代码直接推送到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
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 每个人仍然可以推动.我想只允许特定用户推送到主人并阻止他人.
Mit*_*tul 12
原来的剧本是完美的,我只是需要把它从命名.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
Run Code Online (Sandbox Code Playgroud)
使用git钩子来控制访问可能是有用的一次性黑客,但可能是一个滑坡导致难以维护的git服务器配置.
因此,我建议设置gitolite,这是为这种访问控制精确完成的.
它管理裸仓(有利于推送).
您可以在"分支上的Gitolite权限 "中找到阻止分支推送的示例:
repo @project
RW+ = @git-repo-admin
R master = @developers
- master = @developers
RW+ = @developers
Run Code Online (Sandbox Code Playgroud)
Gitolite可以依赖ssh进行身份验证部分,并自动执行公钥注册过程.
但是,如果没有Gitolite,您仍然可以使用ssh保护对Git仓库的读/写访问权限,如Pro Git Book中的" Git on the Server - 设置服务器 "中所述(正如Anthony Geoghegan在评论中所述)
作为额外的预防措施,您可以轻松地将'git'用户限制为仅使用Git附带的有限shell工具执行Git活动
git-shell.
如果将其设置为git"用户的登录shell",则git"用户无法正常访问您的服务器.要使用此功能,指定git-shell代替bash或csh为用户的登录shell.为此,您可能需要编辑/etc/passwd文件.