虽然通过下面的办法能解决 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,暂时没想到更好的办法,如果有网友有更好的解决办法的话,可以评论告知一下,谢谢。