语义化版本规范

Releases 是指软件或项目的正式发布版本,在浏览一些开源仓库时,可以看到当前项目最新版本和历史版本

仔细研究就会发现,版本号不是以固定值递增的,有时候第三位加 1,有时候加 2,有时候直接把第一位加 1,后两位置 0。这些版本变化规律是什么,能否从版本号看出与上一个版本的差异?

这就引出了语义化版本规范

什么是语义化版本规范?

语义化版本规范(Semantic Versioning,缩写为 SemVer)是一种版本号的标识规范,它规定了版本号的表示、增加和比较方式,以及不同版本号代表的含义。SemVer 的出现,主要是为了解决因版本更新带来的包依赖问题

在软件管理的领域里存在着被称作“依赖地狱”的死亡之谷,系统规模越大,加入的包越多,你就越有可能在未来的某一天发现自己已深陷绝望之中

在依赖高的系统中发布新版本包可能很快会成为噩梦。如果依赖关系过高,可能面临版本控制被锁死的风险(必须对每一个依赖包改版才能完成某次升级)。而如

果依赖关系过于松散,又将无法避免版本的混乱(假设兼容于未来的多个版本已超出了合理数量)

当你项目的进展因为版本依赖被锁死或版本混乱变得不够简便和可靠,就意味着你正处于依赖地狱之中

通过 SemVer 来约束版本号的配置和增长,就可以通过版本号来向别人说明你的修改。别人在引用包时,就可以清楚的了解到版本之间的差异和兼容性情况,从而选用合适版本的包

简单来说:语义化版本规范就是一套约定俗成的规则,通过这个规则,可以清晰的看出不同版本之间的差异、兼容性,有助于解决软件包依赖和升级过程中的问题

语义化版本的格式

语义化版本格式为:主版本号.次版本号.修订号(X.Y.Z),其中 X、Y 和 Z 为非负的整数,且禁止在数字前方补零

版本号递增规则如下:

主版本号:当你做了不兼容的 API 修改

次版本号:当你做了向下兼容的功能性新增,这里有个不成文的约定,偶数为稳定版本、奇数为开发版本

修订号:当你做了向下兼容的问题修正

例如,V3.12.0 中,3 是主版本号、12 是次版本号、0 是修订号

先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸

常见的先行版本号有:

  • Snapshot:快照,也被称为开发版,处于开发阶段。这个版本的代码禁止用于生产环境

  • Alpha (α):内测版,内部交流或专业测试人员测试使用

  • Preview:预览版,与 Alpha 类似,有时还会细分 M1,M2 版本

  • Beta (β):公测版,专业爱好者大规模测试使用,存在一些 Bug,不适合一般用户使用

  • Gamma (λ):比较成熟的测试版

  • RC (Release Candidate):候选版本,处于 Gamma 阶段,该版本已经完成了全部功能并清除了大量的 Bug。 到了这个阶段,只会修复 Bug,不会对软件做任何大的更改。一般来说,Alpha -> Beta -> Gamma 是迭代的关系,RC1 -> RC2 是取舍的关系

  • Release:发行版本,正式发行的版本,已经经过测试,一般不会出现严重的 Bug,适合一般用户使用。对于不开源的软件, Release 可能是带有免费使用时间限制的版本

  • Stable:稳定版,同 Release 版本

举个例子,现在版本号为 V3.12.0-alpha.1,按照上面先行版本号的说明,可以看出这是一个内测版的项目,适合于内部交流或专业测试人员测试使用,生产环境中不推荐下载这个版本

语义化版本的规范

语义化版本控制规范比较多,介绍几个比较重要的:

  • 使用语义化版本控制的软件必须定义公共 API。该 API 可以在代码中被定义或出现于严谨的文档内。无论何种形式都应该力求精确且完整

  • 标记版本号的软件发行后,禁止改变该版本软件的内容,任何修改都必须以新版本发行、

  • 主版本号为零(0.y.z)的软件处于开发初始阶段,一切都可能随时被改变。这样的公共 API 不应该被视为稳定版

  • 1.0.0 的版本号用于界定公共 API 的形成。这一版本之后所有的版本号更新都基于公共 API 及其修改内容

  • 修订号 Z(x.y.Z | x > 0)必须在只做了向下兼容的修正时才递增,这里的修正其实就是 Bug 修复

  • 次版本号 Y(x.Y.z | x > 0)必须在有向下兼容的新功能出现时递增,在任何公共 API 的功能被标记为弃用时也必须递增,当有改进时也可以递增。其中可以包括修订级别的改变。每当次版本号递增时,修订号必须归零

  • 主版本号 X(X.y.z | X > 0)必须在有任何不兼容的修改被加入公共 API 时递增。其中可以包括次版本号及修订级别的改变。每当主版本号递增时,次版本号和修订号必须归零

总结

了解了语义化版本规范后,可以更好的看明白一个项目的迭代过程、轻松的在项目中指定依赖项的版本

最后看一个应用场景:

假设有个名为“救火车”的函数库,它需要另一个名为“梯子”并已经有使用语义化版本控制的包。当救火车创建时,梯子的版本号为 3.1.0。因为救火车使用了一

些版本 3.1.0 所新增的功能,你可以放心地指定依赖于梯子的版本号大于等于 3.1.0 但小于 4.0.0。这样,当梯子版本 3.1.1 和 3.2.0 发布时,你可

以将直接它们纳入你的包管理系统,因为它们能与原有依赖的软件兼容

参考:语义化版本 2.0.0 | Semantic Versioning (semver.org)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/637738.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文了解微服务

微服务架构是一种将应用程序划分为一组小型、独立的服务的方法,这些服务运行在自己的进程中,通常通过网络进行通信。微服务架构的主要优点是可以提高应用程序的灵活性和可扩展性,同时也使得开发、部署和维护更加容易。本文将介绍微服务架构的…

C语言 数组——查找算法的函数实现

目录 线性查找(Linear Search) 线性查找的性能 猜数游戏 二分查找(Binary Search) 并非吹毛求疵,鸡蛋里挑骨头 二分查找的性能 线性查找(Linear Search) 不 要求数据表是已排好序的  …

React-JSX基础

什么是JSX 概念:JSX是JavaScript和XML(HTML)的缩写,表示在JS代码中编写HTML模板结构,它是React中编写UI模板的方式 优势:1.HTML的声明式模板写法 2.JS的可编程能力 JSX的本质 JSX并不是标准的JS语法&…

HeyGen AI是什么?怎样使用HeyGen AI?

在数字时代,视频内容为王。无论是在社交媒体还是网站上,视频都以其独特的方式吸引着人们的眼球。然而,制作出专业水准的视频往往需要大量的时间和技术知识。HeyGen AI正是为了解决这一难题而诞生的。 HeyGen AI简介 HeyGen AI是一个创新的视…

【Fiddler抓包工具】第四节.断点设置和弱网测试

文章目录 前言一、断点设置 1.1 全局断点 1.2 局部断点 1.3 打断点的几种常用命令 1.4 篡改响应报文二、弱网测试 2.1 网络限速 2.2 精准限速总结 前言 一、断点设置 1.1 全局断点 特点: 中断Fiddler捕获的所有请求,包括…

You must call removeView() on the child‘s parent first.异常分析及解决

问题描述 对试图组件快速的左右滑动过程,发现某一张图片没加载出来,偶现crash 问题分析 view在上次已经是某个ParentView的child,然而现在又把它做为另外一个view的child,于是出现一个view有两个parent。所以就产生了这个错误。…

Python实现将LabelMe生成的JSON格式转换成YOLOv8支持的TXT格式

标注工具 LabelMe 生成的标注文件为JSON格式,而YOLOv8中支持的为TXT文件格式。以下Python代码实现3个功能: 1.将JSON格式转换成TXT格式; 2.将数据集进行随机拆分,生成YOLOv8支持的目录结构; 3.生成YOLOv8支持的YAML文件…

GetWay

SpringCloud - Spring Cloud 之 Gateway网关,Route路由,Predicate 谓词/断言,Filter 过滤器(十三)_spring.cloud.gateway.routes-CSDN博客 官网:Spring Cloud Gateway 工作原理:Spring Cloud G…

Spring Boot:SpringBoot 如何优雅地定制JSON响应数据返回

一、前言 目前微服务项目中RESTful API已经是前后端对接数据格式的标配模式了,RESTful API是一种基于REST(Representational State Transfer,表述性状态转移)原则的应用程序编程接口(Application Programming Interfac…

光伏电站在线监测智能诊断系统:开启无人值守新纪元

光伏电站在线监测智能诊断系统:开启无人值守新纪元 大家都知道光伏电站是通过汲取着太阳的光芒,为人类提供源源不断的电能源。然而,随着光伏电站规模的扩大和复杂性的增加,如何有效提高发电效率、减少人工维护成本,实…

前端菜鸡,对于35+程序员失业这个事有点麻了

“经常看到30岁程序员失业的新闻,说实话,有点麻。目前程序员供求关系并未失衡,哪怕是最基础的前端或者后台、甚至事务型的岗位也是足够的。 事实上,现在一个开出的岗位要找到一位尽职尽责能顺利完成工作的程序员并不是一件那么容…

YOLOv8原理详解

Yolov8是2023年1月份开源的。与yolov5一样,支持目标检测、分类、分割任务。 Yolov8主要改进之处有以下几个方面: Backbone:依旧采用的CSP的思想,不过将Yolov5中的C3模块替换为C2F模块,进一步降低了参数量&#xff0c…

mysql实战——mysql5.7升级到mysql8.0

1、上传mysql8.0压缩包到/usr/local目录下 tar -zxvf mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz mv mysql-8.0.25-linux-glibc2.12-x86_64 mysql8 #更改文件夹所属 chown -R mysql.mysql /usr/local/mysql8/ 2、更改配置文件my.cnf vi /etc/my.cnf # 最后几个for8.0的参数要…

Java输入与输出详解

Java输入和输出 前言一、Java打印Hello World二、输出到控制台基本语法代码示例格式化字符串 三、从键盘输入读入一个字符正确写法 使用 Scanner 读取字符串/整数/浮点数使用 Scanner 循环读取 N 个数字 前言 推荐一个网站给想要了解或者学习人工智能知识的读者,这…

tomcat jdbc连接池的默认配置

MySQL 5.0 以后针对超长时间数据库连接做了一个处理,即一个数据库连接在无任何操作情况下过了 8 个小时后(MySQL 服务器默认的超时时间是 8 小时),MySQL 会自动把这个连接关闭。在数据库连接池中的 connections 如果空闲超过 8 小时,MySQL 将…

详解 UML 中的关系概念

关联(Association) 表示两个类之间的一种语义性联系。例如: 学生与班级之间的关联关系。 有向关联(Directed Association) 关联关系有方向性,表示一个类能访问另一个类,但不一定反过来。例如: 教师能查看学生的成绩,但学生不能查…

PMapper:助你在AWS中实现IAM权限快速安全评估

关于PMapper PMapper是一款功能强大的脚本工具,该工具本质上是一个基于Python开发的脚本/代码库,可以帮助广大研究人员识别一个AWS账号或AWS组织中存在安全风险的IAM配置,并对IAM权限执行快速评估。 PMapper可以将目标AWS帐户中的不同IAM用户…

C++入门:从C语言到C++的过渡(1)

目录 1.什么是C 2.C的标准库 3.命名空间 3.1为什么要存在命名空间 3.2命名空间的定义 3.3命名空间的使用 3.3.1域作用限定符 3.3.2using关键字引入某个成员 3.3.3using关键字引入命名空间名称 3.4命名空间的嵌套 3.5命名空间的合并 4.C中的输入与输出 1.什么是C C&am…

BatBot智慧能源管理平台,更加有效地管理能源

随着能源消耗的不断增加,能源管理已成为全球面临的重要问题。BatBot智慧能源管理作为一种的能源管理技术,促进企业在用能效率及管理有着巨大的提升。 BatBot智慧能源管理是一种基于人工智能技术的能源管理系统,通过智能分析和优化能源使用&…