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

Mit*_*tul 15 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
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)


Von*_*onC 6

使用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代替bashcsh为用户的登录shell.为此,您可能需要编辑/etc/passwd文件.