将 meld 设置为 git mergetool with Python3

Setting meld as git mergetool with Python3

我尝试将 meld 设置为我的 mergetool 以与 git 一起使用:

git config --global merge.tool meld
git config --global mergetool.meld.path c:/Progra~2/meld/bin/meld

如以下问题的答案所述:

How to set Meld as git mergetool

我曾经在我的旧工作机器上使用它,但现在在我安装了 Python3 而不是 2.7 的新机器上,每当我尝试 git mergetool 时,我都会收到以下错误:

C:/Program Files/Git/mingw64/libexec/git-core/mergetools/meld: c:/Progra~2/Meld/bin/meld: C:/msys64/MINGW32/bin/python3.exe: bad interpreter: No such file or directory

知道我需要执行哪些额外步骤才能使其与 Python3 一起使用吗?

编辑:我也尝试过直接指向 Meld.exe,但这会导致以下崩溃:

.../bin/meld 脚本主要供参考。你应该设置

git config mergetool.meld.path "C:/Program Files (x86)/Meld/Meld.exe"

您不需要使用 Progra~2 表示法,除非出于某种原因您确实需要。

我遇到的唯一问题是它没有正确获取 C:/Program Files (x86)/Meld/lib 中已安装的依赖项扩展。您需要将 C:/Program Files (x86)/Meld/lib 添加到您的 PATH 环境变量,或者使用 SET PATH=C:/Program Files (x86)/Meld/lib;%PATH%,或者通过 "Edit Environment Variables for your account" 某处控制 panel/start 菜单。

替代方法

如果您在文本编辑器中打开 C:\Program Files (x86)\Meld\bin\meld,您会看到它是一个 shell 脚本,旨在 python3 中 运行(从C:\Program Files\Git\bin\sh.exe 最有可能)。

meld的第一行是:

#!C:/msys64/MINGW32/bin/python3.exe

使用 Meld.exe 时不会弹出此问题,因为它不通过 python 解释器使用脚本。

python 解释器不太可能安装在您机器上的那个位置。相反,您可以替换 shebang 行以指向现有的解释器。例如,在我的机器上,meld 以:

开头
#!C:/Users/MadPhysicist/AppData/Local/Continuum/anaconda3/python.exe

这仍然不足以让脚本找到 meld 包和所有已安装的 GTK、cairo 等 DLL,因此您必须同时调整 python 和系统路径。在 import meld # noqua: E402 行(~78 行)之前插入以下内容:

os.environ['PATH'] = os.pathsep.join((melddir, os.path.join(melddir, 'lib'), os.environ['PATH']))
sys.path[0:0] = [os.path.join(melddir, 'lib/python3.7/site-packages')]

我无法获得为 meld 正确设置 Cairo、GTK 等的第一行。但是,您可以跳过第一行,只使用 conda 或 pip 安装包。您仍然需要将 meld 包插入 sys.path.

请记住,meld 是在 32 位中编译的,安装文件夹中的 x86 就是证明。如果您使用包含的 DLL,则只能 运行 使用 32 位 python 解释器,这可能需要额外安装。如果您的环境已经包含所有必需的包,则不需要 32 位解释器。