自从它第一次出现以来,我一直是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,但我也会在这里推荐你的意见。
答案 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??
local
和other
都引入了新变量bar
。将第一个更改合并到bof
/ zot
,去喝杯茶,然后回来尝试合并print
。等等,bar
中的local
是什么?如果原来的local
不存在,那么这些信息就消失了,你正在用另一个文本编辑器来解决这个问题。
这是一个人为的例子,但是这种事情很容易发生在任何一组变化中,你无法将它们全部放在脑海中并且一气呵成。通常,3WM总是有两个可变元素,更改A和更改B.要重现其中的所有信息,您需要四个视图,用于所有可能的排列:0
(原始),{{1} },A
和B
(合并)。
答案 1 :(得分:4)
Project: Merge是我为XML编写的比较和合并工具。我查看了标准的4窗格方法,几乎立即将其丢弃,因为这是一种非常浪费的显示数据的方式。在上面的屏幕截图中充分证明了这一点,几乎所有窗格都多次显示完全相同的数据。
因此,我开发了一种单窗格方法,用于显示所有输入文件并显示其中哪些文件对输出有贡献。 (或者比较文件时的差异。)虽然我不允许完全自由地编辑文本(主要是由于如何管理和引用XML节点),合并输出的某些部分可以或多或少地编辑会在常规文本编辑器中。 (就导航而言,我的编辑器键盘快捷键与Visual Studio紧密相关。)最值得注意的是字符数据,注释和属性值。您还可以完整地剪切和粘贴XML节点。 (但显然只是作为外部应用程序的文本。)
以下屏幕截图显示了三向合并,其中大多数更改出现在“左侧”文件中,并且在所选更改下方存在未解决的冲突:
答案 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使用单面板方法显示更改,因此您可以获得两个面板和第三个面板进行编辑。其他程序使用两个面板方法来显示更改,因此您可以获得三个面板以及第四个面板进行编辑。
同样,我认为这只是一个品味问题。