15

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

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

4

3 回答 3

13

原始脚本是完美的,我只需要在远程服务器上将它重命名为.git/hooks/update.sampleto.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
于 2013-09-27T05:52:17.737 回答
6

使用 git hooks 来控制访问可能作为一次性的 hack 有用,但可能是一个滑坡,导致难以维护的 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 - 设置服务器”中所述(正如Anthony Geoghegan评论中提到的那样)

作为额外的预防措施,您可以轻松地将“git”用户限制为仅使用 Git 附带的受限 shell 工具执行 Git 活动git-shell
如果您将此设置为您的 ' git' 用户的登录 shell,则 ' git' 用户不能对您的服务器进行正常的 shell 访问。要使用它,请指定git-shell而不是bashcsh为您的用户的登录 shell。为此,您可能需要编辑/etc/passwd文件。

于 2013-09-26T08:12:46.950 回答
4

你可以去 repo 设置 -> 分支

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

于 2016-11-23T08:53:41.430 回答