文章目录

  • 简介
  • 让版本说话
  • 为什么需要管控版本
  • 语义化版本规范
  • 总结

简介

不知道大家都是怎么定义软件的版本号的?是老老实实的从1.0版本开始,还是像埃里森那样直接从2.0开始,还是从beta版本0.x开始呢?

虽然一眼看过去,我们肯定会希望使用版本号最高的那款软件,因为版本号越高,代表着其迭代越多,功能越稳定。

这里不讨论版本高低的好坏,这里要讨论的是如何让版本说话。

让版本说话

为什么要让版本说话?版本会怎么说话呢?

让版本说话的意思是,版本本身就代表一定的含义,通过版本号就可以基本了解这个版本的大致情况。

为什么需要管控版本

那么为什么要管控版本呢?那是因为在现代的应用中,一个项目需要大量依赖第三方项目,而第三方项目又会依赖其他的项目,从而生成一个庞大的依赖集合。

在这种庞大的版本依赖情况下,我们需要大致上知道现有的项目可以依赖第三方项目的大致版本范围,从而在依赖项目版本升级的情况下,不至于导致本项目出现问题。

所以我们需要一个版本制定规则。

这就是我们今天要讲的语义化版本.

语义化版本规范

在语义化版本中,版本号是由三部分组成的,它的格式是:X.Y.Z(主版本号.次版本号.修订号)。

如果只是bug的修复,而不影响 API 时,递增修订号,如果API 保持向下兼容的新增及修改时,递增次版本号;如果进行不向下兼容的修改时,递增主版本号。

这样要用什么样的版本是不是很清晰了?

具体而言,X、Y 和 Z 为非负的整数,其中X 是主版本号、Y 是次版本号、而 Z 为修订号。并且需要遵循下面的一些原则,以保证语义化版本规范的正确性。 我们看下有哪些规则:

  1. 在一个版本发布后,禁止对改版本再进行修改。如果需要修改,则递增版本号。

  2. 主版本号为0的版本,如0.1.3,表示软件还在初始的开发阶段,软件并不稳定。

  3. 1.0.0 之后的版本才被视为稳定的版本。

  4. 如果是对API进行内部的bug修复,则递增Z的值。

  5. 如果是新增了向下兼容的新功能,则递增Y的值。如果有API被标记为废弃的话,也需要递增Y的值。也可以在包含大量的新功能的时候递增Y值。每当Y值递增的时候,Z值需要归零。

  6. Y会在添加任何不向下兼容的API的时候进行递增。每当主版本号递增时,次版本号和修订号必须归零.

  7. 除了主版本之外,还可以在主版本后面添加上先行版本号. 先行版本号是由数字和字母组合而成,以一个连接号接在主版本后面。比如1.0.0-alpha、1.0.0-alpha.1、1.0.0-0.3.7、1.0.0-x.7.z.92。先行版本号表示这个版本并非稳定而且可能无法满足预期的兼容性需求。

  8. 在先行版本号或者主版本号后面还可以加上编译版本号。编译版本号也是由数字和字母组合而成,以一个加号接在主版本或者先行版本号的后面。如:1.0.0-alpha+001、1.0.0+20130313144700、1.0.0-beta+exp.sha.5114f85。

总结

以上就是语义化版本的基本说明,如果大家都按照上面提到的语义化规范来进行版本的编写话,那么我们的软件世界将会变得无限美好。

本文已收录于 http://www.flydean.com/03-semantic-version/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

听说版本会说话,你相信吗?相关推荐

  1. 70张让你大开眼界的照片(配…

    原文地址:70张让你大开眼界的照片(配文字)作者:摄影养心堂 鹿妈妈在吃树枝上最后剩下的几片嫩叶,小鹿够不着,很期待的看着.摄影:Andrew Evans 一池嫣红                   ...

  2. 中文化最好的linux,中文化最好的蓝点Linux 2.0下载----红旗甘拜下风!

    迷你版vcxz 于 2011-10-29 23:26:25发表: 顶一下 parker_007 于 2011-10-12 23:20:06发表: 顶下,学习中 iyoume2008 于 2011-09 ...

  3. 《大家的日语3》语法整理1~48课

    <script type="text/javascript"> </script> <script src="http://pagead2. ...

  4. realme gt neo3 看屏幕是天马屏幕还是京东方(图文教程)

    realme gt neo3 看屏幕是天马屏幕还是京东方(图文教程) realme gt neo3 看屏幕是天马屏幕还是京东方(图文教程) 由于官网删除我的贴子,所以我发布再csdn上,第一次使用,多 ...

  5. jieba:我虽然结巴,但是我会分词啊

    介绍 jieba目前是一款比较好分词模块 分词 python import jieba# 可以使用jieba.cut进行分词 sentence = "失去恋人所带来的苦痛远远超过了他的承受范 ...

  6. Metasploitable3 + VMware 安装教程

    作为小白,最近在安装Metasploitable3,看了好多网上教程,发现基本都是相互复制粘贴的,一些坑并没有排掉,我把我的一些经验分享出来,希望能帮到大家. 首先,我是在win10上安装的,需要准备 ...

  7. 动词的形态及变化(转)

    一:動詞分類及び詞態変化: (一)一段動詞(動詞Ⅱ): 特征:い段/え段+る 例:食べる.見る 例外:帰る.走る.入る.切る(五段) ①一段動詞のない形:直接去る+ない 食べない.見ない ②一段動詞の ...

  8. 数据科学家应遵守的十五个原则

    本文转自:http://blog.csdn.net/lhzblog/article/details/20063863,感谢作者Chuck_lee 作为一个数据科学家,我为我的日常工作总结开发出15项原 ...

  9. 一篇文章汇总Python装饰器全知识图谱(使用场景,基本用法,参数传递,闭包操作,类装饰器和AOP)

    装饰器,是将Python代码变得低耦合,简洁优美的必经之路,同时也是实现闭包操作,AOP编程的基础.这一篇博客从装饰器的产生原因,基本使用,延伸到参数传递,闭包操作,最后到类装饰器和AOP,希望能用我 ...

最新文章

  1. 有了这款可视化工具,Java 应用性能调优 so easy。。。
  2. cve -2016-6663 mysql 本地提权
  3. sqoop2从hdfs导入mysql_sqoop2相关实例:hdfs和mysql互相导入(转)
  4. CentOS安装网络代理软件
  5. 有赞统一接入层架构演进
  6. spring mvc学习(5):IDEA修改背景颜色大全
  7. linux设备负责执行计划任务,Linux计划任务详解,很详细,每一行命令都有相对应的白话解释。...
  8. VMware 虚拟机不能联网的解决办法
  9. win2003服务器安全设置
  10. python+opencv修改图像指定像素的值
  11. Mac 解决终端:-bash: /Users/xxx/.profile: No such file or directory
  12. 2个红外传感器循迹原理_8个蓝牙小车的设计方案
  13. www.beizi8.cn居然有pr了
  14. SELinux的设置及应用举例
  15. 2022-2028全球及中国食品加工用酶行业研究及十四五规划分析报告
  16. sqlite3学习笔记
  17. SAF(Storage Access Framework)使用攻略
  18. 23-末2菜菜的计算机保研之路(pku cs\rw、zju cs、fdu cs、ustc)
  19. 网店刷收藏会不会被降权
  20. Python继承的理解

热门文章

  1. layui按钮展开、_layui框架,点击某个按钮,让layui的日期插件选中的值清空
  2. HDU4607(求树中的最长链)
  3. 后缀数组--可重叠的K次最长重复子串(POJ3261)
  4. 单源最短路径(Dijkstra算法)
  5. Lua 语言中的点、冒号与self
  6. 漫游Kafka设计篇之Producer和Consumer
  7. P2P的原理和常见的实现方式
  8. TCP长连接,短连接
  9. webpack 从 0 到 1 构建 vue
  10. ClickHouse 数据存储原理:MergeTree引擎