小白篇 -- 规范化 commit message

1,017 阅读3分钟

一、前情提要

Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。

git commit -m "init"

Untitled.png

一般来说,commit message 应该清晰明了,说明本次提交的目的。

Untitled 1.png

二、规范化 commit message 的好处

  • 提供更多的历史信息,方便快速浏览;
  • 可以过滤某些commit(比如文档改动),便于快速查找信息
  • 可以直接从commit生成Change log

三、commit message 的格式

目前行业比较流行也工人比较好的规范是Angular 团队的规范,如下:

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

分别对应 Commit message 的三个部分:HeaderBodyFooter;其中,Header 是必需的,BodyFooter 可以省略。

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

github.com/commitizen/…

安装

npm install -g commitizen

在项目目录里,运行下面的命令,使其支持 Angular 的 Commit message 格式

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

请注意,如果您想强制安装在旧适配器的顶部,您可以应用该--force参数。有关这方面的更多信息,只需运行commitizen help

上面的命令为你做了三件事:

  1. 安装 cz-conventional-changelog 适配器 npm 模块;
  2. 将其保存到package.json'sdependenciesdevDependencies
  3. config.commitizen密钥添加到文件的根目录,package.json如下所示:
"config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
  }

如下所示:

往后,用到 git commit 命令,一律改为使用 git cz ,Ï用来生成符合格式的 Commit message。

Untitled 2.png

五、使用 husky + commitlint 检查 Commit message 是否符合规范

小白篇 -- husky 6.x 版本升级指南 - 掘金

六、生成 Change log

github.com/conventiona…

如果你的所有 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

github.com/streamich/g…

以上就基本能够满足我们的规范化使用了,git-cz 美化下提交。

npm install -g git-cz
commitizen init git-cz --save-dev --save-exact

如果报错,就按照报错解决方案来;在命令后加 --force

Untitled 3.png