Branch校验
安装
1 | npm i husky validate-branch-name --save-dev |
Husky requires Node >= 8.6.0 and Git >= 2.13.2
Husky version >= 1.0.0
笔记时validate-branch-name版本为1.0.4
配置
1 | // package.json |
Message校验
安装
1 | npm install --save-dev @commitlint/{cli,config-conventional} |
配置
支持以下格式的配置文件:.commitlintrc.js, .commitlintrc.json, or .commitlintrc.yml file or a commitlint field in package.json.
比如我们在项目目录下创建配置文件.commitlintrc.js, 写入:
1 | module.exports = { |
**结合husky**,package.json中添加如下:
1 | // package.json |
Passing husky’s HUSKY_GIT_PARAMS to commitlint via the -E|--env flag directs it to the relevant edit file. -e would default to .git/COMMIT_EDITMSG.
Message辅助填写
Commitizen: 替代你的 git commit
它提供的 git cz 命令替代我们的 git commit 命令, 帮助我们生成符合规范的 commit message.
cz-conventional-changelog (一个符合 Angular团队规范的 preset). 使得 commitizen 按照我们指定的规范帮助我们生成 commit message.
全局安装
1 | npm install -g commitizen cz-conventional-changelog |
使用
用git cz替代git commit命令即可。
推荐规范说明
目前规范使用较多的是 Angular 团队的规范, 继而衍生了Conventional Commits specification. 很多工具也是基于此规范, 它的message格式如下:
1 | <type>(<scope>): <subject> |
通过 git commit 命令带出的 vim 界面填写的最终结果应该类似如上这个结构, 大致分为三个部分(使用空行分割):
标题行: 必填, 描述主要修改类型和内容
主题内容: 描述为什么修改, 做了什么样的修改, 以及开发的思路等等
页脚注释: 放 Breaking Changes 或 Closed Issues
分别由如下部分构成:
type: commit 的类型
feat: 新特性
fix: 修改问题
refactor: 代码重构
docs: 文档修改
style: 代码格式修改, 注意不是 css 修改
test: 测试用例修改
chore: 其他修改, 比如构建流程, 依赖管理.
scope: commit 影响的范围, 比如: route, component, utils, build…
subject: commit 的概述, 建议符合 50/72 formatting
body: commit 具体修改内容, 可以分为多行, 建议符合 50/72 formatting
footer: 一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接.
这样一个符合规范的 commit message, 就好像是一份邮件。
拓展阅读1:自定义校验规则、辅助规则
也许 Angular 的那套规范我们不习惯, 那么可以通过指定 Adapter cz-customizable 指定一套符合自己团队的规范.
安装
1 | npm i -g cz-customizable |
修改 .czrc 或 package.json
1 | // .czrc |
自定义规则
在~/ 或项目根目录下创建 .cz-config.js 文件, 维护你想要的格式,比如: leohxj/.cz-config
对自定义规则的校验
如果你使用的是自定义的 commitizen adapter, 那么你需要修改commitlint的校验配置为commitlint-config-cz
1 | npm i -D commitlint-config-cz |
.commitlintrc.js修改为:
1 | module.exports = { |
拓展阅读2:standard-version 自动生成 CHANGELOG
通过以上工具的帮助, 我们的工程 commit message 应该是符合 Angular团队那套, 这样也便于我们借助 standard-version 这样的工具, 自动生成 CHANGELOG, 甚至是 语义化的版本号(Semantic Version).