虽然这个问题和答案中的大部分信息都可以在StackOverflow上找到,但它分散在很多页面上,并且在其他错误或误导的答案中。我花了一段时间才把我想知道的一切拼凑起来。

有很多不同的程序可以用作git的difftool和mergetool,当然,对于哪个是最好的并没有共识(意见、需求和操作系统显然会有所不同)。

Meld是一个流行的免费,开源,跨平台(UNIX/Linux, OSX, Windows)的选择,如StackOverflow的问题所示,什么是最好的可视化合并工具Git?,其中提议Meld的答案获得的票数是其他选项的3倍多。

下面我将回答以下2个问题:

我如何设置和使用Meld作为我的git difftool? 我如何设置和使用Meld作为我的git合并工具?

注意:没有必要使用相同的程序作为你的difftool和mergetool,可以为两者设置不同的程序。


当前回答

我使用meld遵循这个简单的设置。Meld是免费的开源差异工具。对于任何代码更改,您将看到文件和目录的比较。

使用yum/apt在Linux中安装meld。 在~/中添加以下行。gitconfig文件

(diff) 工具= meld

转到代码repo并输入以下命令查看上次提交的更改与当前工作目录之间的差异(未分阶段未提交的更改)

我的小道消息

要查看上次提交的代码和阶段性代码之间的差异,请使用以下命令

Git difftool——cached——dir-diff ./

其他回答

从$MERGED中的不同部分中计算一个差值并应用它可能很复杂。在我的设置中,meld通过可视化地显示这些差异来帮助你,使用:

[merge]
    tool = mymeld
    conflictstyle = diff3

[mergetool "mymeld"]
    cmd = meld --diff $BASE $REMOTE --diff $REMOTE $LOCAL --diff $LOCAL --output $MERGED

它看起来很奇怪,但提供了一个非常方便的工作流程,使用三个标签:

在TAB 1中,您可以看到(从左到右)应该在TAB 2中为解决合并冲突所做的更改。 在TAB 2的右侧,你应用“你应该做出的改变”,并将整个文件内容复制到剪贴板(使用ctrl-a和ctrl-c)。 在TAB 3中,用剪贴板内容替换右侧。如果一切正确,您现在将从左到右看到与tab 1中显示的相同的更改(但上下文不同)。保存在此选项卡中所做的更改。

注:

不要在TAB 1中编辑任何内容 不要在TAB 2中保存任何东西,因为这会在TAB 3中产生烦人的弹出窗口

我更喜欢将meld设置为一个单独的命令,如下所示:

git config --global alias.meld '!git difftool -t meld --dir-diff'

这使得它类似于git-meld.pl脚本: https://github.com/wmanley/git-meld

然后你就可以跑了

git meld

对于Windows 10,我必须把这个放在我的。gitconfig中:

[merge]
  tool = meld
[mergetool "meld"]
  cmd = 'C:/Program Files (x86)/Meld/Meld.exe' $LOCAL $BASE $REMOTE --output=$MERGED
[mergetool]
  prompt = false

你需要知道的其他一切都写在上面的mattst的精彩回答中。

PS:由于某些原因,这只适用于Meld 3.18。x,而一些Meld 3.20。X版本给我一个错误。它应该与TomasMolina在下面的评论中提到的Meld 3.20.4一起工作。

我使用meld遵循这个简单的设置。Meld是免费的开源差异工具。对于任何代码更改,您将看到文件和目录的比较。

使用yum/apt在Linux中安装meld。 在~/中添加以下行。gitconfig文件

(diff) 工具= meld

转到代码repo并输入以下命令查看上次提交的更改与当前工作目录之间的差异(未分阶段未提交的更改)

我的小道消息

要查看上次提交的代码和阶段性代码之间的差异,请使用以下命令

Git difftool——cached——dir-diff ./

这是一个主要针对使用Windows的开发人员的答案 diff工具的路径语法不同于其他平台。

我使用Kdiff3作为git的合并工具,但设置git的difftool为Meld,我 首先从Meldmerge.org安装最新版本的Meld 然后添加以下到我的全局.gitconfig使用:

git config --global -e

注意,如果你想要Sublime Text 3而不是默认的Vim作为核心编辑器,你可以 添加到.gitconfig文件中:

[core]
editor = 'c:/Program Files/Sublime Text 3/sublime_text.exe'

然后添加inn Meld作为difftool

[diff]
tool = meld
guitool = meld 

[difftool "meld"]
cmd = \"C:/Program Files (x86)/Meld/Meld.exe\" \"$LOCAL\" \"$REMOTE\" --label \"DIFF 
(ORIGINAL MY)\"
prompt = false
path = C:\\Program Files (x86)\\Meld\\Meld.exe

注意上面cmd中的斜杠,在Windows上这是必要的。

也可以用——dir-diff设置一个别名来显示当前git的差异 选择。这将列出在Meld中更改的文件,当您更改了多个文件时(确实是一个非常常见的场景),这很方便。

别名在.gitconfig文件中,在[alias]部分下面:

showchanges = difftool --dir-diff

为了显示我对代码所做的更改,我只需输入以下命令:

git showchanges

下图显示了——dir-diff选项如何显示已更改文件的列表(示例):

然后,可以单击每个文件并显示Meld内部的更改。