开发中如何统一 git commit 规范,对项目的开发和维护以及问题的回溯都很有效果,接下来看看如何实现 commit 信息规则的校验
commitlint 校验 commit 信息
多人协作开发的时候,友好的 commit 信息对于项目开发人员来说非常重要,这时候 commitlint 就派上用场了,commitlint 是来检测提交信息的格式是否符合规范
常用的 commitlint 模版
type(scope?): subjectbody?footer?
多个作用域
commitlint 支持多个作用域,常用的分隔符选项有
"/""\"","
commit 规范的制定和使用
我们不仅可以使用社区的规范 @commitlint/config-conventional
,也可以自定义规范
常用的社区 commit 规范有
- @commitlint/config-angular
- @commitlint/config-conventional
- @commitlint/config-lerna-scopes
- @commitlint/config-patternplate
- conventional-changelog-lint-config-atom
- conventional-changelog-lint-config-canonical
- commitlint-config-jira
社区规范引入方法,在项目根目录下新建 commitlint.config.js
文件
// commitlint.config.jsmodule.exports = { extends: ['@commitlint/config-conventional'], // => commitlint/config-conventional};
也可以使用自定义规范,通过相对路径引入
// commitlint.config.jsmodule.exports = { extends: ['./config.js'], // => ./config.js};
自定义 commit 规则的配置如下
// config.jsmodule.exports = { /* * 继承自@commitlint/config-conventional@commitlint/config-conventional */ extends: ['@commitlint/config-conventional'], /* * 使用@commitlint/format格式化 */ formatter: '@commitlint/format', /* * 重新自定义校验规则 */ rules: { 'type-enum': [2, 'always', ['foo']], }, /* * 排除校验情况 */ ignores: [(commit) => commit === ''], /* * commitlint默认排除规则 */ defaultIgnores: true, /* * 展示commit错误求助链接,配置无效 * commitlint --help-url="https://www.baidu.com" */ helpUrl: 'https://github.com/conventional-changelog/commitlint/#what-is-commitlint', /* * 提示输入 */ prompt: { messages: {}, questions: { type: { description: 'please input type:', }, }, },};
相应的规则链接
灵活的自定义检测插件
由于官方的检测规则有点死板,有时需要更加灵活的限制,可以通过 commitlint 插件来解决,首先安装依赖 commitlint-plugin-function-rules
npm install --save-dev commitlint-plugin-function-rules
修改 commitlint.config.js
文件
module.exports = { // extends: ['@commitlint/config-conventional'], plugins: ['commitlint-plugin-function-rules'], rules: { 'header-max-length': [0], 'function-rules/type-enum': [ 2, 'always', (parsed) => { if (!['AA', 'BB'].includes(parsed.type)) { return [false, '必须以JIRA号(AA/BB)作为开头']; } return [true]; }, ], },};
自定义 commit 模板
官方自带的模版必须是以 :
规范来写 commit 信息的,如果我们想自定义 commit 模板,可以通过 parserPreset
配置来实现,例如以空格为分割符,可以这样实现
parserPreset: { parserOpts: { headerPattern: /^([feat|hotfix].*)\s(.*)/, headerCorrespondence: ['type', 'subject'] }},
husky 使用
husky 可以在 git commit 的钩子处理相关的操作,比如执行单元测试,代码 lint,代码 commit 检测等。使用方法如下
npm install husky --save-dev
在根目录下执行
npm set-script prepare "husky install"npm run prepare
比如新增一个 pre-commit
钩子,执行单元测试
npx husky add .husky/pre-commit "npm test"git add .husky/pre-commit
比如新增一个 commit-msg
钩子,执行 commit 信息格式检测
npx husky add .husky/commit-msg "npx commitlint --edit $1"
至此,就可以实现在 git commit 时进行 commit 信息的格式检测