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

时间:2013-09-26 07:29:12

标签: linux git

有没有办法阻止代码直接推送到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

但这不起作用 - 每个人仍然可以推动。我想只允许特定用户推送掌握和阻止他人。

3 个答案:

答案 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而不是bashcsh。为此,您可能需要修改/etc/passwd文件。

答案 2 :(得分:4)

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

Git询问您要保护哪个分支Git protect branch

相关问题