三方合并——不同的哲学观?

5
我一直使用 UltraCompare Pro 工具,自从它推出以来,我认为它是一个非常全面的比较和合并工具。然而,自从我更加深入地研究了DVCS之后,我发现它在处理三方合并时与其他(大多数?)工具不同。因此,我想知道这是为什么,以及是否由于这个原因我错过了什么。
在 UltraCompare 中,有三个合并面板(我们称其为基本、本地和其他)。所有的合并操作都在这些面板中进行。实际上,这意味着我在中间面板(本地)上进行我的工作,将右边(其他)或可能是左边(基本)的共同祖先的更改合并到其中。在会话期间,中间面板被修改,然后保存-并作为合并的结果提交。第四个面板(输出窗口)仅包含有关差异结果的信息。

UC截图
(来源: ultraedit.com)

在其他工具中,三个窗格似乎只存在于只读状态下,第四个底部窗格(输出)是所有合并发生的地方。为什么要有额外的合并窗口?这样更容易跟踪所有的更改吗?还是因为每个人都一直这样做,所以我们复制了那种行为?你对此有什么看法?

kdiff3截图
(来源: hginit.com)

我不确定是否存在最佳或正确答案,因此我还没有将这个问题设为社区wiki,但我也会听取您的意见。

4个回答

6

对我来说似乎很简单,当您进行更改时,您可能希望保留一个未更改的“本地”版本可见。

original       local         other           merged

               bar= foo+1    bar= foo+2      bof= foo+2
                                             zot= foo+1
...            ...           ...             ...
print foo      print bar     print foo+1     print bar??

localother中都引入了一个新变量bar。 将第一个更改合并到bof/zot,喝杯茶回来后尝试合并print。等等,local中的bar是什么? 如果原始的local不存在,则该信息已丢失,并且您需要使用另一个文本编辑器来解决发生了什么。

这是一个人为制造的例子,但这种事情很容易发生在任何你无法全部记住并一次完成的更改集上。一般来说,3WM始终具有两个可变元素,即更改A和更改B。要复制其中所有信息,您需要四个视图以获取以下所有可能的排列:0(原始)、ABAB(合并)。


对我来说一点也不做作。谢谢! - Tim Pietzcker

4
Project: Merge是我为XML编写的比较和合并工具。我看了标准的四格布局,几乎立即将其放弃,因为它是一种非常浪费显示数据的方式。在上面的截图中,几乎所有窗格都多次显示完全相同的数据,这一点得到了充分证明。
因此,我开发了一种用于显示所有输入文件并显示哪些文件对输出有贡献(或者在比较文件时差异在哪里)的单窗格方法。虽然我没有允许完全自由形式的文本编辑(主要是由于如何管理和引用XML节点),但合并输出的某些部分可以更多或更少地像在普通文本编辑器中一样进行编辑。(我的编辑器键盘快捷键在导航方面紧密遵循Visual Studio的那些。)最值得注意的是字符数据、注释和属性值。您还可以将XML节点作为整体剪切和粘贴。(但显然只能作为文本复制到外部应用程序。)
以下截图显示了一个三向合并,大多数更改出现在“左”文件中,并且在所选更改下面存在未解决的冲突:

我真的很喜欢这个工具!绝对值得考虑!! - pablo

3

个人而言,我喜欢免费的Perforce合并工具(p4merge)。它也有4个窗口-顶部中间是原始文件(在分支之前),左边是目标分支,右边是源分支,底部是可编辑的。

我比你的选项1更喜欢这个工具,因为所有3个原始文件可能都包含重要信息,可以影响合并结果。


2

基本上有两种方法来显示两个文件之间的差异:

  • 并排显示两个面板
  • 单个面板

图形化表示如下:

aaa aaa
bbb ···
··· ccc
ddd ddd

并且

 aaa
-bbb
+ccc
 ddd

一些程序使用第一种方法(例如WinMerge),而有些程序允许选择(例如TortoiseMerge或Google Project Hosting)。这可能只是个人口味问题,但我发现第二种更直观,当您想要追踪更改时。但是,如果您想要编辑更改,则需要两个面板。
在进行三方合并时,不同的布局就来自于此。Ultra Compare使用单面板方法显示更改,因此您会得到两个面板加上第三个用于编辑的面板。其他程序使用双面板方法显示更改,因此您会得到三个面板以及第四个用于编辑的面板。
再次强调,我认为这只是个人口味问题。

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