【实战指南】解决 Husky 中的 “.git can‘t be found“ 错误 ...

灌篮少年  金牌会员 | 2024-10-8 19:10:15 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 843|帖子 843|积分 2529

文章正文

在前端开发中,预提交钩子(pre-commit hooks)是一种常见的实践,它们可以在提交接码之前执行一系列检查,比如格式化代码、运行测试等,以确保代码质量。Husky 是一个盛行的 Git 钩子管理器,它简化了设置和管理这些钩子的过程。然而,有时我们会遇到一个常见的题目:“.git can’t be found”,这通常是由于 Husky 在非标准的 Git 目录下运行时发生的。本文将详细先容这一题目的成因、解决方法以及如何配置 Husky 以顺应不同的 Git 情况。
题目描述

当你使用 Husky 设置 Git 钩子时,大概会遇到以下错误信息:
  1. │ husky - .git can't be found (see https://typicode.github.io/husky/#/?id=custom-directory)
复制代码
这通常意味着 Husky 无法找到 Git 仓库的根目录。这种情况通常发生在 Git 存储库位于非标准位置时,例如子目录中大概使用了 Git submodules。
题目分析

在默认情况下,Husky 会在当前工作目录查找 .git 文件夹,如果该文件夹不在当前目录或其父目录中,Husky 就无法辨认 Git 仓库的位置。这会导致 Husky 无法正确安装钩子脚本。
解决方案

接下来,我们将通过一个具体的示例来展示如何诊断息争决这个题目。

示例

假设我们的项目目录布局如下所示:
  1. my-project/
  2. ├── .git/
  3. ├── frontend/
  4. │   ├── .husky/
  5. │   ├── package.json
  6. │   └── package-lock.json
  7. ├── backend/
  8. │   └── .git/
  9. └── README.md
复制代码
在这个例子中,前端项目位于 frontend 目录下,而 Git 仓库的根目录位于 my-project/。这意味着前端项目的 .git 文件夹不在预期的位置,因此 Husky 无法正确辨认 Git 仓库。
步调 1: 初始化项目

起首,我们需要初始化前端项目,并安装必要的依靠。
下令行操作:
  1. cd my-project/frontend
  2. npm init -y
  3. npm install husky --save-dev
复制代码
package.json:
  1. {
  2.   "name": "frontend",
  3.   "version": "1.0.0",
  4.   "private": true,
  5.   "scripts": {
  6.     "precommit": "echo 'Running pre-commit checks...
  7. '"
  8.   },
  9.   "devDependencies": {
  10.     "husky": "^8.0.0"
  11.   }
  12. }
复制代码
步调 2: 配置 Husky

接下来,我们需要配置 Husky 以便它可以正确地辨认 Git 仓库的位置。
下令行操作:
  1. npx husky install
复制代码
这将创建 .husky 文件夹,并设置默认的 Git 钩子脚本。然而,由于 .git 文件夹不在当前目录中,我们需要手动配置 Husky 以指定 Git 仓库的位置。
下令行操作:
  1. npx husky add .husky/pre-commit 'npx --no-pnp lint-staged'
复制代码
这里我们添加了一个简单的预提交钩子,用于运行 lint-staged。但是,我们需要告诉 Husky 如何找到 .git 文件夹。
步调 3: 指定 .git 文件夹位置

为了指定 .git 文件夹的位置,我们需要修改 Husky 的配置文件。
下令行操作:
  1. echo "repo=${PWD}/../.git" > .husky/_/env
复制代码
这将创建一个名为 _ 的文件夹,并在此中创建一个名为 env 的文件。这个文件用于指定 Git 仓库的位置。
步调 4: 测试预提交钩子

现在,我们可以尝试提交一些更改来测试预提交钩子是否正确工作。
下令行操作:
  1. touch test.txt
  2. git add test.txt
  3. git commit -m "Initial commit"
复制代码
如果一切正常,你应该能看到如下输出:
  1. Running pre-commit checks...
复制代码
步调 5: 处理错误

如果在运行 git commit 时仍然遇到错误,那么大概是由于 Husky 未能正确读取 .git 文件夹的位置。这时,我们需要进一步排查题目。
下令行操作:
  1. cat .husky/_/env
复制代码
确保输出如下:
  1. repo=/path/to/my-project/.git
复制代码
如果输出不正确,你需要更新 .husky/_/env 文件以指向正确的 .git 文件夹。
步调 6: 修复错误

如果 Husky 仍然无法找到 .git 文件夹,你可以尝试手动指定 .git 文件夹的位置。
下令行操作:
  1. rm -rf .huskynpx husky install
  2. npx husky add .husky/pre-commit 'npx --no-pnp lint-staged'
  3. echo "repo=${PWD}/../.git" > .husky/_/env
复制代码
步调 7: 验证解决方案

最后,我们再次尝试提交更改来验证解决方案的有效性。
下令行操作:
  1. touch test2.txt
  2. git add test2.txt
  3. git commit -m "Second commit"
复制代码
这次应该不会出现任何错误,且预提交钩子会正常运行。

结论

本文通过一个具体的示例先容了如何解决 Husky 中的 “.git can’t be found” 题目。在实际开发过程中,你应该始终注意 Git 仓库的位置,并确保 Husky 可以或许正确地辨认它。通过得当的配置,我们可以避免这类题目,并充实利用 Husky 的强大功能来提高代码质量和团队协作服从。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表