执行和制定 Git 政策

Enforcing and creating Git policies

我的任务是稍微更改 Git,但未能在互联网上找到任何相关内容 - 我迫切需要指导。

我们有: 一堆分支,主要是test(基本上是develop)和master分支。 master 大部分时间未受影响。

现在,我已经使用TeamCity、Jira和Crucible创建了一个持续集成环境以及一个自己编写的服务。

我们想要实现的目标:

  1. 不允许推送到 test - 除非是 TeamCity
  2. 如果 id==branchName 的 Jira 问题处于错误状态,则拒绝推送功能分支

现在, ad1) 我不知道这样的事情是如何实现的。我可能只是误解了 Git 帮助者对我说的话,但正如我所读,我可以完全不允许,也可以完全允许。

ad2) 名义上很简单,据我所知,必须使用预推送挂钩脚本,但它也必须放在每个开发人员的本地 git 存储库中,或者我可以以某种方式强制执行吗?

正如@chicks 所说,您绝对可以使用 GitLab 之类的工具获得您想要的功能。用户限制(如 "only teamcity has write-access to this branch")是开箱即用的,并且通常支持服务器端挂钩,您可以使用它来实现第二个要求。

当然可能自己实施相同的限制,只需通过 ssh 提供 git 存储库,但这需要您付出一些开发努力。通用型号为:

  • 为您的 git 用户配置 .ssh/authorized_keys 以包含可用于识别与传入推送关联的用户的元数据,
  • 编写 Git 钩子脚本来执行每个分支的访问控制或策略实施。

到处都有这样做的例子;例如,this 是我写的一个较早的答案,描述了如何确保提交时的电子邮件地址与连接用户的身份相匹配。

使用像 GitLab 这样的预打包解决方案几乎总是比尝试自己动手更有意义。