一直都感觉项目里面的 Commit Message 十分混乱,大家都很随意的提交,随便几个字就敷衍过去了。在查看提交记录的时候,都不知道别人干了什么,还要去代码里看看,然而代码里也没注释,我经常看的一脸懵逼。直到有一回阅读别的项目的代码,看到他们的 Commit Message 整齐划一,一眼就能理解变更历史。经过搜索,才知道他们采用的是 Angular 规范。
Commit Message 有很多规范,如 jQuery、Angular 等。使用规范化的 Commit Message 有很多好处:
- 清晰地知道每个 commit 的变更内容
- 方便通过 Commit Message 查找特定版本
- 可以生成 Change Log
- 可以依据特定 commit类型 触发构建或者发布流程
- 根据 commit 类型,确定相应的版本号
其中 Angular规范 是目前使用最广泛、最多的,这里只做 Commit Message 格式规范的整理。
主要参考:https://github.com/angular/angular/blob/master/CONTRIBUTING.md
Commit Message 格式
每一条 commit message 包含三部分,header, body 和 footer,格式如下:
|
|
- header: 必填项,必须符合 **Commit Message Header **格式。
- **body: **必填项(除了“docs”以外),必须至少有20个字符,必须符合 Commit Message Body 格式。
- **footer: **选填项,必须符合 Commit Message Footer 格式。
(任何一行 commit message 都不能超过100个字符)
Commit Message Header
|
|
其中
type 须为以下八种之一:
- build: 构建系统或外部依赖项的变更 (example scopes: gulp, broccoli, npm)
- ci: 配置项的变更 (example scopes: Circle, BrowserStack, SauceLabs) (Configurtion Items)
- docs: 文档变更 (documentation)
- feat: 新功能 (feature)
- fix: bug修复
- perf: 性能提升的变更 (performance)
- refactor: 代码重构,不涉及bug修复和新功能添加
- test: 新增测试样例或者更改已有测试样例
- (chore: 其余变更,如:文档修改,构建流程)
(不知道为什么chore没有在参考文档里)
**scope **用于说明 commit 影响范围的,比如数据称、控制层、视图层等,名词。
**summary **简单明了等描述改动点,描述约束如下:
- 使用祈使句、现在时,使用 “change”,不使用 “changed” 或 “changes”
- 首字母小写
- 结尾不加句号 (.)
Commit Message Body
与 **summary **使用的语句形式一样,祈使句、现在时,用于解释为什么要做这样的改动,可以与上一个版本的代码做对比,来说明变化的影响。
Commit Message Footer
用来描述重大不兼容的改变或者指引到相应的 issues 列表等,格式如下:
|
|
例子
官方的例子应该是最权威的了吧,github commit 记录: https://github.com/angular/angular/commits/master ,这里简单截取几条。
|
|
总结一下
这篇博文基本没我啥事儿,简单的翻译了下参考链接的内容,主要用于整理,方便之后我再回来看 Commit Message 规范格式。其实我在使用中也只是简单的规范一下自己的 commit message。