在Windows上使用Git Diff和Meld

19

有人曾经在Windows上让Meld与Git一起工作吗? 我正在尝试让它工作,但没有成功。

我已经安装了Meld,并且当我使用两个文件作为参数从命令行调用它时,它能很好地进行差异比较,因此Meld已正确安装。 但是我无法让它与Git(Git Diff)一起工作。 我使用版本git version 1.8.1.msysgit.1的Git。

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

#!/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)参数,但没有输出。我也尝试过以几种方式使用批处理脚本:

But it really does not seem to work. I also tried to echo the second($2) and fifth($5) parameter from my shell script and no output. I also tried using a batch script in several ways:

meld.exe %2 %5
或者
meld.exe %~2 %~5

但它真的不起作用...我该如何将Git在比较时使用的两个版本文件传递给Meld呢?这相当令人烦恼...

5个回答

27

通常,你可以在Windows上找到一个类似于这个代码片段的例子,其中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\"'

您可以在"在Windows上使用Meld的Git合并工具"中找到更强大的设置,但思路保持不变。


评论中的OP报告:

对于difftool,您的命令会在.gitconfig中编写以下配置:

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

我将它们改为:

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

一切都正常运作。


1
我尝试了你的方法,但它并不能正常工作。这是它的样子:http://i.imgur.com/KIaVb04.png。如果你在理解路径方面有任何问题,请让我知道,我隐藏了用户名和文件名的一部分。 - Jacob Krieg
成功让 difftool 工作了。虽然还没有尝试过 mergetool,但它们应该是一样的。对于 difftool,您的命令将以下配置写入 .gitconfig 文件中:[diff] tool = meld [difftool "meld"] cmd = meld.exe \\\"$LOCAL\\\" \\\"$REMOTE\\\"我将它们更改为:[diff] tool = meld [difftool "meld"] cmd = meld.exe $LOCAL $REMOTE一切都正常工作了。稍后我会尝试 mergetool,但我会接受您的评论 :) 谢谢! - Jacob Krieg
1
@JasonSwartz 很好。我已经将您的评论包含在答案中以增加可见性。 - VonC
我尝试使用meld作为合并工具,并且我使用了与difftool相同的参数:cmd = meld.exe $LOCAL $REMOTE,它运行得非常好。否则,可能会因为参数而崩溃。 再次感谢! - Jacob Krieg
[difftool "meld"] tool = meld cmd = "D:\software\melddiff\Meld.exe" $LOCAL $REMOT " 我的win7上是这样的,但我遇到了一个错误:/usr/libexec/git-core/git-mergetool--lib:行124: D:\software\melddiff\Meld.exe:找不到命令" - Allen Vork
显示剩余3条评论

7

甚至更好的是,如果您使用的是受限制的系统,无法更改路径或者您不想污染您的路径空间,您只需输入Meld的完整路径。

我还喜欢在左侧显示我的当前工作代码副本,因此我交换了$REMOTE和$LOCAL参数。同时要注意将\转换为/,并且不要忘记转义双引号。

[diff]
    tool = meld
[difftool "meld"]
    cmd = \"C:/Program Files (x86)/Meld/meld/meld.exe\" $REMOTE $LOCAL

6

对于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

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

它可以在Windows Server 2012 R2上直接使用。找到的最简单的解决方案。 - pperejon
无法在Windows 10上使用最新版本的Git和Meld。 - navjotjsingh
干净的解决方案适用于diff和merge,谢谢!根据我的经验和所有其他答案发布在这里的评论:Meld的默认路径似乎更应该是C:/Program Files (x86)/Meld/meld.exe。我将在答案中提出修改建议。 - Pierre Gramme
对于Meld版本3.20.3,默认的安装路径为C:/Users/UserName/AppData/Local/Programs/Meld/Meld.exe,因此路径应为path = C:/Users/UserName/AppData/Local/Programs/Meld/Meld.exe - kohane15

2
我尝试了几种设置路径的方法,使用git config命令都无法成功。由于我想要在Git Bash控制台窗口中使用Meld,所以有效的方法是将路径导出到Meld目录,重新启动Bash shell后,git difftool --tool-helpgit mergetool --tool-help现在可以识别Meld,并且我可以选择它作为我的首选工具。 .profile
export PATH=/c/Program\ Files\ \(x86\)/Meld/:$PATH

.gitconfig

[merge]
    tool = meld
[diff]
    tool = meld

1
< p>对于从gitk调用diff的用户(通过右键单击上下文菜单项"External Diff"),另一个提示:

上述设置可能会被gitk的首选项覆盖。在这种情况下,请更改gitk菜单编辑首选项常规外部diff设置。


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