如何将 Meld 设置为 git 的合并工具

115

我已经设置了:

git config --global merge.tool meld
git config --global mergetool.meld.path c:/Progra~2/meld/bin/

在 "git mergetool" 命令中,它会写道:

Hit return to start merge resolution tool (meld):
The merge tool meld is not available as 'c:/Progra~2/meld/bin/'

我也尝试了以下路径:

  • /c/Progra~2/meld/bin/
  • "/c/Program files (x86)/meld/bin/"
  • "c:/Program files (x86)/meld/bin/"

结果相同。

当我进入 C:/Program files (x86)/meld/bin/ 并运行时:

python meld

这个工具正在运行。


请参考以下网址以了解如何使用Meld进行Git合并:https://dev59.com/O2gu5IYBdhLWcg3wt5Lt - michael
从以下链接中复制.gitconfig的部分内容: https://marcin-chwedczuk.github.io/use-meld-as-git-merge-diff-tool - csharpfolk
相关: "使用.gitconfig配置差异工具": https://dev59.com/yGw15IYBdhLWcg3wxuch#6412645 (对于meld,只需在此答案中用meld替换vimdiff即可) - Gabriel Staples
请评论并投票支持上游问题,这样未来的用户就不必担心这个问题了。 - Franklin Yu
10个回答

88

你可以使用完整的Unix路径,例如:

PATH=$PATH:/c/python26
git config --global merge.tool meld
git config --global mergetool.meld.path /c/Program files (x86)/meld/bin/meld

这是在 "如何在Windows上让git与Meld配合工作"中所描述的内容。

或者您可以采用在 "在Windows上使用Meld和Git"中所描述的封装方法。

# set up Meld as the default gui diff tool
$ git config --global  diff.guitool meld

# set the path to Meld
$ git config --global mergetool.meld.path C:/meld-1.6.0/Bin/meld.sh

有一个名为 meld.sh 的脚本:

#!/bin/env bash
C:/Python27/pythonw.exe C:/meld-1.6.0/bin/meld $@

abergmeier评论中提到

我必须要这样做:

git config --global merge.tool meld
git config --global mergetool.meld.path /c/Program files (x86)/Meld/meld/meldc.exe

注意,meldc.exe是专门为Windows控制台调用而创建的。因此,meld.exe将无法正常工作。


CenterOrbit评论中提到,对于Mac OS,需要安装homebrew,然后执行以下操作:

brew cask install meld
git config --global merge.tool meld
git config --global  diff.guitool meld

3
对我来说,我需要执行以下命令:git config --global merge.tool meld git config --global mergetool.meld.path /c/Program files (x86)/Meld/meld/meldc.exe。这些命令将设置 Git 合并工具为 Meld,并指定其路径。 - abergmeier
@abergmeier 好的,我已经将您的评论包含在答案中以增加可见性。 - VonC
@abergmeier的解决方案可行。另外,在Windows Git Bash中,如果您按tab键,它会建议路径,因此很容易得到正确的路径。 - Aswin Kumar
3
FYI,在Mac OS X上:安装Homebrew,然后执行以下命令: $ brew install homebrew/x11/meld $ git config --global merge.tool meld $ git config --global diff.guitool meld - CenterOrbit
@CenterOrbit 好的,我已经将您的评论包含在答案中以增加可见性。 - VonC
显示剩余3条评论

28

这对我在Windows 8.1和Windows 10上都有效。

git config --global mergetool.meld.path "/c/Program Files (x86)/meld/meld.exe"

8
使用PowerShell时,将git config --global mergetool.meld.path "c:\Program Files (x86)\meld\meld.exe"添加到配置中以设置全局的合并工具为Meld。 - Michael Blake
有时候,在你进行 git config(以应用更改)后,你可能需要重新启动你的 Git GUI。 - Yohanim

17

meld 3.14.0

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

请注意,这是一个被放弃的问题。我已经很长时间没有处理合并工具了,所以即使您的答案是最好的,我也无法证明并标记为答案。 - Paul
你好,我已经尝试过了,它非常好用。在我的情况下,缺少了“cmd”来正确调用meld。 - faidherbard
1
当我使用这个命令行模板时,Meld没有正确保存合并的文件。请参见https://dev59.com/LnTYa4cB1Zd3GeqPxKep#40777256获取一个可行的答案。 - Thomas W

9
安装完成后,我需要告诉Git软件Meld Merge的安装路径:http://meldmerge.org/。请注意保留HTML格式。
git config --global merge.tool meld
git config --global diff.tool meld
git config --global mergetool.meld.path “C:\Program Files (x86)\Meld\meld.exe”

看起来这样做可以奏效。使用“git difftool”或“git mergetool”进行合并和差异比较。

如果有人遇到像是启动后Meld崩溃的问题(提示Python的问题),那么你需要将Meld / lib设置为系统环境变量,如下所示: C:\Program Files (x86)\Meld\lib


6

我认为mergetool.meld.path应该直接指向meld执行文件。因此,您需要的命令是:

git config --global mergetool.meld.path c:/Progra~2/meld/bin/meld

5

这里的其他答案都没有对我起作用,可能是因为我尝试了它们所有的组合。我能够调整这个被接受的答案来与meld配合使用。现在,git 1.9.4、meld 3.14.0和windows 8.1都可以正常工作。

编辑~/.gitconfig文件,使其看起来像:

[diff]
    tool = meld
    guitool = meld
[mergetool "meld"]
    path = c:/Program Files (x86)/Meld/Meld.exe
[difftool "meld"]
    path = c:/Program Files (x86)/Meld/Meld.exe

3

我为了让meld在Windows上正常工作,尝试了多种不同的方法。以下是我的当前.gitconfig文件:

[merge]
    conflictstyle = diff3
    tool = meld
[mergetool "meld"]
    cmd = \"C:\\Program Files (x86)\\Meld\\Meld.exe\" --auto-merge \"$LOCAL\" \"$BASE\" \"$REMOTE\" --output \"$MERGED\"

Linux:

[merge]
    conflictstyle = diff3
    tool = meld
[mergetool "meld"]
    cmd = meld --auto-merge $LOCAL $BASE $REMOTE --output=$MERGED --diff $BASE $LOCAL --diff $BASE $REMOTE

我认为添加conflictstyle = diff3会改变内联文本,并在meld处理之前将基本内容包含在输出文件中,这可能会让它提前开始。不确定。

现在,由于我已经指出Meld支持三方合并,还有另一种选择。当设置"diff3" git冲突风格时,Meld在显示来自BASE的内容的行上打印"(??)"。来源

我真正喜欢的一些meld命令行功能:

  • --auto-merge非常擅长为您选择正确的内容(它不是万无一失的,但我认为节省的时间超过任何风险)。

  • 您可以在同一命令中添加额外的diff窗口。例如:

    --diff $BASE $LOCAL --diff $BASE $REMOTE

    将添加两个带有本地和传入修补程序差异的选项卡。这些可以很有用地分别从每个分支的基础中查看单独的差异。但我在windows上无法使其工作。

  • 一些版本的meld允许您使用--label标记选项卡。在git修复传递给meld的文件名称包括本地/基础/远程之前,这更为重要。

  • --diff的顺序可能会影响选项卡的顺序。在某些旧版本中,我遇到了问题,它们将额外的差异放在最前面,而主要的三方差异使用频率要高得多。


1
在我的C:\Users\username目录下的.gitconfig文件中添加以下行,解决了我在Windows 10上使用3.20.3版本时遇到的问题。
[user]
    name = doe
    email = doe@john.com
[core]
longpaths = true
[diff]
    tool = meld
[difftool "meld"]
    path=C:/Program Files/Meld/Meld.exe
[difftool]
    prompt = false
[merge]
    tool = meld
[mergetool "meld"]
    path=C:/Program Files/Meld/Meld.exe
[mergetool]
    prompt = false
    KeepBackup = false 

0

对于 windows,添加 meld 的路径如下:

 git config --global mergetool.meld.path C:\\Meld_run\\Meld.exe

-1

git config --global merge.tool meld git config --global mergetool.meld.path c:/Progra~2/meld/Meld/

git配置--全局合并工具meld git配置--全局合并工具路径meld c:/ Progra~2 / meld / Meld /


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接