Windows上具有Meld的Git mergetool


93

在Linux中,我最喜欢的合并工具是Meld,并且使用或配置它与Git配合使用时都没有问题。但是,在Windows中则完全不同。

首先,我通过在以下位置找到的捆绑包安装了Meld:https//code.google.com/p/meld-installer/

然后,我像这样配置.gitconfig以支持Meld作为默认的mergetool

[merge]                                                      
    tool = meld                                                                         

[mergetool "meld"]                                           
    path = C:\\Program Files (x86)\\Meld\\meld\\meld.exe
    keepBackup = false                                   
    trustExitCode = false

因此,当我有冲突时,我使用git difftool,而Meld实际上打开了。但是,Git写入传递给差异工具的文件的路径不正确。例如,即使Git在存储库目录(我叫git mergetool的位置)中生成BASE,LOCAL和REMOTE文件,Meld也会尝试打开可执行文件目录中的每个文件。

Meld不会打开C:\ repo \ roses.txt.LOCAL.2760.txt,而是尝试打开C:\ Program Files(x86)\ Meld \ meld \ roses.txt.LOCAL.2760.txt。

有没有人遇到过这个问题或知道如何配置Git / Meld在Windows中正常工作?


我不知道这是否有任何尝试之处,但是我使用KDiff3,并且在gitconfig中设置的路径是:path = C:/ Program Files(x86)/KDiff3/kdiff3.exe而不是C:\\等
Fumler 2013年

1
你能解决这个问题吗?
罗杰(Roger)

1
我没能。答案之一可能是正确的,但由于我实际上无法让Meld表现正常,因此我犹豫不决:-/
Nelson

@Nelson别担心,我也不能:(
abergmeier

请发表评论并对上游问题进行投票,以便将来的用户甚至无需担心。
富兰克林于

Answers:


151

为什么不为Windows使用git bash?

简单地安装融合后:

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe" <- path to meld here

就这样!


这个解决方案对我有用,我也做了下面的命令,每次打开工具时都不提示我git config --global mergetool.prompt false
Vineel Kovvuri 2015年

1
这个解决方案在Meld 3.16.2上对我有用,还添加了git config --global mergetool.keepBackup false来删除那些讨厌的备份。
杰(Jay)

2
由于某种原因,在应用此解决方案后,所有内容都显示为红色(已更改),我必须这样做:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
ihadanny

7
通过此解决方案,我得到了Cannot import: GTK+DLL load failed
Juergen

4
@Juergen答案是路径不匹配。如果你要复制libgirepository-1.0-1.dll这是你的lib目录下一级目录(也就是同一个目录Meld.exe),并开始,你会发现事情工作,
demongolem

26

Schuess,请注意目录中的空格字符!

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

1
在我看来,这些编辑已破坏了解决方案。原始修订版适合我,因此+1。我确实发现它似乎没有路径限制就可以工作。
vossad01 2014年

当我cmd不使用path和使用反引号而不是单引号,单引号而不是斜杠双引号时,这对我有用。
sq33G '18

使用Win10 1903和WSL,我尝试了一堆这些配置方法,而git无法调用meld。我结束了符号链接Program_Files_x86 -> 'Program Files (x86)/'并使用了[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag

10

我遇到了完全相同的问题,发现我必须以蛮力方式使它正常工作。这是我放入.gitconfig文件的内容。(请注意,我的可执行文件位于其他位置)

[merge]
    tool = meld
[mergetool "meld"]
        cmd = "/c/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED"

确实,对于我来说,使用我选择的自定义安装路径对我来说效果很好。值得注意的是,大多数指南使用的“路径”与此处指定的“ cmd”之间是有区别的。
FauxFaux

我已经尝试过您和Martin的解决方案,但都没有用。我认为还有其他情况。将打开一个窗口,然后立即关闭,然后Meld打开,其路径指向Meld的安装目录而不是存储库。传递给Meld的arg会导致它死亡,然后检测到问题并使用默认路径重新启动吗?我在这里把握住了,但不确定如何解决这个问题……
Nelson

您确定使用的是meld.exe,而不是(我认为)bin文件夹中的meld文件。我记得有个问题,我只使用了Meld文件,它在git有机会将文件放入临时文件夹之前启动了应用程序。
schuess

我使用了您的解决方案,但是使用了meld目录中的bin文件(实际上是将文件重命名为meld.py),并且工作正常。
加勒特

7

视窗:

您可以使用以下两个命令(如Arugin所述)-使用通往Meld.exe的正确路径:

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"

或者,您可以直接编辑C:\Users\YOUR_USER_NAME\.gitconfig文件并将以下内容添加到文件末尾:

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

现在,调用git difftoolWindows的Git Bash,Meld将作为默认的difftool查看器打开。


Linux:

2019年9月20日更新:
-如果没有其他问题,我也可以将Linux版本也放在这里供我自己参考:

对于Linux,这也非常容易:

sudo apt update
sudo apt install meld
gedit ~/.gitconfig  # edit your ~/.gitconfig file (gedit GUI editor will open)

然后添加到.gitconfig文件的底部:

[diff]
    tool = meld

而已!git difftool现在可以在Linux Ubuntu上使用!

有关:

  1. 从此处下载并安装Meld:https//meldmerge.org/
  2. 如何使Git使用我选择的编辑器进行提交?
  3. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

4

我在此页面上的融合安装程序的错误报告中找到了解决方案:

https://code.google.com/p/meld-installer/issues/detail?id=11

据我了解,问题在于meld.exe程序(通过python解释器运行meld)不必要地将命令的工作目录设置为meld.exe的工作目录。当作为命令行参数传递时,这会导致相对路径被错误地解释。

解决方案是使用AHK2EXe(AutoHotKey脚本-> exe),用编译meld.ahk文件生成的文件替换掉所提供的meld.exe。只需下载页面最下方的脚本,因为那里已经发布了一些版本。


3
未设置问题跟踪器来自动将问题分配给我,因此我错过了评论。对于以后会发现此问题的Google员工;这个问题已被解决。
Keegan

4

我也遇到过类似的问题,使用的操作系统是Windows 10,以下更改对我有效,似乎更像是路径问题

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

3

由于某些原因,在Windows 10中,无法在安装过程中正确设置PATH环境变量,因此引发了一个奇怪的异常,即它无法找到“ C:\ Program Files(x86)/合并/ bin”目录。

对我来说,一种解决方法是在git bash中执行:

export PATH=$PATH:"/C/Program Files (x86)/Meld/lib" 

或添加到Windows PATH

C:\Program Files (x86)/Meld/bin

2

没有答案对我有用。我最终在.gitconfig文件中找到了这个:

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

git merge mybranch冲突结束之后,您只需键入git mergetool并打开即可。保存后,您必须提交git并解决冲突。

由于某些原因,这仅适用于Meld 3.18.x,而Meld 3.20.x给我一个错误。


0

在尝试了上述所有方法之后,将Meld设置为以管理员身份运行对我来说很有效。

  1. 右键单击Meld.exe
  2. 转到属性 > 兼容性,然后选中Run this program as an administrator复选框

我收到的错误引用了c:\windows\temp\meld-*未创建的临时文件,如。提升Meld的权限似乎可以解决问题,因为它现在可以同时git difftool在两者之间运行并在Meld中手动运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.