版本號格式

定義了公共API,你就可以透過修改相應的版本號來向大家說明你的修改。考慮使用這樣的版本號格式:XYZ (主版本號.次版本號.修訂號)修復問題但不影響API 時,遞增修訂號;API 保持向下兼容的新增及修改時,遞增次版本號;進行不向下兼容的修改時,遞增主版本號。

以下關鍵詞MUST、MUST NOT、REQUIRED、SHALL、SHALL NOT、SHOULD、SHOULD NOT、 RECOMMENDED、MAY、OPTIONAL 依照RFC 2119 的敘述解讀。(譯注:為了保持語句順暢, 以下文件遇到的關鍵詞將依照整句語義進行翻譯,在此先不進行個別翻譯。)

  1. 使用語義化版本控制的軟件“必須MUST”定義公共API。該API可以在代碼中被定義或出現于嚴謹的文件內。無論何種形式都應該力求精確且完整。
  2. 標準的版本號“必須MUST”采用XYZ的格式,?? 其中X、Y和Z為非負的整數,且“禁止MUST NOT”在數字前方補零。X是主版本號、Y是次版本號、而Z為修訂號。每個元素“必須MUST”以數值來遞增。例如:1.9.1 -> 1.10.0 -> 1.11.0。
  3. 標記版本號的軟件發行后,“禁止MUST NOT”改變該版本軟件的內容。任何修改都“必須MUST”以新版本發行。
  4. 主版本號為零(0.yz)的軟件處于開發初始階段,一切都可能隨時被改變。這樣的公共API 不應該被視為穩定版。
  5. 1.0.0 的版本號用于界定公共API 的形成。這一版本之后所有的版本號更新都基于公共API 及其修改內容。
  6. 修訂號Z(xyZ | x > 0)“必須MUST”在只做了向下兼容的修正時才遞增。這里的修正指的是針對不正確結果而進行的內部修改。
  7. 次版本號Y(xYz | x > 0)“必須MUST”在有向下兼容的新功能出現時遞增。在任何公共API的功能被標記為棄用時也“必須MUST”遞增。也“可以MAY”在內部程序有大量新功能或改進被加入時遞增,其中“可以MAY”包括修訂級別的改變。每當次版本號遞增時,修訂號“必須MUST”歸零。
  8. 主版本號X(Xyz | X > 0)“必須MUST”在有任何不兼容的修改被加入公共API時遞增。其中“可以MAY”包括次版本號及修訂級別的改變。每當主版本號遞增時,次版本號和修訂號“必須MUST”歸零。
  9. 先行版本號“可以MAY”被標注在修訂版之后,先加上一個連接號再加上一連串以句點分隔的標識符號來修飾。標識符號“必須MUST”由ASCII碼的英數字和連接號[0-9A-Za-z-]組成,且“禁止MUST NOT”留白。數字型的標識符號“禁止MUST NOT”在前方補零。先行版的優先級低于相關聯的標準版本。被標上先行版本號則表示這個版本并非穩定而且可能無法達到兼容的需求。范例:1.0??.0-alpha、1.0.0-alpha.1、 1.0.0-0.3.7、1.0.0-x.7.z.92。
  10. 版本編譯信息“可以MAY”被標注在修訂版或先行版本號之后,先加上一個加號再加上一連串以句點分隔的標識符號來修飾。標識符號“必須MUST”由ASCII的英數字和連接號[0-9A-Za-z-]組成,且“禁止MUST NOT”留白。當判斷版本的優先層級時,版本編譯信息“可SHOULD”被忽略。因此當兩個版本只有在版本編譯信息有差別時,屬于相同的優先層級。范例:1.0.0-alpha+001、1.0.0+20130313144700、 1.0.0-beta+exp.sha.5114f85。
  11. 版本的優先層級指的是不同版本在排序時如何比較。判斷優先層級時,“必須MUST”把版本依序拆分為主版本號、次版本號、修訂號及先行版本號后進行比較(版本編譯信息不在這份比較的列表中)。由左到右依序比較每個標識符號,第一個差異值用來決定優先層級:主版本號、次版本號及修訂號以數值比較,例如1.0.0 < 2.0.0 < 2.1.0 < 2.1.1。當主版本號、次版本號及修訂號都相同時,改以優先層級比較低的先行版本號決定。例如:1.0.0-alpha < 1.0.0。有相同主版本號、次版本號及修訂號的兩個先行版本號,其優先層級“必須MUST”透過由左到右的每個被句點分隔的標識符號來比較,直到找到一個差異值后決定:只有數字的標識符號以數值高低比較,有字母或連接號時則逐字以ASCII的排序來比較。數字的標識符號比非數字的標識符號優先層級低。若開頭的標識符號都相同時,欄 ??位比較多的先行版本號優先層級比較高。范例: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。

摘自:
https://leohxj.gitbooks.io/a-programmer-prepares/content/programmer-basic/semantic-versioning.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容