为什么我的 git 预提交钩子 运行 不是?

Why isn't my git pre-commit hook running?

直到最近——我几天前才注意到这一点——我的 git 预提交钩子还在工作。我正在编写一个 React 应用程序,并使用 Husky、TSLint 和 Prettier 在提交之前清理和检查我的代码。现在,当我更改和提交文件时,预提交挂钩不会 运行.

我的项目结构是这样的:

- project
  - .git/
  - react/   <- the frontend
    - node_modules/
    - src/
    - package.json
    - (other files)
  - nodejs/  <- the server
    - node_modules/
    - src/
    - package.json
    - (other files)
  - package.json
  - (other files)

如果我手动执行钩子,似乎 运行 没问题:

[/project/react] # git status
On branch fixHusky
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   MyFile.ts

[/project/react] # ../.git/hooks/pre-commit
husky > pre-commit (node v12.6.0)
  ↓ Stashing changes... [skipped]
    → No partially staged files found...
  ✔ Running linters...

[/project/react] # 

但是当我真正尝试提交时,哈士奇并没有 运行:

[/project/react] #  git commit -m "testing husky"
[fixHusky cf17a6b] testing husky
 1 file changed, 1 insertion(+), 1 deletion(-)

[/project/react] # 

知道为什么它不是 运行ning 吗?

检查 git config core.hooksPath 是否设置为与其默认路径不同的路径:$GIT_DIR/hooks

还要检查 GIT_DIR(环境变量)当前是否设置。

在这两种情况下,Git 会在您期望的地方 而不是 寻找那个挂钩(并且目前有您的 pre-commit 挂钩)

通过 运行 yarn add --dev husky 更新 Husky 解决了该问题。我不知道为什么它停止工作,但无论如何 husky 已经非常过时了。