Skip to content

约定式提交

和语义化版本类似,约定式提交 对我也有着特别的意义。

什么是约定式提交

约定式提交是一种提交信息相关的规范。

基本格式

最基本的约定式提交格式如下:

txt
<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

<类型>[可选 范围]: <描述>

[可选 正文]

[可选 脚注]
  • 类型常常使用 fix(表示修复问题,对应语义化版本的 PATCH)、feat(表示新增功能,对应语义化版本的 MINOR),当然也有别的类型,比如 build(表示构建相关)、docs(表示文档相关)等。你可以参考 angular/angularjs DEVELOPERS.md Git Commit Guidelinesangular/angular CONTRIBUTING.md Commit Message Format 了解更多类型。
  • 在脚注中包含 BREAKING CHANGE: 或 <类型>(范围) 后面有一个 ! 的提交,表示引入了破坏性 API 变更(对应语义化版本中的 MAJOR)。破坏性变更可以是任意类型提交的一部分。

为什么要用约定式提交

理由和语义化版本是类似的。

约定式提交已经被广泛采用。遵循约定式提交,可以获取到清晰的提交历史,有利于编写自动化工具,自动确定语义化版本和改动日志等,可以为开发带来实打实的便利。

谁在用约定式提交

npmwebpackviterollupantd 等库就是遵循约定式提交的巨头。

约定式提交的缺陷

我个人认为,约定式提交有两个缺陷。

第一个缺陷是,类型对新手来说很难确定,可能会出现不够 整洁 的提交。

第二个缺陷是,描述带有主观认识,可能不够 准确

和语义化版本的关联

一旦你在使用约定式提交,你不再需要自行翻看提交历史来确认你的下一个版本。很多语义化版本工具可以自动确定下一个版本,一般也允许你手动确定下一个版本。但既然你已经选择了语义化版本和约定式提交,为什么不投入自动化的怀抱,让自己的生活更轻松一些呢?

实践

commitlint 是我首先推荐的工具,它能有效地检查提交信息。

我建议使用 @commitlint/config-conventional 获取和约定式提交一致的体验,如果你倾向于 angular 风格,可以使用 @commitlint/config-angular

而要在命令行中使用,则需要 @commitlint/cli。你可以配合 husky 或者 simple-git-hooks 来调用它,我更喜欢轻量的后者。

对于新手,你可以尝试使用 commitizen。它带有一些额外的提示,方便新手使用。你可以搭配 @commitlint/cz-commitlint@commitlint/prompt 来使用。

本篇是系列的第二篇,我建议你阅读完 语义化版本、约定式提交(就是本篇)和 改动日志 再开始实践!😄

Released under the MIT License.