前言

在多人协作开发项目时,如果没有规范约束 git commit message,容易造成各种提交的风格五花八门。而规范的提交信息能让他人快速了解此次提交的目的,还可以有效的输出 CHANGELOG,对项目的管理至关重要。

Commit message 的格式

目前应用比较广泛的是 Angular 团队的规范,它的 message 格式如下:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

type 用于说明 commit 的类别,可以使用如下:

  • feat:新功能
  • fix:修复 bug
  • docs:文档修改
  • style:代码格式(不影响代码运行的变动)
  • refactor:代码重构(即不是新增功能,也不是修改 bug 的代码变动)
  • perf:优化相关,比如提升性能、体验
  • test:增加测试
  • revert:回滚
  • chore:其他修改,比如构建流程、依赖管理
  • ...

scope 用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同

subject 是 commit 目的的简短描述

body 是对本次 commit 的详细描述,可以分成多行

footer 一些备注,通常是 BREAKING CHANGE 或修复的 bug 的链接

Commitizen

了解规范格式后,就需要通过 Commitizen 借助它提供的 git cz 命令替代我们的 git commit 命令,帮助我们生成符合规范的 commit message。

推荐在本地安装的方式

npm install commitizen --save-dev

接着为 commitizen 初始化 Adapter

在 npm 5.2+ 你可以使用 npx 来初始化 Adapter

npx commitizen init cz-conventional-changelog --save-dev --save-exact

npm < 5.2 可以执行 ./node_modules/.bin/commitizen 或者 ./node_modules/.bin/git-cz

并在 package.json 中添加 npm scripts 运行脚本

package.json 会新增如下配置:

"scripts": {
    "commit": "git-cz"
},
"devDependencies": {
    "commitizen": "^4.0.3",
    "cz-conventional-changelog": "^3.1.0",
},
"config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
}

之后就可以在项目中执行 npm run commit 或者 npx git cz,效果如下:

standard-version: 自动生成 CHANGELOG

使用工具后我们的工程 commit message 应该是符合 Angular 团队那套,这样也便于我们借助 standard-version 这样的工具,自动生成 CHANGELOG。

本地安装

npm install standard-version --save-dev

在 package.json 添加运行脚本

{
  "scripts": {
    "release": "standard-version"
  }
}

运行脚本后,效果大致如下:

更多使用特性详见其文档

结语

查看完整的 demo

此文是适合自己的一个简单通用配置,如使用 commitlint 更严格的校验 message 以及其他自定义配置,可见以下参考资料中的链接

参考资料