git - Git 分支管理和测试
问题描述
在 git 分支管理系统中有一些我不太了解的东西,这似乎是这里描述的规范或最简单的版本。
我们如何确定正在测试的代码(由测试环境中的人)实际上与我们交付的代码相同?
我的理解如下:
我有一个永恒的主分支,它反映了生产中的代码。
在任何给定时间,我都可以创建一个 Hotfix 分支 ( Hotfix_A
) 来修复错误。在这个分支上,我将执行一个或多个提交来解决问题,然后我将编译这个分支以创建一个交付物(deliverable_A
),供客户测试。我现在无法合并这些修改master
,因为代码不在生产中。然后有一种情况,在这段时间内,当客户实现测试以证明我可以在生产中交付此更改时,另一个修补程序 ( Hotfix_B
) 正在生产中交付(遵循相同的过程但更快)。
我处于我的可交付成果_A 已经过测试和认证的情况,但master
此后分支已经发展。我无法交付 Deliverable_A,因为它不包含 Hotfix_B 拥有且已经投入生产的代码修改。
我可以合并修改并创建一个包含这两个修改的可交付成果 C。问题是没有人会在投入生产之前测试这个版本。即使我找到了可以测试这个 delivrable_C 的人,也可以在此期间完成另一个修补程序,我只是推迟了这个问题。
有人可以向我解释我对系统的理解有什么问题吗?
解决方案
我不认为你有一个必然的错误理解,因为你提出了一个有效的问题 - 如何处理多个修补程序分支?
在您给出的场景中, wherehotfix-A
被延迟并hotfix-B
在 A 之前应用,那么您已经做出了一些假设。您必须回答这些问题 - 是否hotfix-B
取决于hotfix-A
不同客户端测试的不同修补程序分支?
看起来,如果hotfix-B
通过的速度比 快hotfix-A
,那么这些修复(必须或总是,在这里要小心)无关。如果它们是相关的,那么也许你必须强加一个规则,你必须先严格合并before 。如果这两个修复不相关,那么您不必提供 A和B 一起测试的测试用例(原因是因为它们不相关并且修复不同的问题,并且预计不会有任何冲突彼此之间)。这就是为什么我们称其为热修复,因为我们正在急于求成(至此,请参阅策略 #1,因为它解决了这个问题)。hotfix-A
hotfix-B
此外,请记住,不同的公司采用不同的策略来管理多个修补程序。策略如:
例如,在每个修补程序之后,应用程序的服务版本都会发生碰撞,并且所有修补程序分支都
rebased
在最新的服务版本上。通过重新定位您的修补程序分支,您会自动将以前的修补程序合并到当前的修补程序中。对每个修补程序执行此操作。(注意:在这种情况下,您的测试人员可能需要重新测试软件......不是最好的情况,但您能做什么)。每个 hotfix 分支都单独合并到 master 中,因为每个 hotfix 分支都在一个单独的问题上工作,与其他分支无关。彼此相关的修补程序在同一个修补程序分支上工作,即
hotfx-A
是主修补程序,我们可以从中分出hotfix-A1
,hotfix-A2
和hotfix-A3
. 我们将这些合并到hotfix-A
,然后我们准备好合并到 master。每个修补程序都基于一个主修补程序分支,然后所有内容都被转储到 master 中。
所有这些方法都有优点和缺点。选择一个,看看它是否适合你。根据您的喜好和工作流程进行调整。
推荐阅读
- python - 如何将重复项合并为新列
- ios - 旋转手势改变视图框架
- javascript - 将项目推入数组时如何解决此问题?
- android - Draw line with shadow
- jquery - html form.serialize 返回空字符串
- angular - Angular5 canActivate() 异步函数单元测试
- r - 在生产环境中部署 Shiny App?
- c - unsigned int 函数的返回类型
- java - 错误“目录名称无效。” 使用 apache daemon windows service 执行 jar 时
- javascript - 如何让 D3 教程条形图工作?