Git mergetool与Meld在Windows上

在Linux中,我最喜欢的合并工具是Meld,我没有任何问题使用或configuration它来使用Git。 但是,在Windows中,这是一个不同的故事。

首先,我从我在这里find的一个包中安装了Meld: https : //code.google.com/p/meld-installer/

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

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

所以,当我发生冲突的时候,我会做混乱的事情,事实上,Meld确实是开放的。 但是,Git写入传递给diff工具的文件的path不正确。 例如,即使Git在存储库目录(我称之为git mergetool的位置)中生成BASE,LOCAL和REMOTE文件,Meld也会尝试打开可执行文件目录中的每个文件。

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

有没有人遇到这之前,或知道如何configurationGit / Meld在Windows中正常工作?

为什么你不使用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 

就这样!

Schuess,小心目录中的空格字符!

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

我有完全相同的问题,发现我不得不暴力强迫我的方式来实现它的工作。 这是我放在我的.gitconfig文件。 (注意我的meld可执行文件位于不同的位置)

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

我在这个页面上find了一个关于meld安装程序的bug报告的解决scheme:

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

据我所知,问题是meld.exe程序(通过python解释器运行meld)不必要地将命令的工作目录设置为meld.exe的工作目录。 这会导致相对path在作为命令行parameter passing时被错误地解释。

解决方法是使用AHK2EXe(AutoHotKey脚本 – > exe)replace提供的meld.exe与编译meld.ahk文件生成的meld.exe。 只需下载页面最下方的脚本,因为那里已经发布了几个版本。

我也面临类似的问题。使用的操作系统是Windows 10,以下更改为我工作。它似乎更像path问题

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

尝试所有上述之后,设置Meld以pipe理员身份运行为我工作。

  1. 用鼠标右键单击Meld.exe
  2. 转到属性 > 兼容性,然后selectRun this program as an administratorcheckbox

我收到的错误引用临时文件,如c:\windows\temp\meld-* ,这是不是正在创build。 提升Meld的权限似乎可以解决这个问题,因为它现在可以和两个git difftool一起工作,并在Meld中手动运行。