19

我正在使用 git,并且正在设置以下分支来支持我的工作流程:

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

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

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

4

4 回答 4

11

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

正如 Jason 所说,您可以使用一些钩子来防止某些行为。在这种情况下,我们可以使用 pre commit hook 来阻止任何人运行“git commit”。但这在几个方面存在问题:

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

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

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

这里重要的是要认识到,您可以通过设计相互交流更改的方式来实施策略。不是每个人都需要能够将他们的更改推送到一个存储库。哎呀,他们甚至根本不需要推动他们的改变。测试人员/人员可以从开发人员那里拉取更改,只要他们想要测试一些东西,这样您就可以让测试决定他们何时准备好拉入新的更改,而不是让开发人员决定测试人员何时应该得到他们的东西。同样的原理。

于 2011-05-31T15:44:11.787 回答
4

您可能想查看Git flow以了解有关此类工作流的更多想法。

于 2011-05-31T14:28:03.680 回答
2

您应该能够通过使用一些 git 挂钩来强制执行此操作。

于 2010-11-03T03:05:54.843 回答
0

最近,为授权执行而设计的框架gitolite可以帮助实施各种策略,例如只允许测试人员合并到“ Testing”分支中。

此外,gitolite 建议使用VREF(在“ Gitolite 更新挂钩排除存储库”中解释)定义许多“更新挂钩”的可能性,这些“更新挂钩”将控制提交到由 gitolite 管理的存储库。

但是所有这些控件都是针对“中央”存储库的,而不是针对克隆在各个开发人员工作站上的所有下游存储库。

于 2012-10-04T13:11:35.157 回答