Mac SourceTree 提交时找不到 node 命令

1,448 阅读1分钟

虽然通过下面的办法能解决 SourceTree 的问题,但是使用其他软件,如 Fork 时,也会有类似的问题,后面才发现是 Husky 的问题,可以参考这篇文件:Mac git GUI客户端使用 Husky hooks时找不到命令

出现这种问题是因为SourceTree GUI界面执行命令时找不到node的环境变量

1. 命令行打开

可通过以下命令打开SourceTree解决

$ open /Applications/SourceTree.app/Contents/MacOS/SourceTree

但每次打开都要敲这么一大堆命令,虽然可以通过别名解决,但总归不优雅

2. 更改SourceTree Git内置版本

SourceTree安装时默认使用的是内置的Git版本

通过将Git改成Homebrew安装的Git解决了

但是,虽然提交是可以找到node变量了,但是拉取和推送的时候,得手动选择分支了,如下图

使用也不方便,还不如方法1使用命令行打开SourceTree

3. 使用软链接添加node命令(完美解决)

通过报错知道,SourceTree执行命令时在以下PATH环境里找不到node命令

PATH=/Applications/Sourcetree.app/Contents/Resources/git_local/libexec/git-core:/Applications/Sourcetree.app/Contents/Resources/bin:/Applications/Sourcetree.app/Contents/Resources/git_local/bin:/Applications/Sourcetree.app/Contents/Resources/git_local/gitflow:/Applications/Sourcetree.app/Contents/Resources/git_local/git-lfs:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

既然我们改变不了PATH变量,但是我们可以在现有的路径里添加node命令啊

定位到 /usr/local/bin 路径下

发现这里存放的都是软链接,那解决办法来了,我们可以在这里创建一个node的软链接

执行

$ which node
/Users/zhanguangao/.nvm/versions/node/v16.19.1/bin/node

找到node的环境变量路径,然后在 /usr/local/bin 创建软链接

ln -s /Users/zhanguangao/.nvm/versions/node/v16.19.1/bin/node /usr/local/bin/node 

然后回到SourceTree,重新提交,就可以找到node环境变量了。

在实际项目中,有可能找不到其他的环境变量,比如,找不到 pnpm 命令

同理,根据以上办法,创建一个 pnpm 的软链接

执行

$ which pnpm
/opt/homebrew/bin/pnpm

找到node的环境变量路径,然后在/usr/local/bin创建软链接

ln -s /opt/homebrew/bin/pnpm  /usr/local/bin/pnpm

总结

通过以上方法,如果习惯敲命令打开软件的,可以使用方法1,但是方法1打开时,会弹出一个终端记录当前软件的运行状态的窗口。

方法2是我探索解决的过程中试错的一个方法,有瑕疵,不建议使用。

方法3暂时是我能想到的最好的办法了,建议使用。

在解决这个问题的过程中想过是不是我安装的SourceTree版本有问题,截止目前,最新是4.2.1版本,卸载干净后安装4.2.0版本后也出现一样的问题。

那也有可能是我Mac系统版本和SourceTree有兼容性的问题了,我的版本是macOS Ventura 13.2.1,暂时没想到更好的办法,如果有网友有更好的解决办法的话,可以评论告知一下,谢谢。