我有一个运行在macOS Monterey(v12.5(上的电子应用程序(electron v17.4.10(,启动时它会尝试执行命令git lfs install
。它使用Node child_process包的spawn命令来调用对独立git可执行文件的直接调用。
安装电子应用程序时,它会提供自己的git版本,该版本未添加到PATH中,以防止干扰可能已经安装的任何git版本。git(v2.33.0(的独立版本具有下图所示的文件夹结构,git-lfs二进制文件(v3.2.0(包含在/PortableGit/git/libexec/git-core/
中
独立Git目录结构
执行的完整命令为:"/Applications/MyApp/Utilities/PortableGit/bin/git" lfs install
输出为:
git: 'lfs' is not a git command. See 'git --help'.
The most similar command is
log
如何在不将子命令lfs
放在PATH上的情况下,让git的独立安装程序识别它?像我所描述的那样拥有一个独立的git包是可能的吗?还是应该放弃这种方法,并确保git正确安装在目标机器上?
这个问题的答案是Electron的process.env与目标系统的env不同。因此,虽然Git将在PATH上寻找子模块,但终端中使用的PATH将与子进程使用的PATH不同。
在process.env.PATH
中添加一个":",后跟git-lfs二进制文件的存储路径,将允许独立的git安装正确识别git-lfs子命令。
即
process.env.PATH = process.env.PATH + ":" + "path/to/git/lfs"