基本规则
顾名思义,语义化的版本就是让版本号更具语义化,可以传达出关于软件本身的一些重要信息而不只是简单的一串数字。
版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
主版本号:当你做了不兼容的API 修改
次版本号:当你做了向下兼容的功能性新增
修订号:当你做了向下兼容的问题修正
先行版(预览版)版本号及版本编译信息可以加到"主版本号.次版本号.修订号"的后面,作为延伸。
具体规范
具体详尽的规范可以参见其官网,当然也可以访问中文版本。这里简单总结一下。
版本号是以点隔开的形式'X.Y.Z' 且XYZ为正整数,数字前面不加0, 也就是说v0.1.0不能写成v0.10.0
一般软件开发过程中以0.1.0 版本开始,开发过程中不断增加新功能,则增加次版本号比如变成0.2.0,然后期间的问题及bug修复体现在修订号上,比如版本号变成0.1.12。这一阶段的版本视为不稳定版本,一般也未对外发布
主版本号表示正式版的形成,也即如果你开发的是供大家使用的软件或插件,那就标致本软件公共API的形成,比如新浪微博API v1.0.0发布,大家就可以在自己网站上调用了,这是个正式而稳定的版本。所以这里有个规定,版本一旦发布,不允许对软件做任何修改。任何改过之后的代码都应标记新的版本号在下次发布中体现
主版本号的增加可以是次版本号以有修订号增加到一定数量后的结果,也可以是有不兼容旧版的新功能或API加入的结果,并且主版本增加后次版本号和修订号归零
次版本号表示有兼容旧版本的功能或API增加
修订号表示bug修复并且这种修复一般是对代码结果不正确的修复而且一定是兼容旧版本的,如果你修复bug越改越大结果不兼容旧版本了,则需要增加主版本号
其他信息比如预览版,先行版或者软件编译信息可以跟随在修订号之后。示例:1.0.0-alpha+001、1.0.0+20130313144700、 1.0.0-beta+exp.sha.5114f85
使用语义化版本号的好处
也即原规范中对为何要使用语义化版本号的描述。在我看来,无非就是在遵循了本规范后,透过版本号,你可以非常清楚地了解到你手头拿到的软件版本相比于上一个版本发生了怎样的变化,所以你在使用的时候可以更注意一下这些变化,以免出现不兼容的情况。
比如如果主版本号升级了,可以知道软件新增了功能且该功能或者重大问题修复,且都是与旧版本不兼容的。好比大家热切推崇的文本编辑器Sublimetext2和3,他的很多插件在这两个版本间无法兼容使用,所以一般要标明插件是使用在Sublimetext2还是3中。同时主版本号的更新也可以表明是次版本号更新到了一定程序,比如新增功能数量达到了一定指标,我们可以认为可以升级一下主版本号了,毕竟一个可以copy as rtf,带项目文件管理sidebar,更换主题的文本编辑器和Windows自带文本编辑器在功能上还是有质的区别的。
如果次版本更新了,我们可以知道有小部分新功能添加,或者修订号更新,有小部分bug被修复,而在获取这些信息时完全还没有查看change log。这正是语义化的好处,版本号就告诉你大部分信息了,当然更具体的参见change log吧。
另外个好处就是当大家都在遵循一个规范的时候,无疑扫清了一些认知上的障碍,将事情简单化,大家也心照不宣地能看懂每个人代码中的版本号的意思,初学者也很容易掌握这方面的知识。