使用 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
而不是bash
或csh
为您的用户的登录 shell。为此,您可能需要编辑/etc/passwd
文件。