Open hushicai opened 5 years ago
良好的Git Commit Message有助于code review、团队协作、输出changelog等,然而实际工作中却常常被忽略。
本文主要介绍一些常用的工具链,帮助团队重视和编写规范化的commit message。
目前社区使用较多的是 Angular 团队的规范,继而衍生了 Conventional Commits specification。
commitizen/cz-cli可以帮助我们生成符合规范的Commit Message。
一般有两种安装方式,全局安装和项目级安装。
在这里,我们选择项目级安装:
npm i -D commitizen ./node_modules/.bin/commitizen init cz-conventional-changelog --save-dev --save-exact
package.json中会生成以下内容:
{ "devDependencies": { "commitizen": "^2.10.1", "cz-conventional-changelog": "^2.1.0" }, "config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" } } }
package.json中配置一个commit script:
{ "scripts": { "commit": "git-cz" } }
现在我们就可以用cz来生成符合规范的commit message:
如果你不想通过npm scripts的方式来commit,你也可以全局安装一个commitizen:
npm i -g commitizen
然后可以直接用cz来commit:
git cz
前文提到,我们需要借助cz才能自动生成commit message,那如果有些同事不用呢?直接git commit -m "xxx"怎么办?
git commit -m "xxx"
这就需要用到commitlint,它可以帮助我们 lint commit messages,如果我们提交的log不符合规范,直接拒绝提交。
安装:
npm i -D @commitlint/config-conventional @commitlint/cli echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
校验commit message的最佳方式是采用git hook,所以需要配合Husky。
Husky可以帮助我们更好地管理git hooks。
npm i husky@next --save-dev
package.json中添加配置:
{ "husky": { ... "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }
现在就可以和commitlint一起愉快地校验commit message了:
如上图所示,git commit被拦截了,log不符合规范,直接拒绝提交!
所以还是建议大家用cz来提交,手工填写的commit message可能会被拒绝!
通过以上工具, 我们的 commit message 应该是符合规范的。
现在我们就可以借助 standard-version, 自动生成changelog,甚至是语义化的版本号(Semantic Version)。
npm i standard-version --save-dev
package.json中配置:
{ "standard-version": { "skip": { "commit": true } } }
效果:
可以看到,它会自动更新版本,生成changelog,以及打tag。
如果我们继续commit,再次release时,standard-version会基于 Semantic Version 生成下一个版本,同时生成上一个tag到此时为止的commit changelog:
良好的Git Commit Message有助于code review、团队协作、输出changelog等,然而实际工作中却常常被忽略。
本文主要介绍一些常用的工具链,帮助团队重视和编写规范化的commit message。
规范
目前社区使用较多的是 Angular 团队的规范,继而衍生了 Conventional Commits specification。
Commitizen
commitizen/cz-cli可以帮助我们生成符合规范的Commit Message。
一般有两种安装方式,全局安装和项目级安装。
在这里,我们选择项目级安装:
package.json中会生成以下内容:
package.json中配置一个commit script:
现在我们就可以用cz来生成符合规范的commit message:
如果你不想通过npm scripts的方式来commit,你也可以全局安装一个commitizen:
然后可以直接用cz来commit:
Commitlint
前文提到,我们需要借助cz才能自动生成commit message,那如果有些同事不用呢?直接
git commit -m "xxx"
怎么办?这就需要用到commitlint,它可以帮助我们 lint commit messages,如果我们提交的log不符合规范,直接拒绝提交。
安装:
校验commit message的最佳方式是采用git hook,所以需要配合Husky。
Husky
Husky可以帮助我们更好地管理git hooks。
安装:
package.json中添加配置:
现在就可以和commitlint一起愉快地校验commit message了:
如上图所示,git commit被拦截了,log不符合规范,直接拒绝提交!
所以还是建议大家用cz来提交,手工填写的commit message可能会被拒绝!
standard-version
通过以上工具, 我们的 commit message 应该是符合规范的。
现在我们就可以借助 standard-version, 自动生成changelog,甚至是语义化的版本号(Semantic Version)。
安装:
package.json中配置:
效果:
可以看到,它会自动更新版本,生成changelog,以及打tag。
如果我们继续commit,再次release时,standard-version会基于 Semantic Version 生成下一个版本,同时生成上一个tag到此时为止的commit changelog: