欢迎访问104网
约定式提交规范是一种基于提交信息的轻量级约定。 它提供了一组简单规则来创建清晰的提交历史; 这更有利于编写自动化工具。 通过在提交信息中描述功能、修复和破坏性变更, 使这种惯例与SemVer 相互对应。
提交说明的结构如下所示:
原文:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
译文:
<类型>[可选 范围]: <描述>
[可选 正文]
[可选 脚注]
提交说明包含了下面的结构化元素,以向类库使用者表明其意图:
fix: 类型为 fix
的提交表示在代码库中修复了一个 bug(这和语义化版本中PATCH 相对应)。
feat: 类型 为 feat
的提交表示在代码库中新增了一个功能(这和语义化版本中的MINOR 相对应)。
BREAKING CHANGE: 在脚注中包含 BREAKING CHANGE:
或 <类型>(范围) 后面有一个 !
的提交,表示引入了破坏性 API 变更(这和语义化版本中的MAJOR 相对应)。 破坏性变更可以是任意 类型 提交的一部分。
除 fix:
和 feat:
之外,也可以使用其它提交 类型 ,例如 @commitlint/config-conventional (基于Angular约定)中推荐的 build:
、chore:
、 ci:
、docs:
、style:
、refactor:
、perf:
、test:
,等等。
脚注中除了 BREAKING CHANGE: <description>
,其它条目应该采用类似git trailer format 这样的惯例。
其它提交类型在约定式提交规范中并没有强制限制,并且在语义化版本中没有隐式影响(除非它们包含 BREAKING CHANGE)。
可以为提交类型添加一个围在圆括号内的范围,以为其提供额外的上下文信息。例如 feat(parser): adds ability to parse
arrays.
。
feat: allow provided config object to extend other configs
BREAKING CHANGE: `extends` key in config file is now used for extending other config files
!
字符以提醒注意破坏性变更的提交说明feat!: send an email to the customer when a product is shipped
!
的提交說明feat(api)!: send an email to the customer when a product is shipped
!
和 BREAKING CHANGE 脚注的提交说明chore!: drop support for Node 6
BREAKING CHANGE: use JavaScript features not available in Node 6.
docs: correct spelling of CHANGELOG
feat(lang): add polish language
fix: prevent racing of requests
Introduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.
Remove timeouts which were used to mitigate the racing issue but are
obsolete now.
Reviewed-by: Z
Refs: #123
本文中的关键词 “必须(MUST)”、“禁止(MUST NOT)”、“必要(REQUIRED)”、“应当(SHALL)”、“不应当(SHALL NOT)”、“应该(SHOULD)”、“不应该(SHOULD NOT)”、“推荐(RECOMMENDED)”、“可以(MAY)” 和 “可选(OPTIONAL)” ,其相关解释参考RFC 2119 。
feat
或 fix
, 其后接可选的 范围字段,可选的 !
,以及必要的 冒号(英文半角)和空格。feat
类型。fix
类型。fix(parser):
:<space>
或 <space>#
作为分隔符,后面再紧跟令牌的值(受git trailer convention 启发)。Acked-by
(这样有助于 区分脚注和多行正文)。有一种例外情况就是 BREAKING CHANGE
,它可以 被认为是一个令牌。BREAKING CHANGE
,后面紧跟着冒号、空格,然后是描述,例如: BREAKING CHANGE: environment variables now take precedence over config files 。!
直接放在 :
前面标记出来。 如果使用了 !
,那么脚注中可以 不写 BREAKING CHANGE:
, 同时提交信息的描述中应该 用来描述破坏性变更。feat
和 fix
之外的类型,比如:docs: updated ref docs. 。BREAKING CHANGE
必须 是大写的。我们建议你按照假设你已发布了产品那样来处理。因为通常总 有人 使用你的软件,即便那是你软件开发的同事们。他们会希望知道诸如修复了什么、哪里不兼容等信息。
大小写都可以,但最好是一致的。
回退并尽可能创建多次提交。约定式提交的好处之一是能够促使我们做出更有组织的提交和 PR。
它阻碍的是以杂乱无章的方式快速前进。它助你能在横跨多个项目以及和多个贡献者协作时长期地快速演进。
约定式提交鼓励我们更多地使用某些类型的提交,比如 fixes
。除此之外,约定式提交的灵活性也允许你的团队使用自己的类型,并随着时间的推移更改这些类型。
fix
类型提交应当对应到 PATCH
版本。feat
类型提交应该对应到 MINOR
版本。带有 BREAKING CHANGE
的提交不管类型如何,都应该对应到 MAJOR
版本。
我们推荐使用 SemVer 来发布你对于这个规范的扩展(并鼓励你创建这些扩展!)
feat
写成了 fix
在合并或发布这个错误之前,我们建议使用 git rebase -i
来编辑提交历史。而在发布之后,根据你使用的工具和流程不同,会有不同的清理方案。
feat
写成了 feet
在最坏的场景下,即便提交没有满足约定式提交的规范,也不会是世界末日。这只意味着这个提交会被基于规范的工具错过而已。
并不!如果你使用基于 squash 的 Git 工作流,主管维护者可以在合并时清理提交信息——这不会对普通提交者产生额外的负担。 有种常见的工作流是让 git 系统自动从 pull request 中 squash 出提交,并向主管维护者提供一份表单,用以在合并时输入合适的 git 提交信息。
还原提交(Reverting)会比较复杂:你还原的是多个提交吗?如果你还原了一个功能模块,下次发布的应该是补丁吗?
约定式提交不能明确的定义还原行为。所以我们把这个问题留给工具开发者, 基于 类型 和 脚注 的灵活性来开发他们自己的还原处理逻辑。
一种建议是使用 revert
类型,和一个指向被还原提交摘要的脚注:
revert: let us never again speak of the noodle incident
Refs: 676104e, a215868
Copyright © 2018-2024 104网 版权所有 | 备案号:京ICP备104