簡介

不知道大家都是怎么定義軟件的版本號的?是老老實實的從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/??

最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程序那些事」,懂技術,更懂你!