版本格式:主版號。次版號。修訂號,版號遞增規則如下:
先行版號及版本編譯資訊可以加到「主版號。次版號。修訂號」的後面,作為延伸。
在軟體管理的領域裡存在著被稱作「相依性地獄」的死亡之谷,系統規模越大,加入的套件越多,你就越有可能在未來的某一天發現自己已深陷絕望之中。
在相依性高的系統中發佈新版本套件可能很快會成為惡夢。如果相依性關係過高,可能面臨版本控制被鎖死的風險(必須對每一個相依套件改版才能完成某次升級)。而如果相依性關係過於鬆散,又將無法避免版本的混亂(假設相容於未來的多個版本已超出了合理數量)。當你專案的進展因為版本相依被鎖死或版本混亂變得不夠簡便和可靠,就意味著你正處於相依性地獄之中。
作為這個問題的解決方案之一,我提議用一組簡單的規則及條件來約束版號的配置和增長。這些規則是根據(但不局限於)已經被各種封閉、開放源碼軟體所廣泛使用的慣例所設計。為了讓這套理論運作,你必須先有定義好的公共 API。這可以透過文件定義或程式碼強制要求來實現。無論如何,這套 API 的清楚明瞭是十分重要的。一旦你定義了公共 API,你就可以透過修改相應的版號來向大家說明你的修改。考慮使用這樣的版號格式:X.Y.Z(主版號。次版號。修訂號)修復問題但不影響 API 時,遞增修訂號;API 保持向下相容的新增及修改時,遞增次版號;進行不向下相容的修改時,遞增主版號。
我稱這套系統為「語意化的版本控制」,在這套約定下,版號及其更新方式包含了相鄰版本間的底層程式碼和修改內容的訊息。
以下關鍵詞「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、「OPTIONAL」依照 RFC 2119 的敘述解讀。(譯著:為了保持語句順暢,以下文件遇到的關鍵詞將依照整句語意進行翻譯,在此先不進行個別翻譯。)