Files
GitGuide/docs/tool/commitlint-husky.md

127 lines
3.3 KiB
Markdown

# [CommitLint][Husky]消息校验
使用`commitizen`可以规范化提交信息,同样的,可以设置工具来检查提交信息是否符合格式要求
* [commitlint](https://github.com/conventional-changelog/commitlint):用于检查提交信息
* [husky](https://github.com/typicode/husky)是`hook`工具,作用于`git-commit``git-push`阶段
使用场景:
1. 本地信息检查
2. `CI`信息检查
## `commitlint`
### 全局安装
$ npm install -g @commitlint/cli @commitlint/config-conventional
### 本地安装
$ npm install --save-dev @commitlint/{cli,config-conventional}
### 配置规范
# 使用conventional规范
$ echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js
### 测试
需要全局安装才能在命令行使用`commitlint`
# 错误示例,类型后跟一个冒号和一个空格
$ echo "docs:添加新的文档" | commitlint
⧗ input: docs:添加新的文档
✖ subject may not be empty [subject-empty]
✖ type may not be empty [type-empty]
✖ found 2 problems, 0 warnings
(Need help? -> https://github.com/conventional-changelog/commitlint#what-is-commitlint )
# 正确示例
$ echo "docs: 添加新的文档" | commitlint
⧗ input: docs: 添加新的文档
✔ found 0 problems, 0 warnings
(Need help? -> https://github.com/conventional-changelog/commitlint#what-is-commitlint )
# 或者
$ commitlint "docs: asdf"
⧗ input: build(npm): 添加package.json
✔ found 0 problems, 0 warnings
(Need help? -> https://github.com/conventional-changelog/commitlint#what-is-commitlint )
## `husky`
### 安装
# 本地
$ npm install --save-dev husky
### 配置
`package.json`中添加
// package.json
{
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
}
`git`提交信息提交`commitlint`检查,参数`-E`默认将`.git/COMMIT_EDITMSG`数据添加到`HUSKY_GIT_PARAMS`
### 测试
# 错误提交提交
$ git commit -m "忽略node_modules"
husky > commit-msg (node v10.15.3)
⧗ input: 忽略node_modules
✖ subject may not be empty [subject-empty]
✖ type may not be empty [type-empty]
✖ found 2 problems, 0 warnings
(Need help? -> https://github.com/conventional-changelog/commitlint#what-is-commitlint )
husky > commit-msg hook failed (add --no-verify to bypass)
# 正确提交
$ git commit -m "build(npm): 忽略node_modules"
husky > commit-msg (node v10.15.3)
⧗ input: build(npm): 忽略node_modules
✔ found 0 problems, 0 warnings
(Need help? -> https://github.com/conventional-changelog/commitlint#what-is-commitlint )
[master 8728336] build(npm): 忽略node_modules
1 file changed, 1 insertion(+)
create mode 100644 .gitignore
### 禁用`husky`
某一次提交想要禁用`husky`,可以添加参数`--no-verify`
$ git commit --no-verify -m "xxx"
## `CI`设置
`Travis CI`为例
在本地安装
$ npm install --save-dev @commitlint/travis-cli
修改`travis.yml`
language: node_js
script:
- commitlint-travis
## 相关阅读
* [commitlint](https://conventional-changelog.github.io/commitlint/#/)