对于个人站长和使用 VPS 进行项目部署的开发者来说,利用 Git Hooks 来自动化代码质量检查(如 Pre-commit linting)是提高效率的常见做法。Husky 是一个流行的工具,用于简化 Git Hooks 的配置。
然而,在使用 Husky 时,一个非常常见的错误提示是:husky – .git can’t be found。这通常发生在项目初次设置、CI/CD 环境运行脚本,或项目目录结构发生变化时。
诊断问题:Husky 为何找不到 .git?
Husky 的工作机制依赖于 Git 仓库的根目录,它需要在 .git 文件夹中注册 hooks。如果 Husky 找不到这个文件夹,它就无法工作。
主要原因通常有两个:
1. 项目尚未初始化 Git 仓库。 (最常见原因)
2. 脚本执行的当前工作目录(CWD)不正确。 (常见于 CI/CD 或 NPM 脚本)
解决方案一:初始化 Git 仓库
如果你是在一个全新的文件夹中设置项目,或者你只是复制了项目文件但没有复制 .git 文件夹(例如,你从压缩包解压而不是使用 git clone),你需要手动初始化 Git。
首先,确认 .git 是否存在:
ls -a
# 如果没有看到 .git 目录,则需要初始化
如果确认 .git 不存在,执行以下命令初始化仓库:
# 假设你在项目根目录
git init
# 添加所有文件并进行初次提交,确保 Git 仓库完整
git add .
git commit -m "Initial commit"
初始化完成后,请再次运行 Husky 安装命令:
npx husky install
解决方案二:修复脚本的执行路径(针对 CI/CD 或部署)
如果你在 VPS 上通过自动化脚本部署项目,或者在 package.json 中配置了 postinstall 脚本,但仍然遇到这个错误,那么很可能是脚本的执行位置不对。
例如,你的项目位于 /home/user/my-website,但你的 CI/CD 工具可能从 /home/user 开始执行命令,这时 Husky 就会失败。
解决方法:确保脚本执行前切换到项目根目录。
在你的部署脚本(如 bash 脚本或 CI 配置文件)中,务必在运行任何涉及 Husky 的命令之前,使用 cd 命令进入项目根目录。
假设项目路径存储在变量 PROJECT_ROOT 中:
# 示例部署脚本片段
PROJECT_ROOT="/home/vpsadmin/my-website"
# 切换到项目根目录
cd "$PROJECT_ROOT"
# 现在执行安装和构建,Husky 将能找到 .git
npm install
# 重新安装 Husky hooks
npx husky install
# 继续运行其他部署步骤...
针对 package.json 的 postinstall 钩子
如果错误发生在 npm install 期间,并且你在 package.json 中使用了 postinstall 脚本来执行 husky install,请确认你的构建系统是否在正确的目录下运行 npm install。
// package.json 示例
{
"scripts": {
"postinstall": "husky install"
}
}
如果运行环境没有正确设置 CWD,你可能需要移除 postinstall 脚本,并在部署脚本中显式地在项目根目录运行 npx husky install,如解决方案二所示。
总结
husky – .git can’t be found 错误的核心是工作目录问题。无论是手动初始化 Git (git init),还是在自动化流程中明确指定正确的执行路径 (cd /path/to/repo),确保 Husky 能够在包含 .git 文件夹的路径下运行是解决此问题的关键。
汤不热吧