使用 Python3 将 meld 设置为 git mergetool

Plo*_*log 7 python git meld git-merge python-3.x

我试过将 meld 设置为我的合并工具以与 git 一起使用:

git config --global merge.tool meld
git config --global mergetool.meld.path c:/Progra~2/meld/bin/meld
Run Code Online (Sandbox Code Playgroud)

如对以下问题的回答所述:

如何将 Meld 设置为 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: 错误解释器: 否这样的文件或目录

任何想法我需要采取哪些额外步骤才能使其与 Python3 一起使用?

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

在此处输入图片说明

Mad*_*ist 7

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

git config mergetool.meld.path "C:/Program Files (x86)/Meld/Meld.exe"
Run Code Online (Sandbox Code Playgroud)

Progra~2除非出于某种原因您真的想使用符号,否则您不需要使用符号。

我遇到的唯一问题是它没有正确选择C:/Program Files (x86)/Meld/lib. 您需要使用或通过控制面板/开始菜单中某处的“为您的帐户编辑环境变量”添加C:/Program Files (x86)/Meld/lib到您的PATH环境变量中SET PATH=C:/Program Files (x86)/Meld/lib;%PATH%

替代方法

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

第一行meld写着:

#!C:/msys64/MINGW32/bin/python3.exe
Run Code Online (Sandbox Code Playgroud)

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

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

#!C:/Users/MadPhysicist/AppData/Local/Continuum/anaconda3/python.exe
Run Code Online (Sandbox Code Playgroud)

这仍然不足以让脚本找到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')]
Run Code Online (Sandbox Code Playgroud)

我无法在第一行中正确设置 Cairo、GTK 等meld。但是,您可以跳过第一行,直接使用 conda 或 pip 安装软件包。您仍然需要将 meld 包插入到sys.path.

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