在Visual Studio 2008中合并文件时强制进行比较

4

目前,当我在Visual Studio 2008中右键单击 ->合并特定文件时,它会尝试(通常成功)自动将文件合并到我指定的目标中。

我如何强制VS始终允许我在我的合并工具中手动比较和合并文件?

我应该提到,我的源代码控制是TFS。

2个回答

0

这里真正存在两个潜在问题:

  1. 作为合并计算的一部分,服务器确定自上次两个文件完全同步以来没有针对目标文件进行过更改。因此,根据TFS语义,直接覆盖目标文件是安全的。

  2. 两个分支中都有历史记录,因此服务器将文件声明为冲突状态。现在由客户端选择解决方案。

    • 您可以决定保留源文件或目标文件不变。
    • 您可以选择在配置的工具中手动合并。
    • 您可以请求自动合并(通过tf resolve -auto:acceptmerge或外部对话框上的自动合并所有按钮或内部对话框上的“为我合并更改”单选按钮)
      • 如果自动合并失败,则会呈现相同的选择,除了自动合并按钮会变灰

关于情况 #1,你没有什么可做的。除非服务器代码存在严重的未修复缺陷、历史数据库损坏,或者[最有可能的]你之前的解决方案选择大大误导了 TFS 对你真正意图的理解,否则它应该是安全的。最坏的情况是,在任何内容提交之前,你总有机会构建和运行测试来测试待合并的改动。

正如你所看到的,情况 #2 有许多细节需要考虑。如果有必要干预流程中的某一步骤,目前还不清楚你想要干预哪一步。好消息是,一旦控制权转移到客户端,你就有广泛(且易于扩展)的选择范围。唯一棘手的部分是确保你理解每个选择的后果;不可否认,UI 和文档在这方面并不完全清晰。如果需要,可以回复更多有关你问题的细节。


谢谢Richard。你确定情况#1只会发生在源和目标完全相同的情况下吗?我认为如果它们不同,而VS决定可以安全地执行自动合并,那么也会发生这种情况。这就是我担心的事情。这些文件是敏感配置文件,我不能承担搞砸的风险。这就是为什么自动化测试无法给我所需的安全性。因此,归根结底,我无法通过右键单击->合并来强制进行比较,对吗? - urig
实际上,当源和目标相同时,这种情况绝不会发生。它发生在源已经对在目标中进行的每个更改都获得了信用时。示例序列:编辑A,编辑B,合并B->A [抛出冲突],解决为接受源(“从源复制”),编辑A,再次编辑A,合并A->B。服务器不会发出冲突,因为以前的合并使它们完全同步,并且自那时以来B没有更改。根本没有自动合并发生。 B只是用A中的内容覆盖。自动合并仅在情况#2中发生,而且仅在用户请求时才会发生。 - Richard Berg
案例1是一个问题,当你想要保留分支之间的某些差异时。例如,我希望我的分支始终使用不同的路径引用程序集。然而,我仍然需要合并项目文件中的其他更改。 - xr280xr

0

尝试在命令行中使用/conservative标志。这样更有可能让您在合并工具中合并更改。

/conservative -> 在将一个分支合并到另一个分支时会导致更多的冲突。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接