虽然这个问题和答案中的大部分信息都可以在StackOverflow上找到,但它分散在很多页面上,并且在其他错误或误导的答案中。我花了一段时间才把我想知道的一切拼凑起来。
有很多不同的程序可以用作git的difftool和mergetool,当然,对于哪个是最好的并没有共识(意见、需求和操作系统显然会有所不同)。
Meld是一个流行的免费,开源,跨平台(UNIX/Linux, OSX, Windows)的选择,如StackOverflow的问题所示,什么是最好的可视化合并工具Git?,其中提议Meld的答案获得的票数是其他选项的3倍多。
下面我将回答以下2个问题:
我如何设置和使用Meld作为我的git difftool?
我如何设置和使用Meld作为我的git合并工具?
注意:没有必要使用相同的程序作为你的difftool和mergetool,可以为两者设置不同的程序。
对于Windows。在Git Bash中运行这些命令:
git config --global diff.tool meld
git config --global difftool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global difftool.prompt false
git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global mergetool.prompt false
(如果你的Meld.exe文件路径不同,请更新。)
对于Linux。在Git Bash中运行这些命令:
git config --global diff.tool meld
git config --global difftool.meld.path "/usr/bin/meld"
git config --global difftool.prompt false
git config --global merge.tool meld
git config --global mergetool.meld.path "/usr/bin/meld"
git config --global mergetool.prompt false
你可以使用下面的命令来验证Meld的路径:
which meld
从$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中产生烦人的弹出窗口
对于Windows。在Git Bash中运行这些命令:
git config --global diff.tool meld
git config --global difftool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global difftool.prompt false
git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global mergetool.prompt false
(如果你的Meld.exe文件路径不同,请更新。)
对于Linux。在Git Bash中运行这些命令:
git config --global diff.tool meld
git config --global difftool.meld.path "/usr/bin/meld"
git config --global difftool.prompt false
git config --global merge.tool meld
git config --global mergetool.meld.path "/usr/bin/meld"
git config --global mergetool.prompt false
你可以使用下面的命令来验证Meld的路径:
which meld