【发布时间】:2016-06-21 16:25:59
【问题描述】:
所以,这几天我一直在摸不着头脑,试图想出一种有效的方法来使用 TFS 分支管理发布/迭代。
情况如下:
我们有一个项目,我们为其发布了版本,并且对于每个版本,我们都有迭代。发布是我们投入生产的新版本,而迭代只是需要在 QA 中测试的开发阶段。
迭代有点像特征。假设您要开发一个网站来展示商品(迭代 1),然后出售它们(迭代 2)并在第一个版本中将其全部打包。对于 QA 修复,它在迭代分支中完成并在 QA 中合并。由于我们不在 QA 中提交,因此我们合并时无需解决冲突。
所以工作流程是这样的(由于时间紧迫,需要做很多并行工作):
- 对于版本 1
- 开始开发迭代 1
- 开始迭代 2 的开发
- 迭代 1 进入 QA
- 开始迭代 3 的开发
- 迭代 1 QA 已完成
- 迭代 2 进入 QA
- 第 2 版开始...
在简历中,大量并行开发,一次在 QA 中进行一次迭代,当所有版本的迭代都通过 QA 时,它会进入生产阶段。
所以我们需要提出一个分支解决方案,允许在开发分支之间轻松合并,然后进入 QA 分支。到目前为止,我们想出了这个分支结构
- Main
|- QA_Release_1
| |- DEV_Iteration_1
| |- DEV_Iteration_2
| |- DEV_Iteration_3
|- QA_Release_2
|- ...
有了这个,我们可以很容易地在 dev 分支之间进行合并。但是在迭代 1 QA 结束的某个时刻,我们禁用了分支(通过删除它,或者拒绝访问签出/签入)。届时,策略是将DEV_Iteration_2 重新设置为QA_Release_1。
为此,我们需要进行毫无根据的合并,这会产生很多的冲突。如果我理解正确的话,毫无根据的合并只是一个文件夹比较,没有考虑之前发生的变更集合并。
所以我想第一个问题是我们这样做会给自己带来多少合并麻烦(如果有的话)?是否可以忽略巨大的合并并在重新设置时解决大量冲突?
其次是:有没有更有效的方法来实现这个目标?
编辑:我想念 git...
我们继续寻找解决方案,一位同事给我发了这个链接:
也就是说,如果你把与 git 直接相关的东西拿出来,这正是我们需要做的。在 TFS 中它可能看起来像这样:
- Main
|- Develop
|- QA_Release_1
|- DEV_Iteration_1
|- DEV_Iteration_2
|- QA_Release_2
问题是,TFS 不喜欢跳过分支。只要您不合并父级或子级,就将其视为毫无根据的合并。因此,由于QA_Release_1 是在Develop 下创建的,它不会轻易合并到Main 中。这让我回到了我的第一个问题:毫无根据的合并是一个陷阱吗?
【问题讨论】:
-
我试图发布答案,但我意识到我需要更多信息。为什么你实际上需要 DEV_Iteration_x 分支?它们有什么用?如果你“发布”给 QA 的东西产生了缺陷或其他缺陷,会发生什么?你会在当前迭代中解决它,并通过迭代 2 的 QA“发布”将其推回 QA 吗?一般来说,每个合并冲突都是一个潜在的缺陷,所以尽可能地防止它们。 Have a look at this as well
-
我更新了问题以包含更多细节!
标签: tfs merge branch branching-and-merging branching-strategy