什么是最好的三向合并工具? [关闭]

Posted

技术标签:

【中文标题】什么是最好的三向合并工具? [关闭]【英文标题】:What's the best three-way merge tool? [closed] 【发布时间】:2010-10-09 00:06:57 【问题描述】:

Subversion、Git、Mercurial 和其他支持三向合并(结合我的、他们的和“基本”修订版)并支持图形工具来解决冲突。

你用什么工具? Windows、Mac OS X、Linux,免费或商业,任你选择。

这里有一些我用过或听说过的,只是为了开始对话:

KDiff3 DiffMerge P4Merge Meld 超越专业版。

(我知道这有点像 Best Diff Tool,但不同之处在于我明确关注三向合并工具;例如,WinMerge 不在列表中。)

【问题讨论】:

实际上WinMerge 确实有 3 路比较使用它与 VCS 工具,您只需将 3 个文件(左、右、结果)作为参数传递给命令行,它就可以完成这项工作。 很难说什么是最好的合并工具,因为它取决于主观因素。但是,如果您正在寻找一个标志差异的功能,请尝试semanticmerge.com 这个问题怎么能因为没有建设性而结束呢?它有 182 个赞、123 个星和 11 个答案,显然很多人认为它有建设性的。 @Shuklaswag 这与我的问题有什么关系?我想知道为什么它因为“没有建设性”而被关闭。 @HelloGoodbye 这本身就是一个建设性的问题,但对构建 *** 问答知识库没有建设性。 Shuklaswag 是完全正确的,但你也不是完全错误的。像这样的问题具体应该迁移到Software Recommendations,它对网站的目的既具有建设性又具有建设性。 There are already questions about this exact thing on the meta 是提出这些问题的适当位置,而不是在 cmets 中。 【参考方案1】:

KDiff3 开源,跨平台

Linux和Windows界面相同,解决冲突的智能算法,自动解决冲突的正则表达式,与ClearCase、SVN、Git、MS Visual Studio集成,可编辑合并文件,比较目录

它的键盘导航很棒:ctrl-arrows 导航差异,ctrl-1、2、3 进行合并。

另外,请参阅https://***.com/a/2434482/42473

【讨论】:

KDiff3的更多优点:Linux和Windows界面相同,解决冲突的智能算法,自动解决冲突的正则表达式,与ClearCase,SVN和Git集成,可编辑的合并文件,比较目录。 @ThomasS 这不是真的,请参阅other kdiff3 answer 示例。 kdiff3 很乐意区分和合并整个目录树,并且已经做了很多年!一些工具(例如git)可能只针对每个文件启动它,但其他工具(例如 mercurial)很乐意让您对整个存储库进行三向差异/合并。 KDiff3 在本地和其他更改的添加行数不同时很糟糕;如果在本地添加了 A、B 和 C 行,但其他更改只添加了 A 和 C,那么 KDiff3 会计算出添加了 A,然后发现 B 与 C 冲突,然后仍然添加 C。 2016年有人对这个答案有意见吗? 自 2014 年起不再支持【参考方案2】:

刚刚查看了 P4merge,因为我在另一篇博客文章中听说过:

非常流畅的界面,而且免费!我一直是 Araxis Merge 的忠实用户,但考虑到这是免费且很棒的,我鼓励你去看看。

【讨论】:

适用于 Windows、Mac、Linux、FreeBSD 和 Solaris 10 @Art:当然你可以在P4Merge中编辑合并结果。我一直都这样做! p4merge 对企业来说也不是“免费的”。该许可仅限于商业用途。 @DH4 我刚收到一封来自 Perforce 官方支持的电子邮件,P4Merge 可免费用于商业用途(我为 MS 工作,没有比这更多的企业了;)) P4merge 中不支持文件夹比较。这将是对 P4Merge 的一个非常好的补充。【参考方案3】:

Beyond Compare 3 Pro 支持three-way merging,这是一个令人印象深刻的合并工具。它是商业的(但值得,恕我直言),可在 Windows、Linux 和 Mac OS X 上使用。

正如评论中指出的,它也很便宜。

注意:如果没有合并集,即合并标记驻留在目标文件中,Beyond Compare 不提供三向文件比较/编辑。超越比较says that feature is on their list。

注意:3 路合并是 Beyond Compare 3 专业版中的一项功能

【讨论】:

+1 Beyond Compare 物超所值,尤其是考虑到它的其他功能。 不错,但不支持选择文件夹 迈克尔,我不确定你的意思。 Beyond Compare 对区分文件夹有很好的支持:scootersoftware.com/moreinfo.php. their website 上明确指出 - 对状态 Pro 版本的更新答案是 3 路合并的要求 Beyond Compare 4 Pro 添加了文件夹合并支持。【参考方案4】:

Meld Diff Viewer

我只有与 Meld 合作的良好经验。当我必须在分支之间进行杂乱的代码合并时,我会使用它。它使用简单,界面简洁。

开源 支持 Linux、Windows 和 MacOS 多文件差异 三向比较支持

在 Ubuntu 中,安装很简单:sudo apt-get install meld

【讨论】:

+1 Meld 是一款流畅、干净、“刚刚好”的软件。 @aib 你能详细说明一下吗?它在哪些方面存在缺陷/误导?我刚刚做了 hg merge --tool=meld ,我觉得很满意。 Meld,不幸的是,不是三向合并工具(即使他们在主页上声明)。对于三向合并,您需要 FOUR 个窗口(基本文件)。但我喜欢融合,效果很好。 @lzap,实际上融合了 三向,但它没有记录,大约一个月前我注意到他们已经完全删除了三向合并:@987654322 @ 如果您坚持使用足够旧的版本,那么您仍然很幸运。 截至今天,Meld 可靠地支持 3way diff 很长一段时间,并且在 Windows 上开箱即用也有很长一段时间(除了早期的 cmets 中指出的)。 cmets 中描述的故障(希望,至少根据我的经验)也已成为过去。【参考方案5】:

vimdiff。这很棒。您只需要一扇三英尺宽的窗户。

【讨论】:

花了一些时间才发现可以执行 "gvimdiff -O branch1.txt base.txt branch2.txt merge.txt" 并使用 ctrl+w J 将合并缓冲区移动到底部的屏幕。你是这样用的吗? 差不多,除了我用的是vim,不是gvim。 downvote,它并不能真正解决冲突,它只是差异。 vimdiff 现在对 3 路合并(即 4 个窗格)有很好的 git 处理 - vim.wikia.com/wiki/… @piotr vimdiff 确实可以解决冲突。您使用命令“diffg ”在底部窗格中构建合并文件。底部合并窗格是缓冲区 1,其他是顶部的 2、3、4。要跳转到差异,请使用 [c 和 ]c。这是 debian wheezy 7.7 上的开箱即用功能。【参考方案6】:

Source Gear Diff Merge:

跨平台、真正的三向合并,完全免费用于商业或个人用途。

【讨论】:

我已经使用 DiffMerge 多年并且喜欢它。但是,我阅读了this 博客文章,其中作者正在查看 diff-merge 工具并将列表缩减为 DiffMerge 和 P4Merge。他最终选择了 P4Merge,只是因为它有一个更好的界面。我今天才开始使用 P4Merge,我不得不同意。特别是,DiffMerge 不能很好地显示更改 - 它将它们显示为删除和插入。如果有许多变化紧密相连,这可能会令人困惑。 P4Merge 显示得更好。 我看到 diffmerge 是not free,它需要 19 美元 @erkfel,这是不正确的。注册是可选的,该软件可以免费使用:“SourceGear DiffMerge 是一款屡获殊荣的文件差异和合并工具,自 2007 年以来一直在帮助专业开发人员和爱好者。SourceGear DiffMerge 获得免费使用许可。但是,通过注册 DiffMerge您将帮助资助新产品的开发、维护和支持。作为感谢我们的注册用户并鼓励更多注册的一种方式,我们在 4.2 中添加了一些新功能...”(在程序文本中) 与 P4Merge(我现在在 git 中用于差异和合并)相比,我发现 DiffMerge 中有用的一件事是它与 Windows 文件资源管理器集成。特别是,我可以记住一个文件夹中的文件,然后将记住的文件与不同文件夹中的另一个文件进行比较。我发现这可能每月有用一次或两次,我不必将两个文件移动到同一个文件夹中来比较它们(例如,不受源代码控制的 SQL 脚本)。 自 2013 年起不再开发/更新。【参考方案7】:

Araxis Merge。它是商业的,但它非常值得……它适用于 Windows 和 Mac OS X。

【讨论】:

同意,这是我用过的最好的。 我的观察:处理 5MB 左右的大文件时速度相对较慢。 +1 为 Araxis。我愿意为个人使用而花大价钱购买的少数工具之一。相比之下,其他一切都杂乱无章、令人困惑且相形见绌(双关语)。 在长期使用 Araxis 之后,我的公司已经切换到 KDiff3,原因如下: (1) 当 Araxis 中的合并被取消时,文件在 TortoiseHg 中仍然被标记为已解决。 (2) Araxis 在“合并结果”窗格中显示基本修订和合并结果的混合,这经常令人困惑。 (3) 从 TortoiseHg KDiff3 将在没有用户交互的情况下自动合并,如果它可以这样做的话。 (4) KDiff3 的合并算法似乎做得更好。但是我们仍然使用 Araxis 作为我们的比较工具 :) 正如 cmets 中提到的其他答案,适当的 3 路合并工具有 4 个面板 - 基本面板、本地面板、远程面板和 结果。 Araxis 将基数和结果混为一谈,这可能会导致问题。【参考方案8】:

Kdiff3 冲突解决算法确实令人印象深刻。

即使 subversion 表明存在冲突,Kdiff3 也会自动解决它。有相同界面的 Windows 和 Linux 版本。可以将它与 Tortoise 和你的 linux shell 集成。

它在我最喜欢的开源软件列表中。我在任何机器上安装的首批工具之一。

您可以将其配置为 Subversion、Git、Mercurial 和 ClearCase 中的默认差异工具。它还解决了几乎所有的 ClearCase 冲突。在 Windows 中,它与 Windows 资源管理器有很好的集成:选择两个文件并右键单击以比较它们,或者右键单击“保存到以后”一个文件,然后选择另一个进行比较。

合并的文件是可编辑的。有流畅的键盘快捷键。

您还可以使用它比较和合并目录。看:

一个高级功能是使用正则表达式来定义自动合并。

我唯一的烦恼是,如果它不存在于您最喜欢的发行版存储库中,编译起来会有些困难。

【讨论】:

我同意合并算法。它非常复杂,而且奇怪地似乎以其他工具无法做到的方式“知道”你想要做什么。它经常粉碎 diff3 和 Subversion (blarg),甚至可以帮助 Git 合并。 下一个选择a/b/c的键盘快捷键在哪里? @mylord :使用一个小的 Auto-Advance-delay 和快捷键 Ctrl-1/2/3 来选择 A/B/C 来解决许多冲突。 你有什么替代 KDiff3 的吗?它的大用户,但我发现自己现在正在寻找更好的选择 @chrispepper1989,我今天还在 Git 中使用 KDiff3。我从来没有找到比 KDiff3 好得多的 3 路合并应用程序。 P4Merge 具有更现代的界面,但是当我对其进行测试时,您无法编辑合并的文件(我认为您现在可以做到)。【参考方案9】:

Ultracompare。非常好,可以很好地处理大文件(超过 1 GB),适用于 Windows/Mac/Linux,并且是商业的,但值得。

【讨论】:

不知道怎么设置支持3路合并... 能不能在中间显示一个base文件,左右显示2个修改过的文件,看看是什么根据基本文件在两个文件中都进行了更改,并且底部有 2 个更改文件的合并结果?我正在使用 UltraCompare 17.0 通过谷歌搜索发现了这个ultraedit.com/support/tutorials-power-tips/ultracompare/… - 在第 6 步高级合并中讨论了 3 路合并。【参考方案10】:

我爱Ediff。它内置了GNU Emacs。

要进行三向比较,请使用ediff-files3(用于选择三个文件)或ediff-buffer3(用于选择三个已打开的缓冲区)。您将看到如下所示的屏幕:

注意单词差异突出显示。

您可以点击np 转到下一个/上一个差异,而ab 会将区域从缓冲区a(最左边的一个)复制到缓冲区b(中间的那个),类似地abc 的其他两个字母组合; rb 将恢复缓冲区 b 中的区域。点击? 获取快速帮助菜单,或点击read the fine manual on diff3 merging in Emacs。

【讨论】:

尽管我很喜欢 ediff,但我只看到上面的两个缓冲区... 3 路合并应该有 3 或 4 个窗口:正在合并的三个窗口(本地、远程和它们的共同祖先base),以及最终的合并输出。 确实似乎在 ediff 中进行了 3 路合并(称为 ediff-merge-with-ancestor),但我不确定它是否有 3 个或 4 个窗格,而且上面的屏幕截图也没有反映这一点。 编辑显示三向差异@ShreevatsaR @unhammer 谢谢这更好,但它仍然只显示 3 个窗口,因此不清楚它是否是真正的 3 路差异(将有 4 个窗口;参见 kdiff3 和其他示例)。如果截图中显示的是正在合并的三个东西,那么输出在哪里? 您破坏性地修改了一个(或多个!)缓冲区。这就是为什么我提到ab 会将区域从缓冲区a 复制到缓冲区b。我认为ediff 还没有四窗口版本。 (我知道emerge 改用专用的输出缓冲区,但emerge-files-with-ancestor显示祖先,只有uses it to guess the correct version 通过查看哪个与祖先一致。)【参考方案11】:

Diffuse 是一个简单易用的三向合并工具。它支持您提到的所有平台和版本控制系统,并且可以同时比较三个以上的文件。

【讨论】:

它甚至支持同时比较N个文件!如果您需要比较来自许多同类应用程序的配置文件,这会很方便。 我使用 Diffuse 进行三个以上的文件比较【参考方案12】:

xxdiff 如果你在 Linux 领域。

【讨论】:

【参考方案13】:

总结是我发现 ECMerge 是一个很棒的商业产品。 http://www.elliecomputing.com/products/merge_overview.asp

我也同意 MrTelly 的观点,即 Ultracompare 非常好。一个不错的功能是它会比较 RTF 和 Word 文档,当您最终与销售人员一起使用 Word 编程并且他们没有正确管理他们的文档时,这很方便。

【讨论】:

第一个链接不起作用,它返回 500 错误。如果资源被移动,请调整url。 @SergeyP.akaazure - 很抱歉。我的博客已失效 - 我已删除链接..

以上是关于什么是最好的三向合并工具? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

什么是最好的道场学习材料? [关闭]

什么是最好的 java 图像处理库/方法? [关闭]

最好的日志文件格式是啥? [关闭]

Python有没有好的依赖分析工具? [关闭]

Windows 上最好的免费 C++ 分析器是啥? [关闭]

20+最好的持续集成工具