前提
公司团队在开发一个新项目的时候,团队成员决定规范提交的git信息,本人自那以后也一直遵守规则,今天有时间,自己摸索一下。
commit message
格式如下
1 | <type>(<scope>): <subject> |
message的格式主要分为了三部分:标题行、主体、页脚。
标题行:简单描述更改的范围(scope)和内容(subject),必填。
主体:详细描述做了哪些内容改动,改动的一些思路,选填。
页脚:与版本冲突的代码变化、关闭的issue,选填。
type
type是提交的类型。通常为以下几种
- feat: 新特性
- fix: 修复问题
- refactor: 重构代码
- docs: 文档相关
- style: 代码格式调整,不是css样式
- test: 测试用例
- chore: 项目构建相关
平时我们完全可以在提交的时候按照以上约定的格式来写。
如果稍微懒一点,可以引入npm工具包来帮我们走这一步流程。
commitizen
借助commitizen来帮助我们生成符合规范的提交信息。
同时需要为commitizen提供一个adaptor,这个adaptor是一个约定好的规范。官网上提供了许多adaptor,我们先选一个 cz-conventional-changelog
。
我不想全局安装,选择项目安装
1 | npm install commitizen --save-dev |
安装完之后再package.json中添加
1 | "scripts": { |
然后我们执行 npm run commit
便会看到引导内容,我们按提示完成提交信息即可。
cz-customizable
如果我们不想用别人约定好的adaptor,我们想自己约定。可以使用cz-customizable
1 | npm i -D cz-customizable |
然后将我们之前在package.json中写的config调整为
1 | "config": { |
然后在项目根目录下创建 .cz-config.js。
我们可以先参照官网的配置例子,复制粘贴进我们的 .cz-config.js
。
目前我们可以把它的英文提示都改成中文。
配置如下
1 | module.exports = { |
当我们执行 npm run commit
时,便如下图
commitlint
有时我们为了节省时间,没有使用 npm run commit
来走以上的流程,直接提交自定义commit信息。虽然可以提交成功,但我们之前的努力似乎就白费了。因为一旦开始随意提交,后面便不会再想按流程来走。因此,我们需要校验提交的信息,如果不符合规范,直接拒绝你的提交。
commitlint可以帮我们校验,同样它也需要一份配置文件。
首先安装commitlint
1 | npm i -D @commitlint/cli |
然后安装校验的配置
1 | npm i -D @commitlint/config-conventional |
然后我们创建配置文件
1 | echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js |
commitlint.config.js
也可以命名为 .commitlintrc.js
, .commitlintrc.json
, .commitlintrc.yml
,甚至可以在package.json
中配置。
commitlint-config-cz
就如刚才我们使用了自定义的adaptor来约定commit的格式,我们也可以自定义校验的规则
1 | npm i -D commitlint-config-cz |
然后我们修改刚才生成的校验配置
1 | module.exports = { |
查看官网rules, 我们随便在 commitlint.config.js
中添加一些rules
1 | module.exports = { |
这里我主要是规定了主要的标题行的内容不能为空。
husky
使用commitlint需要搭配husky使用
1 | npm install --save-dev husky |
然后在package.json中添加配置
1 | { |
这样当我们提交时,如果提交的信息不符合规范,便会提示报错。比如我随便写了个abcd,就报错了,如下图。
总结
整体的大体流程如上,周末愉快。