听说版本会说话,你相信吗?
文章目錄
- 簡(jiǎn)介
- 讓版本說話
- 為什么需要管控版本
- 語義化版本規(guī)范
- 總結(jié)
簡(jiǎn)介
不知道大家都是怎么定義軟件的版本號(hào)的?是老老實(shí)實(shí)的從1.0版本開始,還是像埃里森那樣直接從2.0開始,還是從beta版本0.x開始呢?
雖然一眼看過去,我們肯定會(huì)希望使用版本號(hào)最高的那款軟件,因?yàn)榘姹咎?hào)越高,代表著其迭代越多,功能越穩(wěn)定。
這里不討論版本高低的好壞,這里要討論的是如何讓版本說話。
讓版本說話
為什么要讓版本說話?版本會(huì)怎么說話呢?
讓版本說話的意思是,版本本身就代表一定的含義,通過版本號(hào)就可以基本了解這個(gè)版本的大致情況。
為什么需要管控版本
那么為什么要管控版本呢?那是因?yàn)樵诂F(xiàn)代的應(yīng)用中,一個(gè)項(xiàng)目需要大量依賴第三方項(xiàng)目,而第三方項(xiàng)目又會(huì)依賴其他的項(xiàng)目,從而生成一個(gè)龐大的依賴集合。
在這種龐大的版本依賴情況下,我們需要大致上知道現(xiàn)有的項(xiàng)目可以依賴第三方項(xiàng)目的大致版本范圍,從而在依賴項(xiàng)目版本升級(jí)的情況下,不至于導(dǎo)致本項(xiàng)目出現(xiàn)問題。
所以我們需要一個(gè)版本制定規(guī)則。
這就是我們今天要講的語義化版本.
語義化版本規(guī)范
在語義化版本中,版本號(hào)是由三部分組成的,它的格式是:X.Y.Z(主版本號(hào).次版本號(hào).修訂號(hào))。
如果只是bug的修復(fù),而不影響 API 時(shí),遞增修訂號(hào),如果API 保持向下兼容的新增及修改時(shí),遞增次版本號(hào);如果進(jìn)行不向下兼容的修改時(shí),遞增主版本號(hào)。
這樣要用什么樣的版本是不是很清晰了?
具體而言,X、Y 和 Z 為非負(fù)的整數(shù),其中X 是主版本號(hào)、Y 是次版本號(hào)、而 Z 為修訂號(hào)。并且需要遵循下面的一些原則,以保證語義化版本規(guī)范的正確性。 我們看下有哪些規(guī)則:
在一個(gè)版本發(fā)布后,禁止對(duì)改版本再進(jìn)行修改。如果需要修改,則遞增版本號(hào)。
主版本號(hào)為0的版本,如0.1.3,表示軟件還在初始的開發(fā)階段,軟件并不穩(wěn)定。
1.0.0 之后的版本才被視為穩(wěn)定的版本。
如果是對(duì)API進(jìn)行內(nèi)部的bug修復(fù),則遞增Z的值。
如果是新增了向下兼容的新功能,則遞增Y的值。如果有API被標(biāo)記為廢棄的話,也需要遞增Y的值。也可以在包含大量的新功能的時(shí)候遞增Y值。每當(dāng)Y值遞增的時(shí)候,Z值需要?dú)w零。
Y會(huì)在添加任何不向下兼容的API的時(shí)候進(jìn)行遞增。每當(dāng)主版本號(hào)遞增時(shí),次版本號(hào)和修訂號(hào)必須歸零.
除了主版本之外,還可以在主版本后面添加上先行版本號(hào). 先行版本號(hào)是由數(shù)字和字母組合而成,以一個(gè)連接號(hào)接在主版本后面。比如1.0.0-alpha、1.0.0-alpha.1、1.0.0-0.3.7、1.0.0-x.7.z.92。先行版本號(hào)表示這個(gè)版本并非穩(wěn)定而且可能無法滿足預(yù)期的兼容性需求。
在先行版本號(hào)或者主版本號(hào)后面還可以加上編譯版本號(hào)。編譯版本號(hào)也是由數(shù)字和字母組合而成,以一個(gè)加號(hào)接在主版本或者先行版本號(hào)的后面。如:1.0.0-alpha+001、1.0.0+20130313144700、1.0.0-beta+exp.sha.5114f85。
總結(jié)
以上就是語義化版本的基本說明,如果大家都按照上面提到的語義化規(guī)范來進(jìn)行版本的編寫話,那么我們的軟件世界將會(huì)變得無限美好。
本文已收錄于 http://www.flydean.com/03-semantic-version/
最通俗的解讀,最深刻的干貨,最簡(jiǎn)潔的教程,眾多你不知道的小技巧等你來發(fā)現(xiàn)!
歡迎關(guān)注我的公眾號(hào):「程序那些事」,懂技術(shù),更懂你!
總結(jié)
以上是生活随笔為你收集整理的听说版本会说话,你相信吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 懂集合吗?对,是dart中的集合
- 下一篇: 网络协议之:一定要大写的SOCKS