0%

关于husky > pre-commit问题

今天入职新的公司,接手了一个新项目。git commit时遇到一个问题: husky > pre-commit (node v12.13.0) Stashing changes…,检查后了解到是项目中安装了husky。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ git commit -m "修改内容"
husky > pre-commit (node v12.16.1)
Stashing changes... [started]
Stashing changes... [skipped]
→ No partially staged files found...
Running linters... [started]
Running tasks for **/*.less [started]
Running tasks for **/*.{js,jsx} [started]
Running tasks for **/*.{js,ts,tsx,json,jsx,less} [started]
stylelint --syntax less [started]
npm run lint-staged:js [started]
node ./scripts/lint-prettier.js [started]
node ./scripts/lint-prettier.js [completed]
git add [started]
git add [completed]
Running tasks for **/*.{js,ts,tsx,json,jsx,less} [completed]
stylelint --syntax less [failed]

Running tasks for **/*.less [failed]

npm run lint-staged:js [failed]

Running tasks for **/*.{js,jsx} [failed]

Running linters... [failed]

解决方法:

  1. 执行npm run lint ,根据提示修改错误。

    1
    npm run lint
  2. 使用git commit -m “” –no-verify ,绕过lint的检查。

    1
    git commit -m "" --no-verify

git hooks

如同其他许多的版本控制系统一样,Git 也具有在特定事件发生之前或之后执行特定脚本代码功能。

在git中提供了hook,就是在触发代码提交,push等一系列操作的时候,提供了触发其他程序的钩子.

hooks默认路径是 .git/hooks

husky

husky是一个npm包,安装后,可以很方便的在package.json配置git hook 脚本 。

1
2
3
4
5
6
7
8
9
10
// package.json 

"scripts": {
"lint": "eslint src"
},
"husky": {
"hooks": {
"pre-commit": "npm run lint"
}
},

设置后,在每一次git commit 之前,都会执行一次对应的 hook 脚本npm run lint

在安装 husky 的时候,husky会根据 package.json里的配置,在.git/hooks 目录生成所有的 hook 脚本(如果你已经自定义了一个hook脚本,husky不会覆盖它)。然后根据package.json里的设置,执行对应的hook脚本。