感谢bigAken投稿
在每一个使用 git 进行版本管理的仓库,都有一个目录 .git/hooks,包含 commit 各个阶段 Hooks 的脚本。这些 Hooks 在 git 操作 commit、push、merge 等得时候,可以做前置或者后置的操作,例如 pre-commit 在 git commit 前可以做代码校验,校验代码的时候使用的ESLint,格式化使用的是 prettier。Git 支持的常用钩子见下表,更多请查看官网Hooks:
Git Hook | 调用时机 | 调用时机 |
---|---|---|
pre-commit | git commit 执行前 | 可以用 git commit --no-verify 绕过 |
commit-msg | git commit 执行前 | 可以用 git commit --no-verify 绕过 |
pre-merge-commit | git merge 执行前 | 可以用 git merge --no-verify 绕过 |
pre-push | git push 执行前 |
本文先实践,怎么去写 pre-commit 这个 git hooks,然后介绍 husky,lint-staged,commitlint 的使用
在 git 项目中,.git/hooks
下面有很多 hooks 示例如下
这些 git hooks 都是.sample
结尾的,如果要启用某个 hooks 用可以去掉.sample
结尾
实践
npm init -y
初始化一个项目,然后git init
,然后npm install eslint --save-dev
新建.gitignore
文件
node_modules
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
*-lock.json
*.lock
新建.eslintrc
,配置 eslint
{
"rules": {
// 要求使用分号
"semi": ["error", "always"],
// 强制使用一致的反勾号、双引号或单引号
"quotes": ["error", "double"]
}
}
新建src
目录,然后里面新建index.js
,禁止使用快捷键格式化
console.log('object')
根目录新建文件夹.customGitHooks
然后 git config 'core.hooksPath' .customGitHooks
,主要是设置 gitHooks 的存放目录,因为 gitHooks 默认存放目录是.git/hooks
,新建pre-commit
,写入如下
#!/bin/sh
echo 'start chec