日历化版本 / Calendar Versioning
2021-09-22 本文已影响0人
hemiao3000
CalVer 不是基于任意数字,而是基于项目发布日期 的版本控制约定
版本随着时间的推移会变得更好。
对于维护者,版本使我们在不断扩大的生态系统中 可以指定精确的依赖关系。对于卖家和推广者来说, 项目的版本是一个品牌的活力部分。对我们所有人来说, 版本使我们在升级到将来时可以参考过去。
不同的项目使用不同的系统命名版本,但是常见的 实践已经浮现出来。例如,以点分隔的数字(例如, 3.1.4)就是全部。另一种常见的版本模式 包含一个基于时间的元素,通常是发布日期的一部分。
这种基于日期的方法被称为 “日历化版本”(Calendar Versioning), 或者简称 CalVer。
方案
有多种日历化版本方案,长期被各种大小项目 使用。与其宣布某个方案为 CalVer,更重要的是 要认识到每个方案的可行性并 设计一个适合项目的方案。首先, 版本的各部分:
- 主要 - 版本中的第一个数字。2 和 3 是 Python 的著名 主要版本。主要部分是基于日历的最常见组件。
- 次要 - 版本中的第二个数字。7 是 Python 的最受欢迎的 次要版本。
- 微小 - 版本中的第三个且通常是最终数字。有时 称为 “补丁” 部分。
- 修饰符 - 可选的文本标记,例如 “dev”、“alpha”、“beta”、 “rc1”,依此类推。
绝大多数现代版本标识符是由两个或 三个数字段组成,以及可选的修饰符。通常 建议不要使用四个数字段的版本。
如下面的 样例学习 所示,项目 发现了不止一种有用的方法在版本中使用 日期。 作为对比,CalVer 并未像 “语义化版本” 那样选择单一方案, 而是引入了开发人员的 标准术语:
- YYYY - 年份全称 - 2006、2016、2106
- YY - 年份缩写 - 6、16、106
- 0Y - 以零填充的年份 - 06、16、106
- MM - 月份缩写 - 1、2 ... 11、12
- 0M - 以零填充的月份 - 01、02 ... 11、12
- WW - 星期(自年初开始)- 1、2、33、52
- 0W - 以零填充的星期 - 01、02、33、52
- DD - 日 - 1、2 ... 30、31
- 0D - 以零填充的日 - 01、02 ... 30、31
请注意,传统的递增版本号是从 0 开始, 而日期段是从 1 开始的,且年份缩写和以零填充的年份 是相对于 2000 年。还请注意,星期的使用 通常与月/日互斥。
假定采用格里高利历,UTC的惯例也是如此。从技术上讲可以使用任何日历, 只要提供的项目声明使用哪一个。