9

我有一个发布分支(RB,从 C5 开始)和一个主干(C10)上的变更集,我现在想合并到 RB。

该文件在 C3 处有更改(两者共有),在 RB 上的 CS 7 中有一处,在 C9(主干)处有一处,在 C10 处有一处)。所以我更改文件的历史记录如下所示:

    RB:       C5 -> C7
Trunk: C3 ->             C9 -> C10

当我将 C10 从主干合并到 RB 时,我希望看到一个合并窗口显示我 C10 | C3 | C7,因为 C3 是共同的祖先修订版,而 C10 和 C7 分别是我的两个分支的提示。但是,我的合并工具向我显示了C10 | C9 | C7.

我的合并工具配置为 show %1(OriginalFile)|%3(BaseFile)|%2(Modified File),所以这告诉我 TFS 选择 C9 作为基本修订版。

这完全出乎意料,与我习惯于在 Mercurial 或 Git 中工作的合并方式完全相反。我做错了什么还是 TFS 试图通过合并让我发疯?

这是默认的 TFS 合并行为吗?如果是这样,您能否深入了解他们为什么选择以这种方式实施它?

我正在使用带有 VS2010 的 TFS 2008 作为客户端。

4

3 回答 3

13

在 TFS 分支和合并(我们有开发、集成和主分支)方面,我最初也遇到过类似的困难。

简短的版本是您不能直接从提示合并回一个共同的祖先。

因此,如果 C3 分支到 C5,然后 C7 分支到 C9,那么该工具提供的内容在 TFS 工作方式的上下文中是有意义的。您基本上需要从 C10/C9 到 C7,然后从 C7 到 C3。

用一个更具体的例子换一种说法,这里是我们如何在我们的项目中处理多级分支和合并。

我们从主干/主干开始。

然后我们分支到集成分支。

然后我们(这是关键)从集成分支到我们各自的开发分支,以便我们可以处理即将发布的版本。

由于更改在 dev 分支中完成,我们首先通过从集成合并到我们的 dev 分支来反向集成(因此我们获取其他所有人的更改)。然后,我们通过从我们的个人开发分支转到共享集成分支来进行前向集成。

一旦集成通过了 QA,我们就会通过将主干合并到集成来反向集成(以防主干中有任何修补程序),然后将集成中的所有组合更改前向集成到主干。

在发布日,我们从 main 执行最后一个分支到一个新的发布分支,然后我们将其部署。

基本上,在 TFS 中,您总是必须在分支/合并树上从树干到肢体再到分支再到叶子 - 您不能在任何时候绕过分支层次结构中的任何步骤。

比喻地说,TFS 分支和合并更像是树懒爬上一棵树,然后慢慢地爬到一个分支的末端,而不是让它失去它的抓地力,而不是一只猴子在分支之间跳跃;)

需要一点时间来适应,但一旦完成(尤其是当您习惯了正向集成/反向集成范式后),它会很有效,尤其是当您有几个人都在做开发并且您需要总结每个人的更改时没有事情被踩在脚下。

希望有帮助!

于 2011-02-24T10:51:11.000 回答
0

我认为您可能有错误的合并方法,因为您所描述的完全有可能,并且对我有用。但是您始终必须记住,当您开始从主分支分支时,要进行适当的 RI(反向积分)和 FI(正向积分)。在codeplex 上搜索分支指南和最佳实践

从本质上讲,任何退回到主分支的更改都必须在将其合并回来之前返回到您的其他分支上。这是最佳实践,每次都有效,之后,您可以继续从分支回到主干线进行 FI。

于 2011-02-24T10:34:53.883 回答
0

我之前浏览过这个网站并偶然发现了这个页面,这有帮助吗?

如何在 TFS 中分支和合并

于 2011-02-21T20:14:12.230 回答