使用husky规范commit msg
git commit提交规范
通常使用 Google AngularJS 规范的要求。 格式要求:
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
<type>代表某次提交的类型,比如是修复一个 bug 或是增加一个 feature,具体类型如下:
类型 | 描述 |
---|---|
feat | 新增feature |
fix | 修复bug |
docs | 仅仅修改了文档,比如README, CHANGELOG, CONTRIBUTE等等; |
style | 仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑; |
refactor | 代码重构,没有加新功能或者修复bug |
perf | 优化相关,比如提升性能、体验 |
test | 测试用例,包括单元测试、集成测试等 |
chore | 改变构建流程、或者增加依赖库、工具等 |
revert | 回滚到上一个版本 |
git hook执行时机说明
git hook | 执行时机 | 说明 |
---|---|---|
applypatch-msg | git am 执行前 | 默认情况下,如果commit-msg启用的话,applpatch-msg钩子在启用时会运行commit-msg钩子 |
pre-applypatc | git am 执行前 | 默认的pre-applypatch钩子在启用时运行pre-commit钩子(如果后者已启用) |
post-applypatch | git am 执行后 | 这个钩子主要用于通知,不能影响git-am的结果 |
pre-commit | git commit 执行前 | 可以使用 git commit --no verify 命令绕过该钩子 |
pre-merge-commit | git merge 执行前 | 可以使用 git merge --no verify 命令绕过该钩子 |
prepare-commit-msg | git commit执行之后,编辑器打开之前 | |
commit-msg | git commit 执行前 | 可以使用 git commit --no verify 命令绕过该钩子 |
post-commit | git commit 执行后 | 不影响git commit的结果 |
pre-rebase | git rebase执行前 | |
post-checkout | git checkout 或 git switch执行后 | 如果不使用 --no-checkout 参数,则在 git clone 之后也会执行 |
post-merge | git merge 执行后 | 在执行git pull 时也会被调用 |
pre-push | git push 执行前 | |
pre-receive | git receive pack 执行前 | |
update | ||
proc-receive | ||
post-receive | git receive pack 执行前 | 不影响 git receive pack 的执行结果 |
post-update | 当git receive pack对 git push 作出反应并更新仓库中的引用时 | |
reference-transaction | ||
push-to-checkout | 当git receive pack对 git push 作出反应并更新仓库中的引用时,以及当推送试图更新当前被签出的分支且 receive.denyCurrentBranch配置被updateInstead时 | |
pre-auto-gc | git gc --auto 执行前 | |
post-rewrite | 执行 git commit --amend 或 git rebase 时 | |
sendemail-validate | git send-email 执行前 | |
fsmonitor-watchman | 配置core.fsmonitor被设置为.git/hooks/fsmonitor-watchman 或.git/hooks/fsmonitor-watchmanv2时 | |
p4-changelist | git-p4 submit 执行并编辑完changelist message 之后 | 可以使用 git-p4 submit --no-verify绕过该钩子 |
p4-prepare-changelist | git-p4 submit 执行后,编辑器启动前 | 可以使用 git-p4 submit --no-verify绕过该钩子 |
p4-post-changelist | git-p4 submit 执行后 | |
p4-pre-submit | git-p4 submit 执行前 | 可以使用 git-p4 submit --no-verify绕过该钩子 |
post-index-change | 索引被写入 read-cache.c do_write_locked_index后 |
步骤
安装依赖
- 安装
husky
yarn add husky -D
- 安装
@commitlint/cli
@commitlint/config-conventional
lint-staged
yarn add @commitlint/cli @commitlint/config-conventional lint-staged -D
配置
- 根目录下新建
commitlint.config.js
module.exports = {
extends: [
"@commitlint/config-conventional"
],
// 以下是我们自定义的规则
rules: {
'type-enum': [
2,
'always',
[
'bug', // 此项特别针对bug号,用于向测试反馈bug列表的bug修改情况
'feat', // 新功能(feature)
'fix', // 修补bug
'docs', // 文档(documentation)
'style', // 格式(不影响代码运行的变动)
'refactor', // 重构(即不是新增功能,也不是修改bug的代码变动)
'test', // 测试
'chore', // 构建过程或辅助工具的变动
'revert', // feat(pencil): add ‘graphiteWidth’ option (撤销之前的commit)
'merge' // 合并分支, 例如: merge(前端页面): feature-xxxx修改线程地址
]
]
}
};
package.json
添加scripts
...,
"scripts": {
"prepare": "husky install",
"husky-msg-init": "husky add .husky/pre-commit \"npx lint-staged --allow-empty \"$1\"\"&yarn husky add .husky/commit-msg \"npx commitlint --edit \"$1\"\""
},
...
package.json
添加lint-staged
{
...,
"lint-staged": {
"src/**/*.{js,jsx,ts,tsx,json}": [
"prettier --write",
"eslint",
"git add"
]
},
...
}
prettier
和eslint
如果项目不需要可以去掉
运行命令
yarn prepare
运行后会在项目根目录生成.husky
文件夹,包含.gitignore
和husky.sh
两个文件
yarn husky-msg-init
运行后会在.husky
目录下生成commit-msg
pre-commit
两个文件
commit-msg
文件:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx commitlint --edit $1
pre-commit
文件:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged --allow-empty $1
这样commit提交规范就完成了,如果commit msg
不符合规范则无法提交
当前所使用环境版本
环境 | 版本 |
---|---|
node |
v16.14.2 |
npm |
6.14.10 |
yarn |
1.22.18 |
husky |
^7.0.4 |
@commitlint/cli |
^16.2.3 |
@commitlint/config-conventional |
^16.2.1 |
lint-staged |
^12.3.7 |
参考
husky(https://typicode.github.io/husky/)
掘金(https://juejin.cn/post/6982192362583752741)
评论