Github提交规约
在协作软件开发中,一个组织良好且易于理解的提交历史是无价的。采用标准化的提交信息格式不仅能增强可读性,还能简化项目的进展。开源开发者大部分都是参考AngularJS的提交规范,以这个作为范本。本文将介绍一种广为接受的方法来构建您的GitHub提交,以提高协作效率。
提交信息的构成
标准化的提交信息通常由三个不同的部分组成,并用空行隔开:
- 标题行 (Header): 这是必需的单行,简明扼要地描述了更改的类型和所做工作的摘要。
- 正文 (Body): 这部分详细说明了更改的“原因”和“内容”。它提供了背景信息,详述了所做的修改,并可以涉及开发方法。
- 页脚 (Footer): 这个可选部分用于补充信息,例如对缺陷跟踪编号的引用(例如,“Closes #123”)或关于重大变更的说明。
标题行:类型、范围和主题
标题行对于快速理解提交的目的很重要。它遵循特定的结构:
<类型>(<范围>): <主题>
-
类型 (必需): 定义提交的类别。它必须是以下预定义类型之一:
feat
: 新功能。fix
: Bug 修复。perf
: 提升性能的代码更改。refactor
: 既未修复错误也未添加功能的代码更改(例如,重命名变量)。docs
: 仅文档更改。style
: 不影响代码含义的更改(空格、格式、缺少分号等)。test
: 添加缺失的测试或更正现有测试。build
: 影响构建系统或外部依赖项的更改(示例范围:gulp、broccoli、npm)。revert
: 撤销先前的提交。ci
: 对 CI 配置文件和脚本的更改(示例范围:Travis、Circle、BrowserStack、SauceLabs)。chore
: 不修改src
或test
文件的其他更改(例如,更新 grunt 任务)。release
: 创建一个新版本。workflow
: 对自动化工作流程的更改。
-
范围 (可选): 这提供了额外的上下文信息,并括在圆括号中。它可以指定受更改影响的代码库部分,例如
global
、common
、route
、component
、utils
或build
。例如:fix(parser)
。 -
主题 (必需): 这是对提交目的的简明摘要。它应该简短,理想情况下不超过 50 个字符,并以完成以下句子的方式书写:如果应用此提交,它将主题。
正文
提交信息的正文是您可以提供有关更改更详细说明的地方。它应该解释更改背后的动机,并将其与以前的行为进行对比。这部分可以跨越多行,并且在必要时可以在这里详细说明所做的具体修改和开发思路。不要长篇大论,注意要简洁明了。
页脚
页脚主要用于两个目的:
- 重大更改 (Breaking Changes): 任何引入重大 API 更改的提交都必须在页脚中明确指出,以
BREAKING CHANGE:
开头,后跟对更改、理由和迁移说明的描述。也可以在标题中的类型/范围后添加!
(例如,feat(api)!: send an email to the customer when a product is shipped
)以进一步突出显示重大更改。 - 问题引用 (Issue Referencing): 如果提交涉及或关闭了项目问题跟踪器中的特定问题,您应该在此处引用它们(例如,
Closes #234
,Fixes #123, #456
)。
Github Emoji
虽然约定式提交的结构化类型为提交提供了清晰的分类,但合理使用Emoji可以进一步增强提交信息的可视性和快速识别性。例如:
- ✨ ✨ 代表引入新功能 (可用于 feat)
- 🐛 🐛 代表修复 bug (可用于 fix)
- 📚 📚 代表文档相关的更改 (可用于 docs)
- 💅 💄 代表代码风格或 UI 美化 (可用于 style)
- ♻️ ♻️ 代表代码重构 (可用于 refactor)
- ⚡️ ⚡ 代表性能提升 (可用于 perf)
- 🚧 🚧 代表工作正在进行中 (可用于 chore 或 WIP 类型的提交)
- 🚀 🚀 代表部署相关的更改 (可用于 ci 或 build)
- 📝 📝 代表撰写或更新文本文件(非文档)
- 🚨 🚨 代表修复严重问题或警告
更多Emoji参考GitHub Commit Emoji Guide
自动化与强制执行
为确保一致性并遵守这些规范,强烈建议自动执行提交信息验证。像Husky这样的工具可以与Git的pre-commit钩子集成,以在提交信息最终确定之前检查它们是否符合定义的格式。
总结
通过采用这些GitHub提交规范,开发团队可以显著改善其工作流程,增强协作,并维护一个清晰、易于理解且有价值的提交历史。