MacOS下nvm管理Node时SourceTree调用Husky报错该如何修复?
SourceTree 配合 Husky 两类常见报错的排查与修复方案
报错1:提交时提示「Can't find node in PATH」,同步抛出「husky > pre-commit hook failed」
问题根因
SourceTree 运行时默认不会加载终端的用户环境变量,通过 nvm 安装的 Node 路径仅存在于终端的 PATH 配置中,SourceTree 调用 Git 钩子时无法识别到 Node 执行文件。
排查步骤
- 打开终端进入项目根目录,执行
which node,记录输出的 Node 绝对路径(例如/Users/yourname/.nvm/versions/node/v18.17.0/bin/node) - 打开 SourceTree 偏好设置 -> Git 选项卡,确认当前使用的是内置 Git 还是系统 Git
修复方案
- 单项目适配:在项目根目录的
.husky文件夹下新建.env文件,写入以下内容,将路径替换为上一步查到的 Node 所在的上层目录:PATH="/Users/yourname/.nvm/versions/node/v18.17.0/bin:$PATH" - 全局适配(仅Mac):在用户根目录新建
.huskyrc文件,写入以下内容,自动加载 nvm 环境,所有项目都可生效:export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
注意:Windows 用户可直接在系统环境变量的 PATH 中手动添加 nvm 存放 Node 执行文件的目录,重启 SourceTree 即可生效
报错2:使用 SourceTree 内置 Git 提交时提示「Current directory is not a git directory!」
问题根因
SourceTree 调用内置 Git 执行 Husky 钩子时,工作目录没有正确指向当前项目根目录,导致 Husky 无法识别到 .git 文件夹。
排查步骤
- 终端进入项目根目录,执行
git rev-parse --is-inside-work-tree,输出为true即证明项目本身 Git 配置正常,问题出在 SourceTree 的执行上下文
修复方案
- 优先方案:切换 SourceTree 使用系统 Git,而非内置 Git。打开 SourceTree 偏好设置 -> Git -> 点击「使用系统 Git」,如果识别失败,可将终端执行
which git输出的路径填入对应输入框 - 内置 Git 适配:如果必须使用内置 Git,可在
.husky目录下所有钩子脚本(比如 pre-commit、commit-msg)的第一行添加工作目录指定代码:cd 你的项目根目录绝对路径 - 版本适配:将 Husky 升级到 v8 及以上版本,新版本已经兼容了 SourceTree 内置 Git 的路径识别逻辑,执行
npm install husky@latest --save-dev重新安装即可。
内容的提问来源于stack exchange,提问作者TER
相关产品推荐
相关产品推荐

