关于版本控制:什么是最适合Git的可视化合并工具?

What's the best visual merge tool for Git?

在Git中查看和编辑合并的最佳工具是什么?我想得到一个三向合并视图,在单独的面板中有"我的"、"他们的"和"祖先"以及第四个"输出"面板。

此外,调用所述工具的说明将非常好。(我仍然不知道如何启动kdiff3,使其不会出错。)

我的操作系统是Ubuntu。


meld是一个diff/merge工具。

安装方法如下:

  • 乌邦图
  • 雨衣
  • Windows:"推荐的Meld for Windows版本是最新的版本,可从http://meldmerge.org作为MSI提供。"


您可以将自己的合并工具配置为与"EDOCX1"(3)一起使用。

例子:

1
2
3
  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"的不同工具:

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

注意,在Unix/Linux中,您不希望shell将$BASE解析为变量-它实际上应该出现在您的~/.gitconfig文件中,这样才能工作。


除了比较3之外,我最喜欢的是在Pro版本中有一个合并功能。合并的好处在于它可以让您看到所有4个视图:基础视图、左视图、右视图和合并结果。它的视觉效果比p4v稍差,但远胜于windiff。它与许多源代码管理集成并在Windows/Linux上工作。它有许多功能,如高级规则、版本、手动对齐…

PerforceVisualClient(P4V)是一个免费的工具,它为合并提供了一个最显式的接口(参见一些屏幕截图)。在所有主要平台上工作。我对这个工具的主要失望是它的那种"只读"接口。不能手动编辑文件,也不能手动对齐。

ps:p4merge包含在p4v中。perfance试图让没有客户端的工具变得有点困难。

sourcegear diff/merge可能是我的第二个免费工具选择。检查合并屏幕截图,你会发现它至少有3个视图。

meld是一个更新的免费工具,我更喜欢sourcegear diff/merge:现在它也在大多数平台(windows/linux/mac)上工作,具有独特的优势,可以本地支持一些源代码控制,如git。所以您可以在所有文件上有一些历史差异,这要简单得多。合并视图(请参见屏幕截图)只有3个窗格,就像sourceGear diff/merge一样。这使得在复杂的情况下合并更加困难。

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


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

  • 它是免费的。
  • 跨平台(Windows、OS X和Linux)。
  • 干净的可视化UI
  • 您期望的所有diff功能(diff、merge、folder diff)。
  • 命令行界面。
  • 可用的键盘快捷键。

User interface


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


维姆迪夫

一旦你学习了vim(以及你应该学习的imho),vimdiff只是一个更漂亮的小正交概念。要在VIM中获取联机帮助,请执行以下操作:

1
:help vimdiff

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


您可以尝试p4merge。

Visualize the differences between file versions with P4Merge. Resolve conflicts that result from parallel or concurrent development via color coding.

功能包括:

  • 突出显示和编辑文本文件差异
  • 选择包含或忽略行尾或空格
  • 识别Windows(CRLF)、Mac(CR)和Unix(LF)的行尾约定
  • 使用命令行参数并从非性能应用程序启动
  • 比较和合并文件时显示行号
  • 排除已修改、唯一或未更改的文件
  • 按名称或扩展名筛选文件
  • 在熟悉的文件/文件夹层次结构中组织修改的资产
  • 比较jpeg、gif、tiff、bmp和其他文件格式
  • 使用qt api扩展
  • 叠加图像或并排显示
  • 突出显示重叠图像上的差异


漫射是我的最爱,但我当然有偏见。:-)很容易使用:

1
$ diffuse"mine""output""theirs"

Diffuse is a small and simple text merge tool written in Python. With Diffuse, you can easily merge, edit, and review changes to your code. Diffuse is free software.


Intellij IDEA有一个复杂的合并冲突解决工具和解决魔法棒,这大大简化了合并:

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


Araxis合并http://www.araxis.com/merge我在Mac OS X上使用它,但在Windows上使用过…这不是免费的…但它有一些很好的特点…不过在窗户上更漂亮。


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


如果您只是在寻找一个超越比较的diff工具,那就非常好了:http://www.scootersoftware.com/moreinfo.php


我试过很多这里提到的工具,但它们都不是我想要的。

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

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

我甚至不再将它用作编辑器或IDE,只是为了使用Git。干净的用户界面和非常直接的,加上它是高度可定制的。

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

    • 我也会推荐项目经理作为一种非常方便的方式在项目之间导航,而不填充树视图。
  • 我遇到的唯一问题是刷新——在处理大型存储库时,Atom更新外部所做的更改可能会很慢。我总是在完成后关闭它,然后当我想再次查看我的更改/提交时重新打开它。您还可以使用ctrl+shift+f5重新加载窗口,这只需要一秒钟。

当然是免费的。


您可以在Linux、Mac或Windows上安装ecmerge diff/merge工具。它是在Git中预先配置的,所以只要使用git mergetool就可以完成这项工作。


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

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

Fist可以通过以下方式调用:

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

第二个是在使用git mergetool时调用的。


如果您确实使用了Visual Studio,那么团队资源管理器内置工具是解决Git合并冲突的非常好的工具。


所以对于git合并,您可以尝试:

  • diffmerge可以直观地比较和合并Windows、OS X和Linux上的文件。

    DiffMerge

  • meld是一个视觉差异和合并工具。

    Meld is a visual diff and merge tool

  • kdiff3,一个diff和merge程序),用于比较或合并2或3个文本输入文件/目录。
  • opendiff(macos上xcode工具的一部分),一个命令行实用程序,它从终端启动filemerge应用程序,以图形方式比较文件或目录,包括合并。

gitx网址:http://gitx.frim.nl/

使用大型提交集时会出现一些错误,但对于浏览更改并选择不同的更改到阶段然后提交非常有用。