1.问题解释
我需要在Windows 10上运行merge
工具(GNU RCS项目的一部分-版本控制系统)。这些是要求:
merge.exe
必须在 native Windows cmd终端中运行。 PATH
env变量。 这将使我们无法解释这些要求为何如此重要。拜托,只要按原样使用它们即可。
2.第一次试用:运行msys可执行文件
我在
C:/msys64
中安装了MSYS2,并在以下位置找到了可执行文件:C:/msys64/usr/bin/merge.exe
。因此,有时间尝试STEP1〜STEP3。步骤1
如果将
C:/msys64/usr/bin/
添加到PATH
env变量,则可以使其在 native Windows终端中工作:C:/Users/Kristof>merge.exe a.txt b.txt c.txt
哈利!步骤2
不幸的是,当我不修改
PATH
env变量并通过其完整路径调用merge.exe
时,事情就出错了:C:/Users/Kristof>"C:/msys64/usr/bin/merge.exe" a.txt b.txt c.txt
/usr/bin/diff3: subsidiary program 'diff' not found
我不明白为什么会出现此错误。毕竟,可执行文件diff3.exe
和diff.exe
都位于merge.exe
旁边。为什么找不到它们?步骤3
好吧,如果我不能先进行上一步,那么STEP3显然是无用的。
3.其他审判
3.1 Purdue二进制文件
您可以在此处找到RCS的二进制文件:
https://www.cs.purdue.edu/homes/trinkle/RCShome/
我从该网站下载了 rcs57pc1.zip (1.2MB)。不幸的是,每次尝试运行
merge.exe
都会失败,并显示以下错误消息:diff3.exe: subsidiary program failed
我尝试了此StackOverflow帖子中提供的解决方案,但它们也不起作用:RCS on Windows - rcsmerge always fails
3.2 ezwinports
我从以下位置下载了 rcs-5.7-1.zip :
https://sourceforge.net/projects/ezwinports/files/
运行其
merge.exe
文件时,出现以下错误:diff3.exe: Unknown signal 0xEEEEEEEE
merge aborted
确实,我在解压缩的文件夹中看不到diff3.exe
工具。因此,我将MSYS安装中的diff3.exe
和diff.exe
(位于C:/msys64/usr/bin/
处)复制到了未压缩的rcs-5.7-1
文件夹中。没有成功同样的错误信息。3.3 GnuWin32
GnuWin32项目以流行工具的许多Linux到Windows转换而闻名。我下载了GnuWin32(http://gnuwin32.sourceforge.net/)并完整安装到
C:/gnuwin32/
中。我搜索了C:/gnuwin32/
文件夹,但在任何地方都找不到merge.exe
工具。这很奇怪,因为在这里明确提到GNU RCS项目是GnuWin32项目的一个包:http://gnuwin32.sourceforge.net/packages/rcs.htm
最佳答案
解决方案是直接使用diff3.exe
而不是merge.exe
:
您可以将diff3.exe
放在任意目录中,只要您不要忘记复制以下dll:
msys-2.0.dll
msys-iconv-2.dll
msys-intl-8.dll
这是使用可执行文件的方法:
>diff3 -m myfile.txt ancestor.txt yourfile.txt
不幸的是,仍然需要将文件夹添加到PATH
env变量。但是,实际的使用目标是从Python调用可执行文件,因此可以通过以下方式完成:my_env = os.environ.copy()
my_env["PATH"] = "C:/merge/windows/;" + my_env["PATH"]
proc = subprocess.Popen(
[
merge_tool,
"-m",
myfile_path,
ancestor_path,
yourfile_path,
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=my_env,
)
try:
outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
proc.kill()
outs, errs = proc.communicate()
return None
return outs.decode('utf-8').replace('\r\n', '\n')
关于windows - 可执行的merge.exe(从MSYS2中提取)未在Windows上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63290096/