三方合并 - 不同的哲学?

时间:2010-04-12 11:02:49

标签: user-interface version-control merge three-way-merge

自从它第一次出现以来,我一直是UltraCompare Pro的用户,我认为这是一个功能齐全的比较和合并工具。但是,由于我一直在密切关注DVCS,我发现它处理三向合并的方式不同于(大多数?)其他工具。所以我想知道为什么会这样,以及我是否因为它而错过了什么。

在UltraCompare中,有三个合并面板(让我们称之为基础,本地和其他)。所有合并操作都在这些面板中发生。在实践中,这意味着我在中间窗格(本地)上进行工作,合并来自右侧(其他)的更改,或者可能来自左侧(基础)的共同祖先。中间窗格在会话期间被修改,然后保存 - 并作为合并的结果提交。第四个窗格(“输出”窗口)仅包含有关diff结果的信息。

Screenshot UC http://www.ultraedit.com/assets/images/feature_map/uc/three_way_text.png

在其他工具中,似乎三个窗格仅存在于只读状态,而第四个底部窗格(输出)是所有合并发生的位置。有一个额外的合并窗口的原因是什么?是否更容易跟踪所有变化?或者就是这样,因为每个人都一直这样做,所以我们正在复制这种行为?你对此有何看法?

Screenshot kdiff3 http://hginit.com/i/04-kdiff3-after.png

我不确定是否存在最佳或正确答案,所以我还没有提出这个问题CW,但我也会在这里推荐你的意见。

4 个答案:

答案 0 :(得分: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。等等,bar中的local是什么?如果原来的local不存在,那么这些信息就消失了,你正在用另一个文本编辑器来解决这个问题。

这是一个人为的例子,但是这种事情很容易发生在任何一组变化中,你无法将它们全部放在脑海中并且一气呵成。通常,3WM总是有两个可变元素,更改A和更改B.要重现其中的所有信息,您需要四个视图,用于所有可能的排列:0(原始),{{1} },AB(合并)。

答案 1 :(得分:4)

Project: Merge是我为XML编写的比较和合并工具。我查看了标准的4窗格方法,几乎​​立即将其丢弃,因为这是一种非常浪费的显示数据的方式。在上面的屏幕截图中充分证明了这一点,几乎所有窗格都多次显示完全相同的数据。

因此,我开发了一种单窗格方法,用于显示所有输入文件并显示其中哪些文件对输出有贡献。 (或者比较文件时的差异。)虽然我不允许完全自由地编辑文本(主要是由于如何管理和引用XML节点),合并输出的某些部分可以或多或少地编辑会在常规文本编辑器中。 (就导航而言,我的编辑器键盘快捷键与Visual Studio紧密相关。)最值得注意的是字符数据,注释和属性值。您还可以完整地剪切和粘贴XML节点。 (但显然只是作为外部应用程序的文本。)

以下屏幕截图显示了三向合并,其中大多数更改出现在“左侧”文件中,并且在所选更改下方存在未解决的冲突:

alt text

答案 2 :(得分:3)

就个人而言,我喜欢免费的perforce合并工具(p4merge)。它还有4个窗口 - 原始的顶部中间(分支前),左侧为目标分支,右侧为源分支,底部可编辑。

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

答案 3 :(得分:2)

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

  • 两个面板并排
  • 一个小组

图形:

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

 aaa
-bbb
+ccc
 ddd

某些程序使用第一个程序(例如WinMerge),某些程序允许选择(例如TortoiseMerge或Google Project Hosting)。这可能是一个品味问题但我发现第二个更直观,当你想跟踪变化时。但是,如果要编辑更改,则需要两个面板。

在进行三向合并时,不同的布局来自于此。 Ultra compare使用单面板方法显示更改,因此您可以获得两个面板和第三个面板进行编辑。其他程序使用两个面板方法来显示更改,因此您可以获得三个面板以及第四个面板进行编辑。

同样,我认为这只是一个品味问题。