假设我在一个中央裸Git存储库(如GitHub)上有三个分支:
-devo
-uat
-prod
prod是在公共生产中部署的,uat是生产的内部副本(运行下一个候选版本),devo有最新的代码开发人员在内部积极进行集成测试。
我想强制执行devo> uat>刺。这意味着devo基于uat和uat是基于prod。这个想法是(大部分)从devo-> uat-> prod提升的线性历史提交,减少了分支之间的分歧量(从而减少了生成依赖于代码的错误的数量)没有做到这一点。)
我可以通过手动创建rebase,通过创建跟踪远程版本的每个分支的本地副本,并非常小心我如何挑选(或合并)提交以将它们提升到下一个阶段并单独重新分配每个分支推动。
这很有效,但它很繁琐且容易出错。我将它用于我的分支机构,但是引入一个团队来使用相同的系统并且信任没有人犯错误(尤其是那些不熟悉git的人)基本上是不可能的。
有没有办法告诉Git我想要这种跟踪,所以它可以帮助强制执行它与多个开发人员都承诺这些分支?我可以告诉服务器上的裸存储库它的分支是否相互跟踪(就像我可以在我的个人git仓库中使用本地分支一样)?
我对钩子脚本知之甚少,但是我可以想象一个可能处理快乐案例的人(从devo中挑选一个提交 - > uat并在新的uat之上重新设置devo),尽管那会发生什么如果有冲突?
我搜索过类似的设置,但似乎无法找到合适的关键字,因为“远程跟踪分支”实际上意味着跟踪远程跟踪的本地分支。
想法?思考?
谢谢!
答案 0 :(得分:1)
我认为大多数时候这个流程是通过使用Jenkins / Hudson或其他CI服务器完成的...你可以告诉开发人员只需要推送到dev
,Jenkins接受该代码并在成功的测试运行时推送代码进入uat
并且如果满足另一个工作(黄瓜或时间或其他标准),则将其推向prod
。
唯一的问题是,我不知道任何方法可以锁定这两个分支,只有Jenkins能够进入它。一些Git服务器(如GitLab)提供了锁定分支的功能,仅供特权帐户推送。