一、前情提要
Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。
git commit -m "init"
一般来说,commit message 应该清晰明了,说明本次提交的目的。
二、规范化 commit message 的好处
- 提供更多的历史信息,方便快速浏览;
- 可以过滤某些commit(比如文档改动),便于快速查找信息
- 可以直接从commit生成Change log
三、commit message 的格式
目前行业比较流行也工人比较好的规范是Angular 团队的规范,如下:
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
分别对应 Commit message 的三个部分:Header,Body 和 Footer;其中,Header 是必需的,Body 和 Footer 可以省略。
Header
Header 部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。
-
type: 用于说明 commit 的类型。一般有以下几种:feat: 新功能(feature) fix: 修补bug docs: 仅仅修改了文档,如readme.md style: 格式(不影响代码运行的变动) refactor: 重构(即不是新增功能,也不是修改bug的代码变动) perf: 优化相关,如提升性能、用户体验等。 test: 测试用例,包括单元测试、集成测试。 chore: 改变构建流程、或者增加依赖库、工具等。 -
scope: 用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同; -
subject: commit 目的的简短描述
Body
对本次 commit 修改内容的具体描述, 可以分为多行。如下:
# body: 72以下个字符,主要包括:
# * 为什么需要进行此更改?
# * 怎么解决这个问题?
# * 是否对项目有其他副作用?
# 提交次数
Footer
Footer 部分只用于两种情况:
- 一些备注, 通常是
BREAKING CHANGE(当前代码与上一个版本不兼容) ; - 修复的 bug(关闭 Issue) 的链接。
四、Commitizen
安装
npm install -g commitizen
在项目目录里,运行下面的命令,使其支持 Angular 的 Commit message 格式
commitizen init cz-conventional-changelog --save-dev --save-exact
请注意,如果您想强制安装在旧适配器的顶部,您可以应用该
--force参数。有关这方面的更多信息,只需运行commitizen help
上面的命令为你做了三件事:
- 安装
cz-conventional-changelog适配器 npm 模块; - 将其保存到
package.json'sdependencies或devDependencies; - 将
config.commitizen密钥添加到文件的根目录,package.json如下所示:
"config": {
"commitizen": {
"path": "cz-conventional-changelog"
}
}
如下所示:
往后,用到 git commit 命令,一律改为使用 git cz ,Ï用来生成符合格式的 Commit message。
五、使用 husky + commitlint 检查 Commit message 是否符合规范
六、生成 Change log
如果你的所有 Commit 都符合 Angular 格式,那么发布新版本时, Change log 就可以用脚本自动生成。
生成的文档包括以下三个部分:
- New features
- Bug fixes
- Breaking changes
conventional-changelog 就是生成 Change log 的工具,运行下面的命令即可:
npm install -g conventional-changelog-cli
cd my-project
conventional-changelog -p angular -i CHANGELOG.md -s
可以将该命令配置到scripts中,就可以通过执行npm run changelog命令来生成 CHANGELOG:
{
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
}
}
npm version(详见文档 readme.md)
{
"scripts": {
"version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"
}
}
七、(可选)搭配 git-cz 生产含图标的 commit
以上就基本能够满足我们的规范化使用了,git-cz 美化下提交。
npm install -g git-cz
commitizen init git-cz --save-dev --save-exact
如果报错,就按照报错解决方案来;在命令后加
--force。