TFS合并算法问题
我们使用TFS2010,有三个分支:开发->质量保证->生产 在这个特定的示例中,我们决定将方法参数类型和名称从“Guid reportGuid”更改为“int reportId”。我们在QA分支中进行了此更改,并将其签入。现在我正试图将这一变化从QA转移到开发分支。通常是反方向进行的,但在这种特殊情况下,我们做了我们所做的。是合并工具的屏幕截图。正如您从屏幕截图中看到的,Dev分支中文件的最后一次签入获得了变更集编号30282和QA-31002(更新于30282)。对我来说,很明显,新的变更应该覆盖旧的变更。但TFS merge所做的恰恰相反。它将来自Dev分支(30282)的旧代码应用于来自QA分支(31002)的新代码,结果没有得到更改 有人能解释为什么TFS合并会这样吗?TFS合并算法问题,tfs,merge,Tfs,Merge,我们使用TFS2010,有三个分支:开发->质量保证->生产 在这个特定的示例中,我们决定将方法参数类型和名称从“Guid reportGuid”更改为“int reportId”。我们在QA分支中进行了此更改,并将其签入。现在我正试图将这一变化从QA转移到开发分支。通常是反方向进行的,但在这种特殊情况下,我们做了我们所做的。是合并工具的屏幕截图。正如您从屏幕截图中看到的,Dev分支中文件的最后一次签入获得了变更集编号30282和QA-31002(更新于30282)。对我来说,很明显,新的变更应
提前谢谢。这个屏幕截图上好像有合并冲突,对吗 首先,不要使用VisualStudio/TFS的合并工具,它既不有效也不直观。使用免费的KDiff3或Beyond Compare可以获得更好的自动合并和更友好的用户界面 第二,据我所知,TFS中并没有时间一致性(我可能错了,但我从来没有听说过)。您提到的两个变更集不在同一个分支中,因此TFS不关心哪个变更集发生在另一个之后,以及它的含义 第三,合并的方向不会改变branch1到branch2或branch2到branch1的任何内容。唯一的变化是两个分支是否直接相关 对我来说,你的问题主要是一个基于GUI的问题,或者你可能使用了自动合并功能,这在冲突的情况下一点都不聪明
您正在发布一个三方合并工具的屏幕截图,我怀疑您将其归因于许多智能。TFS使用任何3路合并工具来解决冲突-默认情况下,它包括图中所示的工具,但是您可以将其配置为使用 当TFS检测到冲突时(在本例中为合并冲突,即文件在两个分支中编辑,然后合并),它将尝试删除文件的内容。如果无法进行自动合并,则需要使用已配置的三向合并工具来解决冲突。TFS只需将该工具交给3条路径:“源”(分支中作为合并源的文件)、“目标”(分支中作为合并目标的文件)和“基”或公共祖先 公共祖先是在两个分支之间合并的文件的最后一个版本。如果未执行合并,则公共祖先是文件分支所在的变更集。直到您第一次将更改从源合并到目标,这种情况才会改变。例如,考虑<代码> $/main /A.txt < /COD>在变更集2中分支为<代码> $/分支/A.TXT< /COD>。如果编辑发生在
$/Main/A.txt
(作为变更集3),而编辑发生在$/Branch/A.txt
(作为变更集4),那么当您尝试将$/Branch
合并到$/Main
时,您将在A.txt
上发生合并冲突。本例中的公共祖先是变更集2(分支的版本)
如果要在合并工具中解决该冲突并签入结果(作为变更集5),那么下次从$/Branch
合并到$/Main
时,A.txt
的共同祖先将是变更集5。(事实上,如果在TFS冲突解决期间调用“将源代码与基代码进行比较”或“将目标代码与基代码进行比较”,则应该能够看到公共祖先代码及其版本信息。)
在任何情况下,一旦调用了合并工具,该工具最终都有责任提示您处理这些更改。工作流依赖于工具,但典型的合并工具将逐行比较文件,并将每一行标识为以下内容之一:
- 未更改:源和目标中来自祖先的未更改行
- 共同的:从共同祖先更改的行,但相同
- 冲突的:源和目标中已更改且内容不同的行
- 仅源代码:仅在源代码中更改的行(目标与公共祖先相同)
- 仅目标:仅在目标中更改的行(源与公共祖先相同)