如何在Windows上使用Meld作为Sourcetree的合并工具?

44

我在我的.gitconfig文件中有以下内容:

[user]
    name = myname
    email = myname@gmail.com
[core]
    autocrlf = true
    excludesfile = C:\\Users\\myname\\Documents\\gitignore_global.txt
[diff]
        tool = meld
[difftool "meld"]
        cmd = "C:/Program Files (x86)/Meld/meld/meld.exe"
        prompt = false
[merge]
        tool = meld

[mergetool "meld"]
        cmd = "C:/Program Files (x86)/Meld/meld/meld.exe"
[difftool "sourcetree"]
    cmd = "C:/Program Files (x86)/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE"
[mergetool "sourcetree"]
    cmd = 'C:/Program Files (x86)/Meld/meld/meld.exe' \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
    trustExitCode = true

在 Sourcetree 中,我的设置如下:

输入图像描述

然而,当我在 Sourcetree 上右键单击文件以进行外部 diff 时,我能够打开 Meld,但是文件的内容根本没有显示出来。

输入图像描述

我的设置做错了什么?

5个回答

48

我觉得现有的答案略微偏离了重点。这是我的个人见解:

输入图片说明

参数详细信息:

Diff:  $LOCAL $REMOTE
Merge: $LOCAL $BASE $REMOTE --auto-merge --output=$MERGED

对于 External Diff, 你需要从参数列表中删除 $BASE。

对于三路合并,你需要点击 External Merge Tool 选项,该选项仅在存在未解决的冲突时才可用。

External Merge Tool 的上下文菜单

如果你不受限于 Sourcetree + Meld,我认为 Git Extensions + KDiff3 套装也是一个很好的开源替代品。


顺便提一下,根据其他人的说法,Meld的“三方比较”并不是真正的三方合并,因为三方合并需要四个窗口:基础、本地、远程、合并。 - Paris Qian Sen
6
你应该将这些参数粘贴到你的回答中。不清楚后面的例子是否有更多的参数,比如: $LOCAL $BASE $REMOTE --auto-merge --output=$MERGED - Jonathan
那么,参数应该是屏幕截图中的还是文本中的? - Andrew
@Andrew 文本中的那个更加详细。 - Paris Qian Sen

24

为了实现真正的三方合并,只读取THEIRS和MINE选项卡,此处需要使用以下实际设置:

$LOCAL $BASE $REMOTE --auto-merge --output=$MERGED

注意在--output后面有=符号。

我通过查看Git合并使用Meld问题的第二个答案中的评论,最终成功运行了这个命令。


19

对于OS X,它看起来是这样的:

  • Diff命令:/Applications/Meld.app/Contents/MacOS/meld

    • 参数:$LOCAL $REMOTE
  • Merge命令:/Applications/Meld.app/Contents/MacOS/meld

    • 参数:$LOCAL $BASE $REMOTE --auto-merge --output=$MERGED

P.S. 您可能还需要在meld首选项中配置$local和$remote的顺序。

要从命令行使用它,您必须通过brew安装它: brew install meld

Sourcetree preferences pane


5
使用从 [https://github.com/yousseb/meld/releases/] 下载的预构建 Meld 应用程序。我需要将 Diff 命令设置为: /Applications/Meld.app/Contents/MacOS/meld - SteveS
1
对我来说,它不能直接使用。需要使用$LOCAL $REMOTE作为diff参数。 - robertdavid
1
我必须执行 brew tap homebrew/cask,然后执行 brew cask install meld 才能在OSX上安装它。现在正在测试,谢谢! - facundofarias
你为什么使用@LOCAL@REMOTE?难道不应该是$LOCAL$REMOTE吗? - 7wp
如果通过brew安装,我使用的diff和merge命令是:/usr/local/bin/meld,在我的OSX上可以工作。 - jack jin

2

2

如果您不想修改PATH环境变量,您可以使用DOS兼容的短名称:

C:\Progra~1 = C:\Program Files
C:\Progra~2 = C:\Program Files (x86)

这样可以避免路径中的空格问题,并且与Sourcetree兼容。虽然有些粗糙,但它能够正常工作。您可以使用类似以下的路径来访问Meld:

C:\Progra~1\Meld\meld.exe

不能保证 Progra~1 映射到 64 位目录,因此您可能需要尝试哪个映射到哪个。


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