語義化版本命名

軟件名稱后面經(jīng)常有一些英文和數(shù)字击碗,如Windows 7丧没,Android 6.0.0,這些都是軟件的版本標(biāo)志沼死,通過它着逐,我們可以對軟件的類型有所了解。版本控制比較普遍的 3 種命名格式 :GNU 風(fēng)格的版本號命名格式意蛀、Windows 風(fēng)格的版本號命名格式耸别、.Net Framework 風(fēng)格的版本號命名格式,其實(shí)都可以歸類為語義化版本.


簡介

在軟件管理的領(lǐng)域里存在著被稱作“依賴地獄”的死亡之谷县钥,系統(tǒng)規(guī)模越大秀姐,加入的套件越多,你就越有可能在未來的某一天發(fā)現(xiàn)自己已深陷絕望之中若贮。

在依賴高的系統(tǒng)中發(fā)布新版本套件可能很快會成為惡夢省有。如果依賴關(guān)系過高痒留,可能面臨版本控制被鎖死的風(fēng)險(xiǎn)(必須對每一個相依套件改版才能完成某次升級)。而如果依賴關(guān)系過于松散蠢沿,又將無法避免版本的混亂(假設(shè)兼容于未來的多個版本已超出了合理數(shù)量)伸头。當(dāng)你專案的進(jìn)展因?yàn)榘姹鞠嘁辣绘i死或版本混亂變得不夠簡便和可靠,就意味著你正處于依賴地獄之中舷蟀。

這些規(guī)則是根據(jù)已經(jīng)被各種封閉恤磷、開放源碼軟件所廣泛使用的慣例所設(shè)計(jì)。為了讓這套理論運(yùn)作雪侥,必須先有定義好的公共 API 碗殷。這可以透過文件定義或代碼強(qiáng)制要求來實(shí)現(xiàn)。無論如何速缨,這套 API 的清楚明了是十分重要的锌妻。一旦你定義了公共 API,你就可以透過修改相應(yīng)的版本號來向大家說明你的修改旬牲》麓猓考慮使用這樣的版本號格式:X.Y.Z (主版本號.次版本號.修訂號)修復(fù)問題但不影響API 時,遞增修訂號原茅;API 保持向下兼容的新增及修改時吭历,遞增次版本號;進(jìn)行不向下兼容的修改時擂橘,遞增主版本號晌区。

這套系統(tǒng)被定義為“語義化的版本控制”,在這套約定下通贞,版本號及其更新方式包含了相鄰版本間的底層代碼和修改內(nèi)容的信息朗若。

規(guī)范

1. 語義化版本控制的軟件必須定義公共 API〔郑基于API才可以精確定義版本號的走向

2. 版本號必須采用 X.Y.Z 的格式哭懈,?? 其中 X、Y 和 Z 為非負(fù)的整數(shù)茎用,且禁止在數(shù)字前方補(bǔ)零遣总。X 是主版本號、Y 是次版本號轨功、而 Z 為修訂號旭斥。每個元素必須以數(shù)值來遞增。例如:1.9.1 -> 1.10.0 -> 1.11.0夯辖。

3. 標(biāo)記版本號的軟件發(fā)行后琉预,禁止改變該版本軟件的內(nèi)容。任何修改都必須以新版本發(fā)行蒿褂。

4. 主版本號為零(0.y.z)的軟件處于開發(fā)初始階段圆米,一切都可能隨時被改變卒暂。這樣的公共 API 不應(yīng)該被視為穩(wěn)定版。

5. 1.0.0 的版本號用于界定公共 API 的形成娄帖。這一版本之后所有的版本號更新都基于公共 API 及其修改內(nèi)容也祠。

6. 修訂號 Z(x.y.Z > 0)必須在只做了向下兼容的修正時才遞增。這里的修正指的是針對不正確結(jié)果而進(jìn)行的內(nèi)部bug fix近速。

7. 次版本號 Y(x.Y.z > 0)必須在有向下兼容的新功能出現(xiàn)時遞增诈嘿。在任何公共 API 的功能被標(biāo)記為棄用時也必須遞增。也可以在內(nèi)部程序有大量新功能或改進(jìn)被加入時遞增削葱。而每當(dāng)次版本號遞增時奖亚,修訂號必須歸零。

8. 主版本號 X(X.y.z > 0)必須在有任何不兼容的修改被加入公共 API 時遞增析砸。其中可以包括次版本號及修訂級別的改變昔字。每當(dāng)主版本號遞增時,次版本號和修訂號必須歸零首繁。

為什么要使用語義化的版本控制作郭?

這并不是一個新的或者革命性的想法。實(shí)際上弦疮,你可能已經(jīng)在做一些近似的事情了夹攒。問題在于只是“近似”還不夠。如果沒有某個正式的規(guī)范可循胁塞,版本號對于依賴的管理并無實(shí)質(zhì)意義咏尝。將上述的想法命名并給予清楚的定義,讓你對軟件使用者傳達(dá)意向變得容易啸罢。一旦這些意向變得清楚状土,彈性(但又不會太彈性)的依賴規(guī)范就能達(dá)成。

舉個簡單的例子就可以展示語義化的版本控制如何讓依賴地獄成為過去伺糠。假設(shè)有個名為“救火車”的函式庫,它需要另一個名為“梯子”并已經(jīng)有使用語義化版本控制的套件斥季。當(dāng)救火車創(chuàng)建時训桶,梯子的版本號為 3.1.0。因?yàn)榫然疖囀褂昧艘恍┌姹?3.1.0 所新增的功能酣倾, 你可以放心地指定相依于梯子的版本號大等于 3.1.0 但小于 4.0.0舵揭。這樣,當(dāng)梯子版本 3.1.1 和 3.2.0 發(fā)布時躁锡,你可以將直接它們納入你的套件管理系統(tǒng)午绳,因?yàn)樗鼈兡芘c原有相依的軟件兼容。

作為一位負(fù)責(zé)任的開發(fā)者映之,你理當(dāng)確保每次套件升級的運(yùn)作與版本號的表述一致±狗伲現(xiàn)實(shí)世界是復(fù)雜的蜡坊,我們除了提高警覺外能做的不多。你所能做的就是讓語義化的版本控制為你提供一個健全的方式來發(fā)行以及升級套件赎败,而無需推出新的相依套件秕衙,節(jié)省你的時間及煩惱。

本文章非原創(chuàng)僵刮,但是如果你對此認(rèn)同据忘,希望立即開始使用語義化版本控制,你只需聲明你的函式庫正在使用它并遵循這些規(guī)則就可以了. 更詳細(xì)的介紹可以參照http://semver.org/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搞糕,一起剝皮案震驚了整個濱河市勇吊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窍仰,老刑警劉巖汉规,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辈赋,居然都是意外死亡鲫忍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門钥屈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悟民,“玉大人,你說我怎么就攤上這事篷就∩淇鳎” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵竭业,是天一觀的道長智润。 經(jīng)常有香客問我,道長未辆,這世上最難降的妖魔是什么窟绷? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮咐柜,結(jié)果婚禮上兼蜈,老公的妹妹穿的比我還像新娘。我一直安慰自己拙友,他們只是感情好为狸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遗契,像睡著了一般辐棒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天漾根,我揣著相機(jī)與錄音泰涂,去河邊找鬼。 笑死立叛,一個胖子當(dāng)著我的面吹牛负敏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秘蛇,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼其做,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赁还?” 一聲冷哼從身側(cè)響起妖泄,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艘策,沒想到半個月后蹈胡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朋蔫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年罚渐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驯妄。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡荷并,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出青扔,到底是詐尸還是另有隱情源织,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布微猖,位于F島的核電站谈息,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凛剥。R本人自食惡果不足惜侠仇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望犁珠。 院中可真熱鬧傅瞻,春花似錦、人聲如沸盲憎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饼疙。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窑眯,已是汗流浹背屏积。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留磅甩,地道東北人炊林。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像卷要,于是被迫代替她去往敵國和親渣聚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容