34

我的.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,但根本没有显示文件的内容。

在此处输入图像描述

我在设置中做错了什么?

4

5 回答 5

37

我觉得现有的答案略微偏离了重点。这是我自己的狗粮:

在此处输入图像描述

参数详细信息:

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

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

对于 3 路合并,您需要改为单击该External Merge Tool选项,该选项仅在存在任何未解决的冲突时可用。

外部合并工具的上下文菜单

如果您不限于Sourcetree + Meld,我认为Git Extensions + KDiff3套件也可能是一个很好的开源替代方案。

于 2016-05-25T09:22:15.070 回答
23

为了实现真正的 3 路合并,此处使用的实际设置是只读的 THEIRS 和 MINE 选项卡:

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

注意=后面--output

通过挖掘对这个问题Git merging using Meld的第二个答案的评论,我终于得到了这个命令。

于 2016-03-10T09:27:18.997 回答
15

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

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

    • 论据:$LOCAL $REMOTE
  • 合并命令:/Applications/Meld.app/Contents/MacOS/meld.

    • 论据:$LOCAL $BASE $REMOTE --auto-merge --output=$MERGED

PS您可能还必须在融合偏好中配置 $local 和 $ remote 的顺序..

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

Sourcetree 首选项窗格

于 2016-10-04T08:59:08.667 回答
2

尝试将 meld.exe 的位置添加到您的 PATH(例如 C:\Program Files (x86)\Meld),然后在Diff Command中输入 meld 而不是完整路径。请参阅要点How to use meld with Sourcetree on Windows

于 2015-04-27T16:18:51.667 回答
2

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

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

这避免了路径中引起麻烦的空格,并且与 Sourcetree 配合得很好。这是hackish,但它有效。然后你可以使用这样的东西作为 Meld 的路径:

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

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

于 2015-05-21T19:53:52.223 回答