什么是Git最好的视觉合并工具?[关闭]


599

在Git中查看和编辑合并的最佳工具是什么?我想要一个三向合并视图,在单独的面板中有“ mine”,“ theirs”和“ ancestor”,以及第四个“ output”面板。

同样,调用该工具的说明也很棒。(我仍然没有弄清楚如何以不给我错误的方式启动kdiff3。)

我的操作系统是Ubuntu。


15
“但是现在是不允许的。”是的,这就是为什么我现在讨厌stackoverflow。没有这些问题,它太干又无聊。
伊什特万Ujj-梅萨罗斯

17
是否有允许这种问题的stackexchange网站?如果没有,应该有..
fzzylogic '16

16
似乎是时候进行新的堆栈溢出了,允许出现此类问题。显然,有这么多陈述对许多人来说都是有价值的问题,以至于将其关闭显然是愚蠢的。我认为您已经在官僚机构中任职。您如何对此问题进行民意调查,看看您的“客户”想要什么; P
Piotr Owsiak


6
问题是:软件专家没有用,因为专家们在这里,而不是那里。
reinierpost

Answers:


337

Meld是一个免费的开源跨平台(UNIX / Linux,OSX,Windows)差异/合并工具。

以下是安装方法:


53
谁在乎原始作者使用的OS?这个问题足够笼统,以至于每个寻找它的人都感兴趣。3向差异是您实际看到4个带有测试的窗格时的情况。merge-base / local / remote / result
Evgeny

16
meld对于复杂的差异比较繁琐,能够选择诸如这样的选项chose b for all unresolved conflicts比必须手动为中的每个大块单击正确的箭头要好得多meld。同样,能够合并到特定的输出文件中,而不是就地编辑输入文件,对于从失败的神经中撤出是非常宝贵的。
Mark Booth'3

3
@naxa Meld现在拥有Windows安装程序:code.google.com/p/meld-installer
Roman

6
kdiff3让您看到4个视图,meld仅允许3个视图。Meld不是真正的合并工具,而是差异工具,因为它没有显示基本版本视图。
山本彰(Akira Yamamoto)

4
合并非常可怕,尤其是对于合并而言。它没有“自动转移无冲突的更改”的选项,这使每个合并都非常痛苦。
塞林

91

您可以配置自己的合并工具以与“ git mergetool” 一起使用。

例:

  git config --global merge.tool p4merge
  git config --global mergetool.p4merge.cmd p4merge '$BASE $LOCAL $REMOTE $MERGED'
  git config --global mergetool.p4merge.trustExitCode false

在使用它的同时,还可以将其设置为“ git difftool” 的difftool :

  git config --global diff.tool p4merge
  git config --global difftool.p4merge.cmd p4merge '$LOCAL $REMOTE'

请注意,在Unix / Linux中,您不希望$BASE外壳程序将其解析为变量-实际上,它应该出现在〜/ .gitconfig文件中才能起作用。


10
请注意,由于p4merge(现在)是官方支持的git mergetools之一,因此不必混用该工具。.cmd变量了。
马特·鲍尔

2
确保您使用的报价正确:stackoverflow.com/a/1217994/3543437
kayleeFrye_onDeck

64

我最喜欢的 Beyond Compare 3 Pro版本中具有合并功能。合并的好处在于,它可以让您查看所有4个视图:基本,左,右和合并结果。它的视觉效果不及 P4V,但远胜于WinDiff。它与许多源代码控制集成在一起,并且可以在Windows / Linux上运行。它具有许多功能,例如高级规则,版本,手动对齐...

Perforce Visual ClientP4V是一个免费工具,它提供了最明确的合并界面之一(请参阅一些屏幕截图)。适用于所有主要平台。我对该工具的主要失望之处在于它的 “只读”界面。您不能手动编辑文件,也不能手动对齐。

PS:P4Merge包含在P4V中。Perforce试图在没有客户的情况下很难获得他们的工具。

SourceGear差异/合并可能是我的第二个免费工具选择。检查合并屏幕截图,您将看到它至少具有3个视图。


Meld是一个较新的免费工具,我更喜欢 SourceGear Diff / Merge:现在,它还可以在大多数平台(Windows / Linux / Mac)上运行,并具有原生支持某些源代码控制(如 Git)的明显优势。因此,您可以使所有文件的历史记录差异变得更加简单。合并视图(请参见屏幕截图)只有3个窗格,就像 SourceGear Diff / Merge一样。这使得在复杂情况下合并变得有些困难。

PS:如果一天有一个工具支持5个视图合并,那的确很棒,因为如果您在Git中选择提交,则实际上不是一个基础,而是两个基础。两个基本,两个更改以及一个结果合并。


7
Perforce合并很棒。它有一个4窗格合并工具,它确实有帮助:你的,他们的,公共基础,新
加尔

4
Google使用 P4 。
2011年

5
您只能自定义安装P4Merge,而无需执行其余的操作。
德克·贝斯特

6
最新版本的p4merge没有“只读”界面。您可以在下部窗格中编辑合并的文件。
伊恩·尼·刘易斯

1
这是一个非常好的答案和讨论。感谢你的分享!
Mark Good

44

我听到了有关kdiff3的好消息。


4
+1:kdiff3远胜于meld,并且git本身也支持它。
Mark Booth'3

3
kdiff3具有更多功能,但meldUI更好。我认为,meld对于容易进行合并的情况(它所提供的功能meld已足够)更好。记得也尝试一下diffuse
Mikko Rantalainen

kdiff3让您看到4个视图,meld仅允许3个视图。Meld不是真正的合并工具,而是差异工具,因为它没有显示基本版本视图。
山本彰(Akira Yamamoto)

43

我最喜欢的视觉合并工具是SourceGear DiffMerge

  • 这是免费的。
  • 跨平台(Windows,OS X和Linux)。
  • 干净的视觉UI
  • 您期望的所有差异功能(差异,合并,文件夹差异)。
  • 命令行界面。
  • 可用的键盘快捷键。

用户界面


3
如何配置它与git一起使用?
瑞安·伦迪


2
谢谢您介绍给我!:D该工具干净整洁,安装和使用的时间少于焊接。我花了半小时尝试安装融合。但是我在5分钟内完成了这个!
om39a 2014年

2
注意:diffmerge似乎没有3向合并功能。由于这个原因,我尝试了几个星期后就放弃了
StormeHawke 2014年

这是一个很好的工具,还可以比较文件夹。问题是它有点慢(MacBookPro 15 2014,MacOS Catalina)
emKaroly

33

维姆迪夫

一旦学习了vim(并且应该学会恕我直言),vimdiff就是一个更美丽的正交概念。在vim中获得在线帮助:

:help vimdiff 

这个问题涵盖了如何使用它:如何使用vimdiff解决冲突?

在此处输入图片说明

如果您陷于鼠标使用的黑暗时代,并且要合并的文件不是很大,我建议您合并。


<3 vimdiff,我不知道如何说服svn让我将其用作“合并”工具。
2011年

gvimdiff也可以很好地达到此目的。
new123456

2
使用Fugitive插件可以更加轻松! vimcasts.org/episodes/...
埃里克Westrup

如果只有一种方法可以清楚地看到本地/基本与基本/远程之间的区别。
西罗Santilli郝海东冠状病六四事件法轮功

24

您可以尝试P4Merge

使用P4Merge可视化文件版本之间的差异。通过颜色编码解决由并行或并行开发引起的冲突。

功能包括:

  • 突出显示和编辑文本文件差异
  • 选择包含或忽略行尾或空格
  • 识别Windows(CRLF),Mac(CR)和Unix(LF)的行尾约定
  • 使用命令行参数并从非Perforce应用程序启动
  • 比较和合并文件时显示行号
  • 排除已修改,唯一或未更改的文件
  • 按名称或扩展名过滤文件
  • 以熟悉的文件/文件夹层次结构组织修改后的资产
  • 比较JPEG,GIF,TIFF,BMP和其他文件格式
  • 使用Qt API扩展
  • 叠加图像或并排显示
  • 突出显示重叠图像上的差异

到目前为止我见过的最好的一个。通过从三向视图的列表中选择更改来轻松解决冲突
chovy



今天开始使用它,非常直观。
资源

22

IntelliJ IDEA具有一个复杂的合并冲突解决工具和Resolve魔术棒,可大大简化合并:

来源:https://blog.jetbrains.com/dotnet/2017/03/13/rider-eap-update-version-control-database-editor-improvements/


2
Idea的合并工具非常出色。它甚至可以在Idea的社区版中获得,这意味着您可以免费将其作为高级合并工具免费使用-这就是我正在做的事情(在大多数情况下,我在工作时使用VSCode,在棘手的合并案例中使用Idea)。VSCode也做得很好,有时甚至比Idea更出色。但在困难的情况下,其3面板布局是我见过的最好的工具
godblessstrawberry

我讨厌滚动条“夏天文件”不在一起!我喜欢弥漫的主要原因!
安东尼

16

扩散是我的最爱,但我当然有偏见。:-) 这是非常容易使用:

$ diffuse "mine" "output" "theirs"

Diffuse是一个用Python编写的小型简单文本合并工具。使用Diffuse,您可以轻松地合并,编辑和查看对代码的更改。扩散是免费软件。


2
我真的很喜欢分散,而且我没有偏见。
jturcotte

2
@德里克·莫泽(Derrick Moser):diffuse看起来非常好。我现在尝试了,它的差异比更好kdiff3。但是,我试图将其与之一起使用git mergetool,它会彼此相邻打开4个文件(本地,合并结果,远程,基本),并且我的屏幕还不够宽。我不得不做很多水平滚动。kdiff3仅在彼此相邻的位置显示3,并且结果在窗口的下半部分显示。
yairchu 2010年

与meld相比,diffuse具有一些其他合并选项(允许同时加入两个版本,而不是选择其中一个)。
Audrius Meskauskas 2013年

他们在Windows上开箱即用,用于比较2个文件夹,CVS存储库,Git存储库,合并git merge冲突。漫反射差异文件在单个窗口的选项卡中打开。我切换到了扩散(使用了emacs的ediff(太多的功能,在90年代有用)之后)> vimdiff(复杂的插件击键)> p4merge> araxis(专有)> meld(太慢),tkdiff(仅cvs)> kdiff3(很好,好的regex会忽略功能)> winmerge(好的)> diffuse(快速,可移植,可以按预期工作))我第一次尝试使用diffuse。
mosh

如何在Diffuse中更改GUI语言?
扎克


9

您可以通过git mergetool -t=<tool>或更改git mergetool使用的工具--tool=<tool>。要更改默认值(来自vimdiff),请使用git config merge.tool <tool>



6

因此,对于git merge,您可以尝试:

  • DiffMerge可以在Windows,OS X和Linux上直观地比较和合并文件。

    差异合并

  • Meld是视觉差异和合并工具。

    Meld是视觉差异和合并工具

  • KDiff3,一个差异和合并程序),它比较或合并2或3个文本输入文件/目录。
  • opendiff(macOS上Xcode Tools的一部分),一个命令行实用程序,可从Terminal启动FileMerge应用程序,以图形方式比较文件或目录,包括合并

2
git config --global merge.tool opendiff最适合我的工作
詹姆斯·马修·马吉特

5

我尝试了这里提到的许多工具,但这些工具都不是我一直在寻找的工具。

就个人而言,我发现Atom是可视化差异和解决冲突/合并的好工具。

至于合并,没有三个视图,但是每个视图都被合并为一个带有彩色突出显示的视图。您可以直接编辑代码,也可以使用按钮使用所需的那个片段的任何版本。

我什至不再使用它作为编辑器或IDE,仅用于git。简洁的用户界面,非常简单明了,而且高度可定制。

  • 您可以从命令行启动它,并传入您要打开的单个文件,或者添加您的项目文件夹(git repo)。

    • 我还建议将项目管理器作为一种非常方便的方式在项目之间导航而又不会填满树形视图。
  • 我遇到的唯一问题是令人耳目一新-在使用大型存储库时,atom会很慢地更新您在其外部进行的更改。我总是总是在完成后关闭它,然后在我想再次查看更改/提交时重新打开。您也可以使用ctrl + shift + f5重新加载窗口,只需一秒钟。

而且它是免费的。


3

我使用不同的工具进行合并和比较:

git config --global diff.tool diffuse
git config --global merge.tool kdiff3

拳头可以这样称呼:

git difftool [BRANCH] -- [FILE or DIR]

当您使用时,第二个被调用git mergetool



2

如果您使用Visual Studio,Team Explorer内置工具将是解决git merge冲突的很好工具。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.