前言
此篇文档基于 21 年年终述职大家提出的开发规范化管理和文档化管理的建议,结合 Conventional Commits 约定式提交规范
对 git 代码作出提交规范化。
那什么是 Conventional Commits 约定式提交规范
呢?
定义
Conventional Commits
是一种用于给提交信息增加人机可读含义的规范。它提供了一组用于创建清晰的提交历史的简单规则。
提交说明的结构如下:
<类型>([可选的作用于]): <描述>
[可选的正文]
[可选的脚注]
作用
- 自动化生成 CHANGELOG
- 基于提交类型,自动决定语义化的版本变更
- 向项目相关合作开发者发送变更信心
- 触发自动化构建和部署流程
- 给开发者提供一个更加结构化的提交历史,便于减低对项目做贡献的难度
使用流程
git commit
最佳实践,cimmitizen + husky + commitlint
规范化校验
cimmitizen
- 执行以下命令
npm install -g commitizen
npm install -g cz-conventional-changelog
echo '{"path":"cz-conventional-changelog"}' > ~/.czrc
- 测试功能
执行 git cz
提交代码,出现以下流程
// 选择一个提交的类型
1. select the type of change that you're committing
type | 含义 |
---|---|
feat | 新增功能 |
fix | 修复 bug |
docs | 更改文档 |
style | 不影响代码含义的变化(空白,格式化,缺少分号等) |
refactor | 重构,不修复 bug 且不添加功能 |
perf | 性能优化代码 |
build | 构建方面相关 |
// 更改影响的范围,可不填
2. What is the scope of this change (e.g. component or file name): (press enter to skip)
// 简短的描述
3. Write a short, imperative tense description of the change (max 88 chars)
// 具体描述
4. rovide a longer description of the change: (press enter to skip)
// 是否有破坏性的更改
5. Are there any breaking changes?
// 是否有关联性的问题
6. Does this change affect any open issues?
如下图:
git log
查看提交日志
由上图可以看出,提交了一个 fix(test)项,也是符合了约定式提交规范
husky
- 安装 husky
npm install husky —save-dev
- 安装 git hooks
方法1:
npx husky install
方法2:配置package.json文件中script: "prepare": "husky install"
npm run prepare
- 测试
husky
钩子,添加pre-commit
钩子
npx husky add .husky/pre-commit "npm test"
根目录.husky 文件夹下生成 pre-commit 文件,删除 pre-commit 钩子只需删除文件即可
commitlint
- 安装
npm install -g @commitlint/cli @commitlint/config-conventional
- 生成规范配置文件
echo "module.export = {extends:['@commitlint/config-conventional']}" > commitlint.config.js
- 根目录.husky 文件夹下 pre-commit 文件中添加规则
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
- 在 commitlint.config.js 文件中写入规则
module.exports = {
extends: ["@commitlint/config-conventional"],
rules: {
"type-enum": [
2,
"always",
[
"build",
"ci",
"chore",
"docs",
"feat",
"fix",
"perf",
"refactor",
"revert",
"style",
"test",
],
],
},
};
- 测试提交功能
git add .
git commit -m 'xxx'
执行完上两步操作后,终端出现报错:
⧗ input: xxx
✖ subject may not be empty [subject-empty]
✖ type may not be empty [type-empty]
✖ found 2 problems, 0 warnings
ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
husky - commit-msg hook exited with code 1 (error)
两个报错:1. 缺少类型参数 2. 缺少描述信息
碰到这两个报错可以选择两种方式解决提交报错问题
方法一: 按照规范,为 commit 信息添加入参。例如 git commit -m 'fix: 修改bug'
方法二: 使用 git cz
,按步骤操作
standard-version
1.安装
npm install standard-version
- package.json文件中配置
"scripts": {
"release": "standard-version"
}
-
提交代码后执行
npm run release
执行完后自动升级版本号、自动生成CHAGNELOG文件,里面是之前提交的对应版本号 -
生成的tags不会推送到远程,所以还要执行最后一步
git push --tag
生成新tag并推送到远程
最后去git上验证就可以啦~