Git 分支机构管理和测试

Git branches management and testing

在 git 分支管理系统中,有些东西我不太明白,这似乎是规范描述 here or the simplest version here

我们如何确定正在测试的代码(由测试环境中的人员测试)实际上与我们交付的代码相同?

我的理解如下:

我有一个反映生产中代码的永恒主分支。

在任何给定时间,我都可以创建一个修补程序分支 (Hotfix_A) 来修复错误。在这个分支上,我将进行一次或多次提交来解决问题,然后我将编译该分支以创建一个可交付成果 (deliverable_A),供客户测试。我现在无法将这些修改合并到 master 中,因为代码尚未投入生产。 然后有一种情况,在这段时间内,当客户端实现测试以证明我可以在生产中交付此更改时,另一个修补程序(Hotfix_B)在生产中交付(遵循相同的过程但更快) .

我的 deliverable_A 已经过测试和认证,但 master 分支已经发展。我无法交付 deliverable_A,因为它不包含 Hotfix_B 已经在生产中的代码修改。

我可以合并修改并创建一个包含这两个修改的 deliverable_C。问题是没有人会在投入生产之前测试这个版本。即使我找到了可以对此进行测试的人 delivrable_C,在那段时间也可以完成另一个修补程序,我只是推迟了这个问题。

有人可以解释一下我对系统的理解有什么问题吗?

我不认为你有必然错误的理解,因为你提出了一个有效的问题 - 如何处理多个修补程序分支?

在您给出的场景中,hotfix-A 被延迟并且 hotfix-B 在 A 之前应用,那么您已经做出了几个假设。您必须回答问题 - hotfix-B 是否依赖于 hotfix-A 并且不同的修补程序分支是否由不同的客户端测试?

看起来,如果 hotfix-B 的通过速度比 hotfix-A 快,那么这些修复就没有(必然或总是,这里要小心)相关。 如果它们是相关的,那么也许你必须强加一条规则,你必须先严格合并hotfix-A hotfix-B 之前。如果这两个修复不相关,那么您 不必 提供一个测试用例,其中 A B 已经一起测试(原因是因为它们不相关并且解决了不同的问题并且预计彼此之间不会有任何冲突)。这就是我们将其称为修补程序的原因,因为我们正在仓促行事(至此,请参阅解决此问题的策略 #1)。

另外,请记住,不同的公司采用不同的策略来管理多个修补程序。策略如:

  1. 例如,在每次修补程序之后,应用程序的服务版本都会发生变化,并且所有修补程序分支都在最新的服务版本上 rebased。通过重新定位您的修补程序分支,您可以自动将以前的修补程序合并到当前的修补程序中。为每个修补程序执行此操作。 (注意:在这种情况下,您的测试人员可能需要重新测试软件……这不是最好的情况,但您能做什么)。

  2. 每个修补程序分支都分别合并到主分支中,因为每个修补程序分支都处理一个单独的问题,与其他问题无关。彼此相关的修补程序在同一个修补程序分支上工作,即 hotfx-A 是主要的修补程序,从它我们可以分支出 hotfix-A1hotfix-A2hotfix-A3。我们将这些合并到 hotfix-A 然后我们准备合并到 master.

  3. 每个修补程序都基于一个主要的修补程序分支,然后所有内容都转储到主分支中。

所有这些方法都各有利弊。选择一个,看看它是否适合你。根据您的喜好和工作流程进行调整。