执行和制定 Git 政策
Enforcing and creating Git policies
我的任务是稍微更改 Git,但未能在互联网上找到任何相关内容 - 我迫切需要指导。
我们有:
一堆分支,主要是test
(基本上是develop
)和master
分支。 master
大部分时间未受影响。
现在,我已经使用TeamCity、Jira和Crucible创建了一个持续集成环境以及一个自己编写的服务。
我们想要实现的目标:
- 不允许推送到
test
- 除非是 TeamCity
- 如果 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 这样的预打包解决方案几乎总是比尝试自己动手更有意义。
我的任务是稍微更改 Git,但未能在互联网上找到任何相关内容 - 我迫切需要指导。
我们有:
一堆分支,主要是test
(基本上是develop
)和master
分支。 master
大部分时间未受影响。
现在,我已经使用TeamCity、Jira和Crucible创建了一个持续集成环境以及一个自己编写的服务。
我们想要实现的目标:
- 不允许推送到
test
- 除非是 TeamCity - 如果 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 这样的预打包解决方案几乎总是比尝试自己动手更有意义。