簡介
不知道大家都是怎麼定義軟體的版本號的?是老老實實的從1.0版本開始,還是像埃裡森那樣直接從2.0開始,還是從beta版本0.x開始呢?
雖然一眼看過去,我們肯定會希望使用版本號最高的那款軟體,因為版本號越高,代表著其迭代越多,功能越穩定。
這裡不討論版本高低的好壞,這裡要討論的是如何讓版本說話。
讓版本說話
為什麼要讓版本說話?版本會怎麼說話呢?
讓版本說話的意思是,版本本身就代表一定的含義,通過版本號就可以基本瞭解這個版本的大致情況。
為什麼需要管控版本
那麼為什麼要管控版本呢?那是因為在現代的應用中,一個專案需要大量依賴第三方專案,而第三方專案又會依賴其他的專案,從而生成一個龐大的依賴集合。
在這種龐大的版本依賴情況下,我們需要大致上知道現有的專案可以依賴第三方專案的大致版本範圍,從而在依賴專案版本升級的情況下,不至於導致本專案出現問題。
所以我們需要一個版本制定規則。
這就是我們今天要講的語義化版本.
語義化版本規範
在語義化版本中,版本號是由三部分組成的,它的格式是:X.Y.Z(主版本號.次版本號.修訂號)。
如果只是bug的修復,而不影響 API 時,遞增修訂號,如果API 保持向下相容的新增及修改時,遞增次版本號;如果進行不向下相容的修改時,遞增主版本號。
這樣要用什麼樣的版本是不是很清晰了?
具體而言,X、Y 和 Z 為非負的整數,其中X 是主版本號、Y 是次版本號、而 Z 為修訂號。並且需要遵循下面的一些原則,以保證語義化版本規範的正確性。 我們看下有哪些規則:
- 在一個版本釋出後,禁止對改版本再進行修改。如果需要修改,則遞增版本號。
- 主版本號為0的版本,如0.1.3,表示軟體還在初始的開發階段,軟體並不穩定。
- 1.0.0 之後的版本才被視為穩定的版本。
- 如果是對API進行內部的bug修復,則遞增Z的值。
- 如果是新增了向下相容的新功能,則遞增Y的值。如果有API被標記為廢棄的話,也需要遞增Y的值。也可以在包含大量的新功能的時候遞增Y值。每當Y值遞增的時候,Z值需要歸零。
- Y會在新增任何不向下相容的API的時候進行遞增。每當主版本號遞增時,次版本號和修訂號必須歸零.
- 除了主版本之外,還可以在主版本後面新增上先行版本號. 先行版本號是由數字和字母組合而成,以一個連線號接在主版本後面。比如1.0.0-alpha、1.0.0-alpha.1、1.0.0-0.3.7、1.0.0-x.7.z.92。先行版本號表示這個版本並非穩定而且可能無法滿足預期的相容性需求。
- 在先行版本號或者主版本號後面還可以加上編譯版本號。編譯版本號也是由數字和字母組合而成,以一個加號接在主版本或者先行版本號的後面。如:1.0.0-alpha+001、1.0.0+20130313144700、1.0.0-beta+exp.sha.5114f85。
總結
以上就是語義化版本的基本說明,如果大家都按照上面提到的語義化規範來進行版本的編寫話,那麼我們的軟體世界將會變得無限美好。
本文已收錄於 http://www.flydean.com/03-semantic-version/
最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!
歡迎關注我的公眾號:「程式那些事」,懂技術,更懂你!