使用Python3将Meld设置为Git合并工具

7

我尝试将meld设置为我的git mergetool,方法如下:

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

如同在以下问题的答案中所概述的:

如何将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: bad interpreter: No such file or directory

有什么想法能够使它与Python3一起工作需要采取哪些额外步骤呢?

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

enter image description here


发现错误:https://dev59.com/cGgu5IYBdhLWcg3wBym1。不是重复,只是一个提示。 - Mad Physicist
这是链接:https://gitlab.gnome.org/GNOME/meld/issues/376。根据我的回答,我认为这是一个合理的报告。 - Mad Physicist
看起来问题已经在新版本中得到了修复(不是由我修复的)。 - Mad Physicist
1个回答

8
.../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% 或通过控制面板/开始菜单中的“编辑帐户的环境变量”来实现。

另一种方法

如果你在文本编辑器中打开 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')]

我曾尝试多次使用第一行命令来正确地安装 Cairo、GTK 等组件,但都未能成功为 meld 进行设置。但你可以跳过第一行,直接使用 conda 或 pip 安装这些软件包。不过你仍需要将 meld 包插入到 sys.path 中。

请注意,meld 编译成 32 位版本,如安装文件夹中的 x86 所示。如果你想要使用包含的 DLL 文件运行它,就只能使用 32 位 Python 解释器,并且可能还需要进行额外的安装。如果你的环境已经包含了所有必要的软件包,则不需要使用 32 位解释器。


非常感谢您的帮助!这让我向前迈进了一步。现在出现了以下错误:'File "c:/Progra~2/meld/bin/meld", line 79, in <module> import meld.conf # noqa: E402 ModuleNotFoundError: No module named 'meld'' - Plog
刚看到你的编辑。我最初确实尝试过那个方法,但由于出现了错误,我认为它不起作用。我已将其添加到我的原始问题中。 - Plog
@Plog。我已经成功显示了Meld。结果是因为路径问题有些奇怪,不确定为什么会发生这种情况。最有可能的是,在你的Python 2.7环境中安装了PyGtk、PyCairo、PyGObject等库。 - Mad Physicist
@Plog。我现在不会选择这个选项。我将查看meld.exe的源代码,因为我认为它应该只是设置脚本环境。也许可以通过这个提出一个PR,或者至少提交一个错误报告。 - Mad Physicist
哦,实际上我在那个你在错误报告中添加的简单复制案例上尝试过了,它可以工作,但是在我主要工作的代码库上仍然出现相同的错误,这非常奇怪... - Plog
显示剩余2条评论

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