18

有没有人让 Meld 在 Windows 上使用 Git?我正在努力让它发挥作用,但我没有成功。

我已经安装了 Meld,当我从命令行使用两个文件作为参数调用它时,它会很好地区分它们,因此正确安装了 Meld。但是我不能让它与 Git (Git Diff) 一起工作。我使用git version 1.8.1.msysgit.1Git 版本。

我尝试了几件事:我创建了一个 shell 脚本meld.sh

#!/bin/bash
meld.exe "$2" "$5"
echo $2
echo $5

并从 Git 中使用它:

[diff]
    tool = meld

[difftool "meld"]
    cmd = \"D:\\meld.sh\"

我尝试将其添加为 difftool,如下所示:

[diff]
    tool = meld

[difftool "meld"]
    cmd = \"C:\\Program Files (x86)\\Meld\\meld\\meld.exe\" 

或像这样:

[diff]
    tool = meld

[difftool "meld"]
    cmd = '\"/c/Program Files (x86)/Meld/meld/meld.exe\" $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED'

但它似乎真的不起作用。我还尝试从我的 shell 脚本中回显第二个($2)和第五个($5)参数并且没有输出。我还尝试以多种方式使用批处理脚本:

meld.exe %2 %5

或者

meld.exe %~2 %~5

但这确实行不通......Git当差异到 Meld 时,如何传递文件使用的两个版本?这很烦人...

4

5 回答 5

25

通常,您可以在 Windows 上找到类似于此 gist的示例,其中 meld.exe 在您的PATH) 中:

git config --global merge.tool meld
git config --global mergetool.meld.cmd 'meld.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'

git config --global diff.tool meld
git config --global difftool.meld.cmd 'meld.exe \"$LOCAL\" \"$REMOTE\"'

您可以在“ Git mergetool with Meld on Windows ”中找到更强大的设置,但想法保持不变。


OP在评论中报告:

对于difftool,您的命令将以下配置写入.gitconfig

[diff]
  tool = meld
[difftool "meld"]
  cmd = meld.exe \\\"$LOCAL\\\" \\\"$REMOTE\\\"

我将它们更改为:

[diff]
  tool = meld
[difftool "meld"]
  cmd = meld.exe $LOCAL $REMOTE

一切正常。

于 2013-12-05T13:27:30.340 回答
6

或者更好的是,如果你在一个锁定的系统上,不允许对路径进行欺骗,或者你只是不想污染你的路径空间,你可以把完整的路径放入 Meld。

我也更喜欢我当前的工作代码副本显示在左侧,所以我交换了 $REMOTE 和 $LOCAL 参数。还要注意 \ 到 / 的转换,不要让 get 转义双引号。

[diff]
    tool = meld
[difftool "meld"]
    cmd = \"C:/Program Files (x86)/Meld/meld/meld.exe\" $REMOTE $LOCAL
于 2014-07-24T20:27:33.683 回答
5

对于 Windows 7(甚至其他版本的 Windows),在.gitconfig文件中添加这些行。

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

"请注意,即使路径包含空格,也无需使用。请记住使用正斜杠而不是反斜杠。

于 2017-01-02T07:28:57.737 回答
1

我尝试了几种尝试设置路径的变体,但均git config无济于事。因为我想从 Git Bash 控制台窗口使用 Meld,所以起作用的是将路径导出到 Meld 目录,重新启动 Bash shell,然后你瞧git difftool --tool-helpgit mergetool --tool-help现在可以识别 Meld,我可以选择它作为我的首选工具。

。轮廓

export PATH=/c/Program\ Files\ \(x86\)/Meld/:$PATH

.gitconfig

[merge]
    tool = meld
[diff]
    tool = meld
于 2017-09-01T14:59:32.303 回答
1

用户从 gitk 调用 diff 的另一个提示(通过右键单击上下文菜单项“External Diff”):

上面的设置可能会被 gitk 的偏好覆盖。在这种情况下,更改 gitk 菜单中的工具EditPreferencesGeneralExternal diff setting。

于 2018-03-02T00:27:31.417 回答