【发布时间】:2017-05-09 16:27:42
【问题描述】:
首先,我想
- 让我的
master分支始终保持绿色。 - 能够为下一个版本挑选更改。
分支策略:
- 我有一个
master分支和一个integration分支与它一起运行。 - 按任务/问题从
master分支。 - 当一个任务分支完成其工作时,将其合并到
integration以查看它是否破坏了其他任务分支的任何工作。如果是,请修复它们。 -
从task-branch(不是
integration分支)拉取请求到master分支。这意味着
integration分支仅用于 CI 目的,它永远不会合并到master - 决定下一个版本将包含哪些更改。将这些分支合并到
master。 - 发布。
这就是问题所在,假设我有以下情况:
master -*-----------------
|\
integration -+-\-------C---F---
| \ / /
ken/task#1 | A---B /
| /
bob/task#2 D---------E
在F 中,发生了两件事:
- 发生合并冲突,因为
C和F更改了some-code.js的相同行 -
F打破了来自C的一些测试。
现在,Bob 必须解决这个问题,他有两个选择:
选项 1
- 将
integration合并为bob/task#2为G - 修复
H中的Bug - 合并到
integration为I -
integration绿色 -
拉取请求
master -*-------------------------- |\ integration -+-\-------C---F-----------I | \ / / \ / ken/task#1 | A---B / \ / | / \ / bob/task#2 D---------E-------G---H
但是,通过这种方法,我不能只选择 task#2 包含在我的下一个版本中。
因为 bob/task#2(H) 已经包含在 ken/task#1 中所做的更改,所以将 bob/task#2 合并到 master 意味着将 ken/task#1 合并到 master 中。
选项 2
- 切换回
bob/task#2 - 尝试修复
G中的bug - 合并到
integration并运行测试以查看测试是否为绿色 - 如果没有,请切换回
bob/task#2 - 尝试在
I中修复它 -
合并到
integration并运行测试...
直到
integration变为绿色。 -
拉取请求
master -*----------------- |\ integration -+-\-------C---F---H---J--- .......... | \ / / / / ken/task#1 | A---B / / / | / / / bob/task#2 D---------E---G---I--- ..............
此方法可防止将更改从 ken/test#1 捆绑到 bob/task#2。
但是,Bob 现在需要“猜测”他需要做什么来修复错误。然后一遍又一遍地合并到integration 中,看看测试是否为绿色,因为G 和I 现在没有在C 中添加测试。
每次他将自己的工作合并到integration 时,他还需要解决同样的some-code.js 合并冲突,这既痛苦又多余。
Bob 有更好的选择 3 吗?
谢谢。
【问题讨论】:
-
备选方案 3:如果你现在想修复合并冲突,即使你还没有打算将 bob 的分支和 的分支合并到 master,是选择其中一个分支,从它的顶端创建第三个分支
ken+bob/merge-conflict-fix,然后将另一个分支合并到其中。 IE。在 bob 的分支末尾创建一个新分支,并将 ken 的分支合并到其中。然后修复合并冲突。这样,您可以向下合并两个分支中的一个,而没有另一个,当您到达另一个分支时,您只需要向下合并 merge-conflict-fix 分支。 -
备选方案4,做备选方案3,只等待merge-conflict-fix分支,直到你需要它,所以决定两个分支中的任何一个先合并到master,合并它,然后再合并当另一个出现时,将您的第一个分支合并到其中并在合并到 master 之前修复合并冲突。
-
我不确定您的策略本身。发布是由 master 制作的,而 master 从来没有经过 CI 测试,这让我有点紧张。
标签: git branch branching-and-merging branching-strategy