Git 敏捷分支工作流的合并策略
Git merge strategy for Agile Branching workflow
我们正在采用新的分支策略来与敏捷合作,并使我们能够逐个特性地发布,因此我们有一个 master
分支和一个 QA
永久分支分支机构。每晚构建将基于 QA
,发布将来自 master
。开发人员将为每个故事创建一个功能分支。所有功能分支都将分支出 master
,然后合并到 QA
进行测试,然后将功能分支合并到 master
以供后续发布。这很好,直到出现以下情况:
- 开发人员 A ("Rod") 已创建
feature/RodsFeature
,进行了一些工作并合并到 QA
(但尚未 master
)
- 开发人员 B ("Jane") 已经创建了
feature/JanesFeature
,进行了一些工作,现在正试图合并到 QA
- 由于 Rod 合并
feature/RodsFeature
对 QA
引入的更改,Jane 现在发生了合并冲突
如果 Jane 绕过 QA 并将 feature/JanesFeature
合并到 master
中,则不会有冲突,因为 feature/RodsFeature
还不在 master
中。但是,出于显而易见的原因,Jane 必须合并到 QA
。为了解决冲突,她可以拉取 Rod 的更改并将其集成到她的功能分支中,解决冲突,然后执行合并 - 不良后果是一旦她将她的功能分支合并到 master
中,它也会介绍 Rod 的更改,这些更改仍在等待 QA 测试。
因此 - 一种变通方法是直接在 QA
分支上解决冲突,让 Jane 的功能分支完好无损,以便稍后合并到 master
。然而,这违反了代码审查政策,因为合并应该得到同行的批准 - 通过这样做,她已经在本地合并到 QA
并推送到远程,而没有任何拉取请求或同行审查。
在这种情况下 'best practice' 会被认为是什么?
tl;dr:添加一个 dev
分支来执行特定 'task' 分支的拉取请求,其中包含代码审查的更改。
在我参与的一些团队项目中,还有一个 dev
分支要在 Github 上执行 "pull requests" 或一些存储库管理器,高级开发人员会在其中查看已更改的内容并查看该特定更改是否写得很好等。
在像 Github 这样的在线 repo 宿主环境中,他们有明确的 ui 展示与原始分支背靠背的变化等等。在检查了一个分支之后,高级开发人员将其移动到Dev 分支最终托管在 qa 环境中,以便在 sprint 结束时进行检查。
查看 Git 流程。它最接近您要完成的目标。
开发人员会将他们的功能分支从 qa
分支中分支出来(在 Git Flow 中称为 develop
)。完成他们的功能(定期获取 QA 的最新状态)并尽可能合并回 develop
(功能已完成或处于稳定状态或已关闭)。
您 运行 作为 qa
分支可能是 Gitflow 中的 release
分支。
对 master 的任何更改都会立即合并回 develop
。
另请参阅:
我们正在采用新的分支策略来与敏捷合作,并使我们能够逐个特性地发布,因此我们有一个 master
分支和一个 QA
永久分支分支机构。每晚构建将基于 QA
,发布将来自 master
。开发人员将为每个故事创建一个功能分支。所有功能分支都将分支出 master
,然后合并到 QA
进行测试,然后将功能分支合并到 master
以供后续发布。这很好,直到出现以下情况:
- 开发人员 A ("Rod") 已创建
feature/RodsFeature
,进行了一些工作并合并到QA
(但尚未master
) - 开发人员 B ("Jane") 已经创建了
feature/JanesFeature
,进行了一些工作,现在正试图合并到QA
- 由于 Rod 合并
feature/RodsFeature
对
QA
引入的更改,Jane 现在发生了合并冲突
如果 Jane 绕过 QA 并将 feature/JanesFeature
合并到 master
中,则不会有冲突,因为 feature/RodsFeature
还不在 master
中。但是,出于显而易见的原因,Jane 必须合并到 QA
。为了解决冲突,她可以拉取 Rod 的更改并将其集成到她的功能分支中,解决冲突,然后执行合并 - 不良后果是一旦她将她的功能分支合并到 master
中,它也会介绍 Rod 的更改,这些更改仍在等待 QA 测试。
因此 - 一种变通方法是直接在 QA
分支上解决冲突,让 Jane 的功能分支完好无损,以便稍后合并到 master
。然而,这违反了代码审查政策,因为合并应该得到同行的批准 - 通过这样做,她已经在本地合并到 QA
并推送到远程,而没有任何拉取请求或同行审查。
在这种情况下 'best practice' 会被认为是什么?
tl;dr:添加一个 dev
分支来执行特定 'task' 分支的拉取请求,其中包含代码审查的更改。
在我参与的一些团队项目中,还有一个 dev
分支要在 Github 上执行 "pull requests" 或一些存储库管理器,高级开发人员会在其中查看已更改的内容并查看该特定更改是否写得很好等。
在像 Github 这样的在线 repo 宿主环境中,他们有明确的 ui 展示与原始分支背靠背的变化等等。在检查了一个分支之后,高级开发人员将其移动到Dev 分支最终托管在 qa 环境中,以便在 sprint 结束时进行检查。
查看 Git 流程。它最接近您要完成的目标。
开发人员会将他们的功能分支从 qa
分支中分支出来(在 Git Flow 中称为 develop
)。完成他们的功能(定期获取 QA 的最新状态)并尽可能合并回 develop
(功能已完成或处于稳定状态或已关闭)。
您 运行 作为 qa
分支可能是 Gitflow 中的 release
分支。
对 master 的任何更改都会立即合并回 develop
。
另请参阅: