基于主干的开发发布和修复问题

Trunk-based development release & hotfix questions

我无法理解如何处理以下情况:

  1. 功能 A 提交到 master 作为提交 A
  2. 我们已准备好发布 v1.0.0,因此我们将提交 A 标记为 v1.0.0 并从中创建一个发布分支 rel-1.0.x 用于 QA。
  3. 功能 B 提交 master 作为提交 B
  4. QA 批准 v1.0.0,我们部署并删除 rel-1.0.x 分支。
  5. 我们已准备好发布 v2.0.0,因此我们将提交 B 标记为 v2.0.0 并从中创建一个 rel-2.0.x 分支用于 QA。
  6. 在生产中发现一个错误 (v1.0.0),必须立即修复和部署。

此时我不确定我们应该如何处理。如果错误在主干中,我们可以从主干创建一个修补程序分支,修复错误并合并到主干中。然后,从 v1.0.0 创建一个 rel-1.0.1 分支,从主干中挑选修复,将其标记为 v1.0.1 并部署。

现在我觉得奇怪的是 v1.0.1 提交不是 master 中的原样,因为它是从 master 中挑选出来并在 [=25= 中标记的] 分支。此外,如果 rel-2.0.x 中也需要修复,那么我们应该如何处理呢?我们是否应该再次从主干中挑选错误修复并将其标记为不同的版本,例如 v2.0.1?

这是我在上面做的那种图表(请注意,v1.1 代表上面文本的 2.0 版,它是 Second feature A fix 在准备 v1.1发布。):

回到这个问题,我的担忧似乎没有根据,versioning/tagging 方法以及上述问题中描述的工作流程是可以接受的,并且在实践中工作得很好。

不过,我面临的一个挑战是 master 与生产环境的差异越来越大。发生这种情况的原因有很多,例如在理论上已准备好发布的 master 中的提交,但不知何故没有进入生产。我处理这个问题的方法是在生产中不断地重新处理提交树,以便将分歧留在最前面。