如何在带有 nvm 的 MacO 上使用带有 SourceTree 的 Husky 修复这些错误? “在 PATH 中找不到节点”和“当前目录不是 git 目录!”

问题描述 投票:0回答:4

当我在节点项目中使用 husky 钩子并尝试通过应用程序 SourceTree 提交到 git 时,我看到了错误。钩子在 package.json 中指定。我正在使用 nvm 来管理节点版本。

错误

Can't find node in PATH
husky > pre-commit hook failed
当 SourceTree 用于 git 提交时报告。

一旦绕过这个错误,当使用 SourceTree 的嵌入式 git 尝试通过 SourceTree 提交时,husky 会报告另一个错误:“当前目录不是 git 目录!”。

如何解决错误?

macos git-commit atlassian-sourcetree githooks husky
4个回答
16
投票

(1) 解决第一个错误“Can't find node in PATH”:

由于您是从应用程序 (SourceTree) 而不是从命令行运行 git,所以 husky 没有环境变量来查找节点。为了解决这个问题,husky提供了一个机制:在运行hooks之前先运行用户指定的文件~/.huskyrc

这对我有用:

.bashrc中,我在设置PATH后添加了这一行:

echo "export PATH="$(dirname $(which node)):$PATH"" > ~/.huskyrc

哈士奇文档中描述了另一个建议,https://typicode.github.io/husky/#/?id=command-not-found

# ~/.huskyrc
# This loads nvm.sh and sets the correct PATH before running hook
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

(2) 解决“当前目录不是git目录!” 许多用户报告说,更改他们的 git 版本已经为他们解决了这个问题。

如果您使用的是 SourceTree,您可以将其配置为使用 SourceTree 中的嵌入式 git 版本或系统版本。当我从 SourceTree 的嵌入式版本 2.31.0 切换到系统版本 2.30.1 时,错误得到解决。

在 SourceTree 中,转到 Preferences -> git 设置 git 版本。


3
投票

使用 Husky 和 SourceTree 的最普遍和正确的方法将在 ~/.huskyrc 中有下一个

#!/usr/bin/env bash

# Load NVM support and all defined ENV variables
source ~/.bash_profile

# Check if this repo has .nvmrc file and use it to set proper Node.js version
if test -f ".nvmrc"; then
    nvm use
fi

如果您的情况不是 .bash_profile,请使用另一个文件,它应该包含 NVM 所需的所有

nvm.sh
设置脚本。在某些情况下,第一步可能是可选的,取决于 bash 配置文件设置。


0
投票

在我的系统上从SourceTree中的嵌入式版本2.31.0切换到系统版本2.30.1,错误解决。


0
投票

这对我有用:

echo PATH=${PATH} > ~/.huskyrc
© www.soinside.com 2019 - 2024. All rights reserved.