# 为什么需要 commit 管理?
在团队协作开发一个项目的过程中,尤其是一些相对大型的、多人合作的 monorepo 项目中,每个团队成员完成一项特定功能后的提交说明往往关系着整个项目的开发流程的统筹推进与管理。而反应这些团队成员完成的工作的,除了代码变更本身,便是成员提交的 commit 信息了。
一个良好的 commit 信息是由团队内部成员进行维护的,这也是多人协作中不可或缺的一部分。良好的 commit 信息可以让人一目了然你所完成的工作,并且可以在提 PR 的时候写明你所完成的功能。
# commitlint
什么是 commitlint
?
- commitlint 是一款用于校验和规范化
git commit message
的工具,它通过定制化的规则要求提交信息遵循特定格式,可以在commit
时自动进行校验,拒绝不合规范的提交,以此提高提交信息质量,使其更具可读性和一致性。
配置文件是哪个?
- 见
.commitlintrc.json
。
什么是 @commitlint/config-conventional
?
- 它是一组常见配置的规则集合,其具体配置可见该链接中的相关描述。
commitlint
如何与 husky
配合使用?
- 由于
commitlint
需要获取用户的commit message
输入,因此它将检查命令放在 git 钩子的commit-msg
钩子中,见.husky/commit-msg
。
# commit message
提交说明 (commit message) 的结构如下所示:
<type>([optional scope]): <description>
[optional body]
[optional footer(s)]
提交说明 (commit message) 包含了下面的结构化元素,以向类库使用者表明其意图:
fix
:表示在代码库中修复了一个 bug(这和语义化版本中的 PATCH 相对应)。feat
:表示在代码库中新增了一个功能(这和语义化版本中的 MINOR 相对应)。BREAKING CHANGE
:在footer
中包含BREAKING CHANGE
或type(scope)
后面有一个!
的提交,表示引入了破坏性 API 变更(这和语义化版本中的 MAJOR 相对应)。 破坏性变更可以是任意提交类型的一部分。
除 fix
和 feat
之外,也可以使用其它提交类型,如下:
build
:与构建系统或外部依赖相关的更改,例如修改构建脚本,更新依赖库等chore
:常规的代码维护和小修改,不属于应用程序逻辑或业务特性的更改ci
:与持续集成(Continuous Integration)和持续交付(Continuous Delivery)系统有关的更改docs
:仅与文档相关的更改,例如修改 README,添加注释等feat
:引入新特性的更改,通常是添加新功能或实现新需求fix
:修复 bug 或错误的更改,用于解决代码中的问题或缺陷perf
:优化性能的更改,用于提高应用程序的运行效率和速度refactor
:重构代码的更改,不涉及修复 bug 或添加新功能,主要是为了改进代码的结构和可读性revert
:撤销先前提交的更改,用于回滚代码到某个特定的版本style
:与代码风格和格式有关的更改,不影响代码的逻辑和功能test
:与测试有关的更改,包括添加新测试,修改现有测试或修复测试 bug