哈喽,我是JL😄
共同成长是我一直以来的追求!✨
希望下面分享能让你有所收获💦
背景
git作为目前最流行的开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
目前公司主流版本管理都在使用git,或者svn,但是git由于其分布式的特性,同时支持离线本地工作,即使操作相对于svn繁杂一些,但也不妨碍大众的推崇。
但是随着项目的扩大,一个项目可能由多人进行开发,每个人的代码风格又有区别,如何做到git规范管理是一个比较常见的问题。
要知道git 规定提交时必须要写提交信息,作为改动说明,保存在 commit 历史中,方便回溯。规范的 log 不仅有助于他人 review, 还可以有效的输出 CHANGELOG,甚至对于项目的研发质量都有很大的提升。
Commitlint 是什么?
在多人开发的情况下,git 仓库和 workflow 的作用很重要。而对于commit提交的信息说明存在一定规范,使用 commitlint + husky 规范git commit -m ""中的描述信息。
简单来说,就是当我们运行`git commmit -m 'xxx'`时,用来硬性**检查`xxx`是否满足固定格式的工具。
如何和谐嵌入日常项目中(适用Vue-cli项目)
步骤很简单:
-
直接通过命令安装:
vue add commitlint,提示是否添加commitlint插件?Yes -
如何判断安装成功?
安装完后,根目录出现配置文件
commitlint.config.js,或者.commitlintrc.jspackage.json文件出现以下代码:
则代表安装成功。
- commitlint.config.js添加rules
// commitlint.config.js
module.exports = {
extends: [ "@commitlint/config-conventional"], // 自带
rules: {
"type-enum": [
2,
"always",
[
'build', // 修改构建打包文件
'chore', // 构建过程或辅助工具的变动
'docs', // 文档(documentation)
'feat', // 新功能(feature)
'fix', // 修补bug
'perf', // 性能优化
'refactor', // 重构(即不是新增功能,也不是修改bug的代码变动)
'revert', // 还原以前的提交
'style', // 格式(不影响代码运行的变动)
'test' // 增加测试
],
],
"type-case": [0],
"type-empty": [0],
"scope-empty": [0],
"scope-case": [0],
"subject-full-stop": [0, "never"],
"subject-case": [0, "never"],
"header-max-length": [0, "always", 72],
},
};
当然,更多规则可以自行了解官方文档
效果图
可谓,硬性插入,不规范都提交代码了!真香~🤦♂️
Commmit规范
现在市面上比较流行的方案是约定式提交规范(Conventional Commits),它受到了Angular提交准则的启发,并在很大程度上以其为依据:
格式: <类型>[可选的作用域]: <描述> // 注意冒号后面需要空格
类型:
'build', // 修改构建打包文件
'chore', // 构建过程或辅助工具的变动
'docs', // 文档(documentation)
'feat', // 新功能(feature)
'fix', // 修补bug
'perf', // 性能优化
'refactor', // 重构(即不是新增功能,也不是修改bug的代码变动)
'revert', // 还原以前的提交
'style', // 格式(不影响代码运行的变动)
'test' // 增加测试
遇到问题
1. lint失效
一般在初始化项目时候,vue-cli已经帮我们配置好lint-staged,当我们git commit时候,项目会帮我们先执行npm run lint,避免一些错误commit。
但是装了Husky后(装了commitLint会自动安装husky),lint-staged失效了,原因推测是Husky作为Git hooks 工具. 对git执行的一些命令,通过对应的hooks钩子触发,执行自定义的脚本程序,所以将原先钩子转到了Husky上,经试验,可以将原gitHooks上的pre-commit复制到husky下面的hooks上。
"gitHooks": {
"pre-commit": "lint-staged"
},
"husky": { // 初始化时候是没有的
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS", // 装了commitlint后
"pre-commit": "lint-staged", // 失效添加将lint-staged添加到这里
}
},
"lint-staged": {
"src/**/*.{js,vue}": [ "npm run lint" ]
},
结语
希望能给你带来帮助✨~
分享不易,点赞鼓励咯🤞