語意化版本 (Semantic Versioning)

TonyTony
1 min read

在軟體世界中,版本控制是產品演進過程中不可或缺的一環,而語意化版本(Semantic Versioning,簡稱 SemVer) 是一套廣泛採用的版本規則,由 GitHub 共同創辦者 Tom Preston-Werner 提出,目的是解決版本號混亂、難以預測變更內容,以及相依套件升級容易出錯等問題。透過一致規則,SemVer 能清楚表達每次軟體更新對使用者的影響,降低升級風險,讓開發者與使用者都能更有信心地管理與採用新版本。

格式

語意化版本遵循 MAJOR.MINOR.PATCH 的結構,例如:3.4.1

每個數字代表不同層級的變更:

  • MAJOR (主版號): 不相容修改

  • MINOR (次版號): 向下相容的新功能

  • PATCH (修訂號): 向下相容的錯誤修正

也可在 MAJOR.MINOR.PATCH 後加入**預發佈版本(pre-release)或版本編譯資訊(build metadata)**作為延伸。

💡
主版號為 0 (0.y.z) 視為軟體開發初始狀態,隨時都可以被改變,不應該視為穩定版本
💡
1.0.0 通常會被視為穩定版的開始

範例

  • 1.2.3:正式版

  • 1.2.3-alpha:預發佈版本,可能仍在測試階段

  • 1.2.3+123:包含版本編譯資訊

  • 2.0.0:不相容的重大更新

  • 0.5.0:開發初期版本,不穩定

優先權(版本比對順序)

語意化版本遵循明確的比對規則來判斷版本的先後順序:

  1. 比較順序為:MAJORMINORPATCH,由左到右比較每個內容

  2. 數字越大,版本越新

  3. 預發佈版本(如 -alpha, -beta)優先權低於正式版本

  4. 同為預發佈時,依字典順序比較(例如:alpha < beta

  5. 版本編譯資訊不在比較列表中

範例

  • 1.0.0 > 1.0.0-beta > 1.0.0-alpha

  • 2.1.0 > 2.0.5

0
Subscribe to my newsletter

Read articles from Tony directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Tony
Tony