Skip to content

语义化版本控制规范

约 672 字大约 2 分钟

版本控制

2025-06-12

语义化版本控制(Semantic Versioning - SemVer)是一种被广泛采用的版本号命名规范,用于明确软件版本之间的兼容性和变更程度。以下是其主要内容:

一、正式版本

正式版本采用 MAJOR.MINOR.PATCH 的三段式格式,例如 2.5.8

  • MAJOR:主版本号,做了不兼容的 API 修改
  • MINOR:次版本号,做了向下兼容的功能性新增
  • PATCH:修订号,做了向下兼容的问题修正

二、预发布版本

在正式版本的基础上,还可以添加预发布版本信息,主要分以下三种:

  • alpha: 早期测试,功能不完整
  • beta: 功能完整但可能有 bug
  • rc (release candidate): 候选发布版本

例如:

1.0.0-alpha.1
1.0.0-beta.2
1.0.0-rc.1

三、版本号递增规则

  1. MAJOR 版本号递增的情况:

    • 移除或修改原有 API,导致不兼容变更
    • 重大功能重构导致使用方式改变
    • 重大架构变更,可能会影响到 API
  2. MINOR 版本号递增的情况:

    • 新增向后兼容的功能
    • 标记废弃功能(但不移除)
    • 内部实现改进,不影响 API 使用
  3. PATCH 版本号递增的情况:

    • 修复 bug,不引入新功能
    • 重构代码但不影响 API
    • 文档更新

四、规范细则

  1. 版本发布后,禁止修改该版本的内容,任何修改都必须以新版本发布

  2. 任何版本号都必须遵循 MAJOR.MINOR.PATCH 的格式,且不允许跳过任何数字部分

  3. 0.y.z,这样的版本号表示开发初期,正式发布前的版本

  4. 1.0.0 版本,表示 API 已稳定,后续变更需遵循版本号递增规则

  5. 预发布版本,可以在正式版本号后追加 - 和标识符,例如:1.0.0-alpha1.0.0-beta.11.0.0-rc.2

  6. 构建元数据,可以在版本号或预发布标识后追加 + 和标识符,例如:1.0.0-alpha.11.0.0-rc.108

示例

  • 0.1.00.2.0 (开发阶段新增功能)
  • 0.9.01.0.0 (首个稳定版本)
  • 1.0.01.0.1 (修复 bug)
  • 1.0.11.1.0 (新增兼容功能)
  • 1.1.02.0.0 (不兼容变更)

为什么使用 SemVer?

  1. 明确依赖关系 - 开发者可以明确知道版本更新是否会破坏现有功能
  2. 自动化工具支持 - 包管理器(npm, pip 等)可以智能处理依赖关系
  3. 清晰的变更沟通 - 通过版本号就能了解变更的性质和影响范围

大多数现代软件包管理系统(如 npm、Composer、NuGet 等)都内置支持语义化版本控制规范。

更新日志

2025/8/24 08:17
查看所有更新日志
  • e7112-1