我可以在git中强制执行仅合并分支吗?

我可以在git中强制执行仅合并分支吗?,git,merge,workflow,branch,git-branch,Git,Merge,Workflow,Branch,Git Branch,我正在使用git,我正在设置以下分支以支持我的工作流: release,仅包含已发布的软件 测试,其中包含发布给测试组的软件 发展,就是发展, 一些主题分支,其中添加了功能等 主题分支从分支并合并到开发中。当我们准备好测试版本时,测试将在开发中合并。当一个测试版本被批准用于生产时,该版本将合并到测试中 这一切都很容易设置,但我想知道git中的强制选项。例如,是否可以强制执行一个策略,其中发布分支上的唯一提交是来自测试的合并,从而防止直接在发布分支上发生更改?您应该能够通过使用一些git挂钩来

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

  • release,仅包含已发布的软件
  • 测试,其中包含发布给测试组的软件
  • 发展,就是发展,
  • 一些主题分支,其中添加了功能等
主题分支从分支并合并到开发中。当我们准备好测试版本时,测试将在开发中合并。当一个测试版本被批准用于生产时,该版本将合并到测试中


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

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

您可能想了解更多关于此类操作的想法

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

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

  • 出于各种安全原因,git钩子不随存储库一起分发,因此您不能强制人们在其存储库中使用您的钩子。记住,他们的存储库是他们自己的,而不是由您决定他们在存储库中做什么
  • 当您执行拉取或合并并获取冲突时会发生什么?为了解决这些冲突,您必须能够使用我们刚才禁用的“git commit”
  • 这只会造成比解决问题更多的问题

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


    这里重要的是要认识到,可以通过设计如何相互交流更改来实施策略。并非每个人都需要能够将其更改推送到一个存储库中。见鬼,他们根本不需要推动他们的改变。测试人员/人员可以从开发人员那里获取更改,只要他们想要测试的东西,这样你就可以让测试人员决定他们何时准备好引入新的更改,而不是让开发人员决定测试人员何时应该得到他们的东西。同样的原则。

    最近,一个用于授权实施的框架,可以帮助制定各种策略,例如,只允许测试人员合并到“
    测试
    ”分支中

    此外,gitolite建议(在“”中解释)可以定义许多“更新挂钩”,用于控制推送到gitolite管理的repo的提交

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

    可能重复的