学习Vue提交规范

62 阅读6分钟

提交规范

这段内容定义了 Vue.js 项目中 Git 提交消息的规范,目的是让提交消息标准化、结构化,便于自动化生成变更日志,同时也有助于团队成员更清晰地理解每次提交的目的和影响。以下是各部分内容的具体作用:

完整消息格式

  • 消息组成:说明提交消息由标题(header)、正文(body)和页脚(footer)组成,标题包含类型(type)、范围(scope)和主题(subject),并强调标题是必需的,范围是可选的,为开发者提供了详细的消息结构框架。
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

各部分详细规则

回滚(Revert)

  • 格式要求:如果提交是对之前提交的回滚,消息应以 revert: 开头,后面跟上被回滚提交的标题,并在正文中说明回滚的具体提交哈希值,方便追溯和管理代码变更历史。

类型(Type)

  • 日志显示规则:规定以 featfix 或 perf 开头的提交会出现在变更日志中,若包含 BREAKING CHANGE,则无论类型如何都会出现在变更日志中。同时,给出了非变更日志相关任务的建议前缀,如 docschorestylerefactor 和 test,帮助开发者根据提交内容选择合适的类型前缀。

范围(Scope)

  • 定义与示例:解释范围用于指定提交变更的具体位置,如 corecompilerssrv-modeltransition 等,使提交消息更具针对性和可读性。

主题(Subject)

  • 描述要求:要求主题使用祈使语气的现在时态,不使用过去式或第三人称;首字母不大写;句末不加句号,使主题简洁明了,准确传达变更内容。

正文(Body)

  • 描述规范:同样要求使用祈使语气的现在时态,应包含变更的动机,并与之前的行为进行对比,帮助团队成员理解变更的原因和影响。

页脚(Footer)

  • 内容说明:页脚用于包含关于重大变更(Breaking Changes)的信息,以及引用该提交所解决的 GitHub 问题。重大变更信息应以 BREAKING CHANGE: 开头,清晰传达变更的影响和范围。

简要正则要求

/^(revert: )?(feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types)(\(.+\))?: .{1,50}/

这个正则表达式用于验证 Git 提交消息的格式,确保提交消息遵循特定的结构规范,以便自动化生成变更日志和便于团队成员理解每次提交的目的。

下面我们将逐步分析这个正则表达式的各个部分:

类型(Type)完整列表

类型用途
feat新增功能(Feature)。
fix修复 Bug。
polish代码优化(非功能或 Bug 修复,如用户体验改进)。
docs文档更新。
style代码风格调整(如空格、分号,不影响逻辑)。
refactor代码重构(既非新功能也非 Bug 修复)。
perf性能优化。
test测试用例新增或修改。
workflow构建流程或工具链变动(如 CI/CD 配置)。
chore杂项变更(如依赖更新、配置文件调整)。
types类型定义文件修改(如 TypeScript 类型补全)。
  1. ^

    • 这是一个锚点,表示匹配字符串的开始位置。它确保正则表达式从提交消息的开头开始匹配。
  2. (revert: )?

    • () 是捕获组,用于将其中的内容作为一个整体进行处理。
    • ? 是量词,表示前面的元素(即 revert: 这个字符串)出现 0 次或 1 次。这意味着提交消息可以以 revert: 开头,也可以不以它开头。如果以 revert: 开头,通常表示该提交是对之前某个提交的回滚操作。
  3. (feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types)

    • () 同样是捕获组。
    • | 是或运算符,表示在它两边的元素中选择其一进行匹配。这里列出了一系列可能的提交类型,如 feat(新特性)、fix(修复 Bug)、docs(文档更新)等。提交消息必须包含其中一个类型。
  4. ((.+))?

    • () 是捕获组。
    • (` 和 `) 分别是对左括号 ( 和右括号 ) 的转义,因为括号在正则表达式中有特殊含义,需要使用反斜杠进行转义才能表示普通的括号字符。
    • .+ 表示匹配任意字符(除换行符外)至少一次。
    • ? 是量词,表示前面的捕获组 ((.+)) 出现 0 次或 1 次。这部分用于指定提交的作用范围,例如 (compiler) 表示该提交的更改主要影响编译器部分。这个范围是可选的。
  5. :

    • 这是一个普通字符,要求提交消息在类型(或类型和范围)后面必须紧跟一个冒号 :
  6. ****:

    • 这是一个空格字符,要求冒号后面必须有一个空格。
  7. .{1,50}

    • . 表示匹配任意字符(除换行符外)。
    • {1,50} 是量词,表示前面的元素(即任意字符)出现 1 到 50 次。这部分用于匹配提交消息的主题,要求主题长度至少为 1 个字符,最多为 50 个字符。

示例匹配

示例解析

1. 新增功能(Feature)

plaintext

复制

feat(compiler): add 'comments' option
  • 类型feat(新功能)
  • 作用域compiler(影响编译器模块)
  • 描述: 新增 comments 配置选项。
  • CHANGELOG 位置: 出现在  "Features"  章节下的 compiler 子标题中。

2. 修复 Bug(Fix)

plaintext

复制

fix(v-model): handle events on blur close #28
  • 类型fix(Bug 修复)
  • 作用域v-model(涉及 v-model 功能)
  • 描述: 修复 blur 事件处理问题。
  • close #28: 自动关闭 GitHub Issue #28。
  • CHANGELOG 位置: 出现在  "Bug Fixes"  章节下的 v-model 子标题中。

3. 性能优化(Performance)

plaintext

复制

perf(core): improve vdom diffing by removing 'foo' option
BREAKING CHANGE: The 'foo' option has been removed.
  • 类型perf(性能优化)
  • 作用域core(核心模块)
  • 描述: 通过移除 foo 选项优化虚拟 DOM 比对性能。
  • BREAKING CHANGE: 标注这是一个破坏性变更(升级需注意)。
  • CHANGELOG 位置: 同时出现在  "Performance Improvements"  和  "Breaking Changes"  章节。

4. 回滚提交(Revert)

plaintext

复制

revert: feat(compiler): add 'comments' option
This reverts commit 667ecc1654a317a1333bb17617d973392f415f02.
  • 类型revert(回滚)
  • 原始提交: 回滚了哈希为 667ecc1 的提交(该提交曾新增 comments 选项)。
  • CHANGELOG 位置: 出现在  "Reverts"  章节(若与原提交在同一版本则不重复显示)。

常见错误

  1. 缺失类型或描述
    ❌ update compiler → ✅ fix(compiler): handle edge case
  2. 作用域不明确
    ❌ fix: bug → ✅ fix(runtime): handle null props
  3. 描述过长
    ❌ fix: something went wrong when user clicks the button under specific conditions
    ✅ fix(button): handle click event in disabled state