2010-11-03 102 views
14

我使用Git,和我设置了以下的分支机构来支持我的工作流程:我可以在git中强制执行合并分支吗?

  • 释放,这仅包含已发布的软件,
  • 测试,其中包含发布给测试组软件,
  • 开发,这是开发发生的地方,
  • some_topic_branch,其中功能等被添加。

主题分支从分支并合并到开发。当我们准备好测试版本时,测试会合并到开发中。当测试版本被批准用于生产时,版本合并进行测试。

这很容易设置,但我想知道git中的强制选项。例如,是否可以强制实施一个策略,即发布分支上的唯一提交是否与测试合并,从而防止发布分支上直接发生更改?

+0

可能重复[阻止直接提交git仓库中的master分支并接受合并?](http://stackoverflow.com/questions/7052686/prevent-direct-commits-on-master-branch-in-git -repository-和接受,合并只) – thelem 2015-11-19 09:55:13

回答

10

那么,有点。但我不认为你想去那里。

正如贾森所说,有一些钩子可以用来防止某些行为。在这种情况下,我们可以使用pre commit hook来防止任何人运行“git commit”。但是,这是有问题的几种方法:

  1. 出于各种安全原因,混帐挂钩不与仓库分布,所以你不能强迫人们使用你的钩子在他们的仓库。请记住,他们的存储库是他们自己的,而不是由你来决定他们在存储库中做什么。
  2. 当您进行拉取或合并并发生冲突时会发生什么?为了解决这些冲突,你必须能够使用我们刚才禁用的“git commit”。

这只会产生比解决问题更多的问题。

但是,您可以通过其他方式解决此问题。您可以创建一个执行这些原则的工作流程。例如,假设您有人A负责将测试分支合并到发布分支中。如果只让这个人能够将更改推送到中央存储库(或者个人存储库是“中央”存储库),则他/她可以从测试存储库的测试分支或测试分支测试人员B(使用你的想象力)。

这里重要的是要认识到,您可以通过设计如何沟通变化来执行策略。并非每个人都需要能够将其更改推送到一个存储库。哎呀,他们甚至根本不需要推动他们的改变。测试人员/人员只要想要测试一些东西,就可以从开发人员那里获得变化,这样您就可以让测试决定何时准备好接受新的更改,而不是让开发人员决定测试人员何时应该获得测试东东。原理相同。

1

你应该可以通过使用一些git钩子来强制执行此操作。

0

最近,一个框架,授权执法提出,gitolite,可以帮助把在地方各种政策,例如只允许测试者在“Testing”分支合并。

此外,gitolite建议用VREFs(在“Gitolite Update Hook exclude a repository”中解释)定义许多“更新挂钩”的可能性,它将控制提交到由gitolite管理的repo的提交。

但是,所有这些控件都是针对“中央”回购,而不是针对全部下游回购商在各个开发人员的工作站上进行克隆。