【发布时间】:2020-02-18 12:20:01
【问题描述】:
我正在尝试设置一个 git 服务器,并且我想只允许特定用户将提交推送到 master 分支。
我尝试使用Linux组权限设置来满足上述要求,但似乎不是正确的方法。
而且我什至不知道搜索这个答案的关键词是什么。
任何帮助将不胜感激。
【问题讨论】:
我正在尝试设置一个 git 服务器,并且我想只允许特定用户将提交推送到 master 分支。
我尝试使用Linux组权限设置来满足上述要求,但似乎不是正确的方法。
而且我什至不知道搜索这个答案的关键词是什么。
任何帮助将不胜感激。
【问题讨论】:
Git 不允许您拥有私有分支,但您可以通过实现自己的服务器端 pre-receive hook 来实现此功能。 Github 企业特定的 pre-receive hook 示例为here,作为参考。
但是,如果您使用 Git 托管服务(如 Github),他们可能会为此提供选项。尤其是 Github,有一个名为 branch restrictions 的选项,但它要求您付费订阅,除非您的项目是公开的。
【讨论】:
你有两个选择:
到目前为止,最简单的解决方案是使用已经提供此功能的托管软件。您可能想查看 GitLab,它提供 SaaS(托管在 gitlab.com)和自我管理实例(运行您自己的 gitlab 实例)的免费选项。或者github。或比特桶。或者我确定还有其他我没有想到的。
如果你真的不想使用其中的任何一个,你可以在一个简单的 git 服务器上实现访问控制,但这并不是那么简单。简短(或者更确切地说,glib)的答案是“钩子”——但钩子只是一个在发生某些事情时运行的脚本——就像在这种情况下你会使用 prereceive 钩子,它在有人试图推送并决定是否推送时运行接受推送。现在,你的钩子怎么知道谁在推? (提交元数据不指示谁在推送。您需要的是围绕实际连接进行身份验证,以及脚本中身份验证的可见性,以便脚本可以实施您的授权规则。这很快分解为“这取决于您的环境"。)
由于不可能详尽地涵盖手动执行此操作的所有场景,希望您能找到自己喜欢的预打包解决方案,或者您会发现以上内容足以让您找到正确的方向手动完成。
【讨论】: