[toc]
語義化版本
使用語義化版本控制(Semantic Versioning)胡陪,你必須先有定義好的公共 API 。這可以透過文件定義或代碼強制要求來實現(xiàn)(API 文檔)牧牢。無論如何誓沸,這套 API 的清楚明了是十分重要的。一旦你定義了公共 API壹粟,你就可以透過修改相應(yīng)的版本號來向大家說明你的修改。考慮使用這樣的版本號格式:X.Y.Z (主版本號.次版本號.修訂號)垦页,先行版本號及版本編譯信息可以加到“主版本號.次版本號.修訂號”的后面,作為延伸薇组。
版本號遞增規(guī)則如下
- 主版本號:當(dāng)你做了不兼容的 API 修改,遞增主版本號
- 次版本號:當(dāng)你做了向下兼容的功能性新律胀,遞增次版本號
- 修訂號:當(dāng)你做了向下兼容的問題修正宋光,遞增修訂號
語義化版本控制規(guī)范
使用語義化版本控制的軟件必須定義公共 API。該 API 可以在代碼中被定義或出現(xiàn)于嚴謹?shù)奈募?nèi)炭菌。無論何種形式都應(yīng)該力求精確且完整罪佳。
標準的版本號必須采用 X.Y.Z 的格式,其中 X黑低、Y 和 Z 為非負的整數(shù)赘艳,且禁止在數(shù)字前方補零。X 是主版本號克握、Y 是次版本號蕾管、而 Z 為修訂號。每個元素必須以數(shù)值來遞增菩暗。例如:1.9.1 -> 1.10.0 -> 1.11.0掰曾。
標記版本號的軟件發(fā)行后,禁止改變該版本軟件的內(nèi)容停团。任何修改都必須以新版本發(fā)行旷坦。
主版本號為零(0.y.z)的軟件處于開發(fā)初始階段,一切都可能隨時被改變佑稠。這樣的公共 API 不應(yīng)該被視為穩(wěn)定版秒梅。以 0.1.0 作為你的初始化開發(fā)版本,并在后續(xù)的每次發(fā)行時遞增次版本號
1.0.0 的版本號用于界定公共 API 的形成舌胶。這一版本之后所有的版本號更新都基于公共 API 及其修改內(nèi)容捆蜀。當(dāng)你的軟件被用于正式環(huán)境,它應(yīng)該已經(jīng)達到了 1.0.0 版幔嫂。
修訂號 Z(x.y.Z | x > 0)必須在只做了向下兼容的修正時才遞增辆它。這里的修正指的是針對不正確結(jié)果而進行的內(nèi)部修改。
次版本號 Y(x.Y.z | x > 0)必須在有向下兼容的新功能出現(xiàn)時遞增婉烟。在任何公共 API 的功能被標記為棄用時也必須遞增娩井。也可以在內(nèi)部程序有大量新功能或改進被加入時遞增,其中可以包括修訂級別的改變似袁。每當(dāng)次版本號遞增時洞辣,修訂號必須歸零咐刨。
主版本號 X(X.y.z | X > 0)必須在有任何不兼容的修改被加入公共 API 時遞增。其中可以包括次版本號及修訂級別的改變扬霜。每當(dāng)主版本號遞增時定鸟,次版本號和修訂號必須歸零。
先行版本號可以被標注在修訂版之后著瓶,先加上一個連接號再加上一連串以句點分隔的標識符號來修飾联予。標識符號必須由 ASCII 碼的英數(shù)字和連接號 [0-9A-Za-z-] 組成,且禁止留白材原。數(shù)字型的標識符號禁止在前方補零沸久。先行版的優(yōu)先級低于相關(guān)聯(lián)的標準版本。被標上先行版本號則表示這個版本并非穩(wěn)定而且可能無法達到兼容的需求余蟹。范例:1.0.0-alpha卷胯、1.0.0-alpha.1、1.0.0-0.3.7威酒、1.0.0-x.7.z.92窑睁。
版本編譯信息可以被標注在修訂版或先行版本號之后,先加上一個加號再加上一連串以句點分隔的標識符號來修飾葵孤。標識符號必須由 ASCII 的英數(shù)字和連接號 [0-9A-Za-z-] 組成担钮,且禁止留白。當(dāng)判斷版本的優(yōu)先層級時尤仍,版本編譯信息可被忽略。因此當(dāng)兩個版本只有在版本編譯信息有差別時吓著,屬于相同的優(yōu)先層級送挑。范例:1.0.0-alpha+001、1.0.0+20130313144700纺裁、1.0.0-beta+exp.sha.5114f85司澎。
版本的優(yōu)先層級指的是不同版本在排序時如何比較。判斷優(yōu)先層級時谚殊,必須把版本依序拆分為主版本號蛤铜、次版本號丛肢、修訂號及先行版本號后進行比較剿干。由左到右依序比較每個標識符號,第一個差異值用來決定優(yōu)先層級:主版本號杠步、次版本號及修訂號以數(shù)值比較榜轿,例如:1.0.0 < 2.0.0 < 2.1.0 < 2.1.1。當(dāng)主版本號试躏、次版本號及修訂號都相同時,改以優(yōu)先層級比較低的先行版本號決定颠蕴。例如:1.0.0-alpha < 1.0.0助析。有相同主版本號、次版本號及修訂號的兩個先行版本號寡键,其優(yōu)先層級必須透過由左到右的每個被句點分隔的標識符號來比較雪隧,直到找到一個差異值后決定:只有數(shù)字的標識符號以數(shù)值高低比較,有字母或連接號時則逐字以 ASCII 的排序來比較脑沿。數(shù)字的標識符號比非數(shù)字的標識符號優(yōu)先層級低。若開頭的標識符號都相同時注服,欄位比較多的先行版本號優(yōu)先層級比較高措近。范例:1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0- rc.1 < 1.0.0。
版本號信息
alpha:內(nèi)部測試版辜御。α是希臘字母的第一個屈张,表示最早的版本苇本,一般用戶不要下載這個版本瓣窄,這個版本包含很多BUG,功能也不全俺夕,主要是給開發(fā)人員和測試人員測試和找BUG用的贱鄙。
beta:公開測試版。β是希臘字母的第二個映九,顧名思義瞎颗,這個版本比alpha版發(fā)布得晚一些,主要是給“部落”用戶和忠實用戶測試用的引有,該版本任然存在很多BUG倦逐,但是相對alpha版要穩(wěn)定一些。這個階段版本的軟件還會不斷增加新功能檬姥。如果你是發(fā)燒友,可以下載這個版本抒巢。
RC(Release Candidate):候選版本荞雏。該版本又較beta版更進一步了平酿,該版本功能不再增加,和最終發(fā)布版功能一樣筑辨。這個版本有點像最終發(fā)行版之前的一個類似預(yù)覽版,這個的發(fā)布就標明離最終發(fā)行版不遠了棍辕。作為普通用戶,如果你很急著用這個軟件的話楚昭,也可以下載這個版本。
stable:穩(wěn)定版塘幅。在開源軟件中尿贫,都有stable版,這個就是開源軟件的最終發(fā)行版匾乓,用戶可以放心大膽的用了又谋。
RELEASE:最終版本。在前面版本的一系列測試版之后彰亥,終歸會有一個正式版本,是最終交付用戶使用的一個版本猪叙。該版本有時也稱為標準版仁卷。一般情況下,Release不會以單詞形式出現(xiàn)在軟件封面上芒帕,取而代之的是符號?。
作為一位負責(zé)任的開發(fā)者背蟆,你理當(dāng)確保每次套件升級的運作與版本號的表述一致∠保現(xiàn)實世界是復(fù)雜的,我們除了提高警覺外能做的不多垛叨。你所能做的就是讓語義化的版本控制為你提供一個健全的方式來發(fā)行以及升級套件柜某,而無需推出新的相依套件敛纲,節(jié)省你的時間及煩惱剂癌。