如何阻止推送到远程主分支

有什么办法阻止代码直接推送给主? 我试图在.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 

但是这不起作用 – 大家仍然可以推。 我想只允许特定的用户推动掌握和阻止他人。

Solutions Collecting From Web of "如何阻止推送到远程主分支"

原来的脚本是完美的,我只需要将它从.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 

使用git挂钩来控制访问可能会作为一次性黑客有用,但可能是一个难以维护的git服务器配置的滑坡。

因此,我建议设置gitolite ,这正是这种访问控制。
它管理裸回购 (这有利于推动)。

你可以在“ 分支机构的Gitolite权限 ”中找到一个防止在分支中推送的例子:

 repo @project RW+ = @git-repo-admin R master = @developers - master = @developers RW+ = @developers 

Gitolite可以依靠ssh作为身份验证部分,并自动执行公钥注册过程。

但是如果没有Gitolite,你仍然可以使用ssh保护对Git仓库的读/写访问,如Pro Git Book的 “ Git on the server – 设置服务器 ”所述( Anthony Geoghegan在评论中提到)

作为一个额外的预防措施,您可以轻松地将'git'用户限制为仅使用Git附带的名为git-shell的有限shell工具来执行Git活动。
如果你把它设置成你的' git '用户的登录shell,那么' git '用户不能对你的服务器有正常的shell访问权限。 要使用这个,请为您的用户的登录shell指定git-shell而不是bashcsh 。 要做到这一点,你可能需要编辑你的/etc/passwd文件。

你可以去回购设置 – >分支

Git询问你想保护哪个分支 Git保护分支