git commit规范定制
步骤1: 安装 commitizen cz-emoji(表情符)
npm i commitizen cz-emoji --save
步骤2:打开package.json 拷贝下面代码
定义命令package.json 的 script中
“commit”: “git-cz”
#拷贝到你的package.json
"config": {
"commitizen": {
"path": "./node_modules/cz-emoji"
}
},
"gitHooks": {
"commit-msg": "node ./scripts/verifyCommitMsg.js"
},
不难看出我们用了git 的钩子 commit-msg git钩子
其实大概思路就是我们再git commit的时候给执行一个node脚本verifyCommitMsg,通过的就让提交。 没有按照咱们指定的规范的一律拦截并让给他提示 让他纠正他的commit
步骤3:新建verifyCommitMsg.js 可以看下上面咱们的package.json中的 “node ./scripts/verifyCommitMsg.js”
就是咱们校验的nodejs脚本
注意你存放的路径
const chalk = require('chalk');
const msgPaths = process.env.GIT_PARAMS;
let msg = require('fs')
.readFileSync(msgPaths, 'utf-8')
.trim();
//const commitRE = /^(revert: )?(feat|fix|docs|style|refactor|perf|test|workflow|ci|chore|types)(\(.+\))?: .{1,50}/;
const commitRE = /^(:\w{3,50}:.{3,30})/;
if (msg.includes('Merge branch')) {
// 自动合并不加验证
} else {
console.log(`提交信息是:${chalk.green(msg)}`);
if (!commitRE.test(msg)) {
console.log(msg);
console.error(
` ${chalk.bgRed.white(' ERROR ')} ${chalk.red(`提交信息不合法.`)}\n\n` +
chalk.red(
` 为了最终生成好的CHANGELOG,需要好好书写提交信息. 例如:\n\n`
) +
` ${chalk.green(`:类型表情:[类型] (范围) 提交主题`)}\n` +
` ${chalk.green(
`:类型表情:[类型] (2-30个字母数字_-) (提交主题,提交内容一共5-200个中英文数字字母特殊符号)`
)}\n` +
` ${chalk.green(`:sparkles:[feature] (all) 添加提交工具`)}\n\n` +
chalk.red(` See .github/COMMIT_CONVENTION.md for more details.\n`) +
chalk.red(
` 你可以运行 ${chalk.cyan(`npm run commit`)}按照提示生成提交信息.\n`
)
);
process.exit(1);
} else {
console.log(
`${chalk.green('恭喜你提交通过🍉。养成好的提交习惯,开启生活新高度')}`
);
}
}
代码解释
1、chalk 其实就是一个npm包 能给咱们打印出亮眼的console chalk文档
2、利用process.env.GIT_PARAMS 找到目录,读取msg 说明,进行检查。
3、读取到咱们提交的msg
4、正则校验 通过的就让提交 没通过的就 process.exit(1)强制进程退出
5、没通过的给出提示 让执行 npm run commit
6、commitRE 现有的规则是: 必须以 :开头+字母或者数字(位数大于3,小于50)+ :+ 任意字符(3,30)个
7、为什么执定这个样的正则校验(:🐛 (all)) 也是为了匹配cz-emoji
当你没通过校验是这个样的
就是你执行 git commit -m ‘feat: 删除没用的console’ 触发如下
会提醒你执行 npm run commit 其实就是咱们上面定义的指令git-cz
git-cz 回车执行下一个
流程1:Select the type of change you’re committing: (Use arrow keys or type to search) 选择要提交的更改类型:(使用方向键或type进行搜索)
就是让你选一个你想要提交的类型分为 fix、feature…
流程2:Specify a scope 指定一个范围
就是让你输入一个提交的范围
流程3:Write a short description 写一篇简短的描述
就是让你写你提交的代码是改了什么
当你按照提示执行后通过了是这个样的(如下图),然后你就可以往远端仓库推送了
当然咱们可能有的人是真的不想执行咱们的 npm run commit 流程 可以使用 git commit -m ‘feat: 删除没用的console’ -n
再后面加上一个 -n no-checkout
再vue中是尤大大帮咱们内置了一些git 的钩子(yorkie),咱们才可以再什么不需要做的时候使用这些个钩子做拦截(gitHook);
咱们再其他不是vue的项目中,下载一下咱们尤大大的这个npm包就行了。或者用husky ;
youkie实际是fork husky,然后做了一些定制化的改动