你是否有过这样的体验:node
有什么需求,就有什么工具,针对这些问题,如今业界用的最多的就是Angular团队使用的规范;经过git commit的时候弹出一个vim编辑器来编辑模板类型的一份提交信息,主要格式以下:git
<type>(<scope>):<subject>
<BlLANK_LINE>
<?body>
<BLANK_LINE>
<?footer>复制代码
我的习惯针对于项目设置,因此直接在项目安装,而非全局配置,原理同样npm
$ npm i -D commitizen cz-conventional-changelog
$ npm i -g commitizen cz-conventional-changelog复制代码
### package.json
"config":{
"commitizen":{
"path":"node_modules/cz-conventional-changelog"
}
}复制代码
这里若是你是使用全局模式安装的话须要在全局根目录下创建.czrc文件,而后文件中输入内容{“path”:"cz-conventional-changelog"}
或者键入以下命令:json
echo '{"path":"cz-conventional-changelog"}' > ~/.czrc复制代码
若是你是使用全局安装的那么如今你到项目目录下使用git cz
命令就能够看到vim编辑器的弹出内容了,若是是项目级安装,能够到package.json中的scripts命令中配置一条运行命令便可(type的具体类型配置文件介绍)vim
"scripts":{
commit:"git-cz"
}复制代码
选择了提交类型后,会让你继续选择代码的影响范围bash
选择完影响范围后会让你依次填写简要信息,详细信息,页脚信息,是否提交(不一一律述了,都是写完enter键下一步)编辑器
进行了上面的操做,其实对于一个自觉地人来讲,已经够了,可是没有约束就表明了自由,自由就有人越界,我若是不按约束提交,照样玩的嗨起,那么怎么给这些自由加一些约束呢?工具
$ npm i -D @commitlint/config-conventional @commitlint/cli复制代码
在项目更目录下创建配置文件 commitlint.config.js
或者 .commitlintrc.js
测试
module.exports = {
extents:[
"@commitlint/config-conventional"
],
rules:{
}
}复制代码
你可使用官网的方式测试一下你的提交是否符合规范ui
结合git hook来检验commit message,这样当你的提交不符合规范时就会阻止你提交
$ npm i -D husky复制代码
package.json
"husky": {
"hooks": {
"commit-msg": "commitlint -e $GIT_PARAMS"
}
}复制代码
这样当你有不符合规范的时候你将提交不了(我这里是scope为空,拒绝提交)
固然大家若是想本身定义提交规范也是能够的,首先要下载自定义规范约束的包替换Angular团队使用的规范。
$ npm i -D commitlint-config-cz cz-customizable
###而且在项目根目录建立cz-config.js复制代码
commitlint.config.js(rules为我自定义的规则)
module.exports = {
extends: [
'@commitlint/config-conventional',
'cz'
],
rules:{
// Header
'header-max-length': [2, 'always', 200],
// <type>枚举
'type-enum': [2, 'always', [
'init',
'feat',
'fix',
'ui',
'refactor',
'replace',
'deploy',
'docs',
'test',
'chore',
'style',
'revert',
'add',
'minus',
'del'
]],
// <type> 不能为空
'type-empty': [2, 'never'],
// <type> 格式 小写
'type-case': [2, 'always', 'lower-case'],
// <scope> 不能为空
'scope-empty': [2, 'never'],
// <scope> 格式 小写
'scope-case': [2, 'always', 'lower-case'],
// <subject> 不能为空
'subject-empty': [2, 'never'],
// <subject> 以.为结束标志
'subject-full-stop': [2, 'never', '.'],
// <subject> 格式
// 可选值
// 'lower-case' 小写 lowercase
// 'upper-case' 大写 UPPERCASE
// 'camel-case' 小驼峰 camelCase
// 'kebab-case' 短横线 kebab-case
// 'pascal-case' 大驼峰 PascalCase
// 'sentence-case' 首字母大写 Sentence case
// 'snake-case' 下划线 snake_case
// 'start-case' 全部首字母大写 start-case
'subject-case': [2, 'never', []],
// <body> 以空行开头
'body-leading-blank': [1, 'always'],
// <footer> 以空行开头
'footer-leading-blank': [1, 'always']
}}复制代码
package.json
"config": {
"commitizen": {
"path": "node_modules/cz-customizable"
}
},复制代码
cz-config.js(这是我自定义的配置)
module.exports = {
types: [
{ value: 'init', name: 'init: 初始提交' },
{ value: 'feat', name: 'feat: 增长新功能' },
{ value: 'fix', name: 'fix: 修复bug' },
{ value: 'ui', name: 'ui: 更新UI' },
{ value: 'refactor', name: 'refactor: 代码重构' },
{ value: 'release', name: 'release: 发布' },
{ value: 'deploy', name: 'deploy: 部署' },
{ value: 'docs', name: 'docs: 修改文档' },
{ value: 'test', name: 'test: 增删测试' },
{ value: 'chore', name: 'chore: 更改配置文件' },
{ value: 'style', name: 'style: 样式修改不影响逻辑' },
{ value: 'revert', name: 'revert: 版本回退' },
{ value: 'add', name: 'add: 添加依赖' },
{ value: 'minus', name: 'minus: 版本回退' },
{ value: 'del', name: 'del: 删除代码/文件' }
],
scopes: [],
messages: {
type: '选择更改类型:\n',
scope: '更改的范围:\n',
// 若是allowcustomscopes为true,则使用
// customScope: 'Denote the SCOPE of this change:',
subject: '简短描述:\n',
body: '详细描述. 使用"|"换行:\n',
breaking: 'Breaking Changes列表:\n',
footer: '关闭的issues列表. E.g.: #31, #34:\n',
confirmCommit: '确认提交?'
},
allowCustomScopes: true,
allowBreakingChanges: ["feat", "fix"]};复制代码
最后:若是你以为对你有帮助,留下个脚印吧!若是你以为文章有问题,留下点意见吧!