程序員應(yīng)該重視版本控制

起初仿畸,我不太理解 版本 在程序開(kāi)發(fā)中起到怎樣的作用惶岭。直到上周末與一個(gè)朋友聊天時(shí)示损,他的開(kāi)發(fā)工具 Webstorm 突然罷工渗磅,需要激活,我將之前我的激活方式告訴了他检访,但他回應(yīng)激活失敗始鱼,詢問(wèn)之下才知,他的 Webstorm 使用的是 2016.1 版本脆贵,而我給他的激活方式適用 2017.2 版本医清,我問(wèn)他為什么不升級(jí)工具,他回答只要能用不就成了卖氨,干嘛要升級(jí)会烙?我一時(shí)語(yǔ)塞,不知該如何回答他筒捺“啬澹回過(guò)頭我細(xì)想了一下,覺(jué)得還是有必要升級(jí)的焙矛,本文主要介紹一下幾點(diǎn)葫盼。

  • 為什么要升級(jí)?
  • 版本升級(jí)規(guī)范村斟?
  • 那么多程序贫导,那么多版本,如何記憶蟆盹?

一孩灯、為什么要升級(jí)?

1. 開(kāi)源社區(qū)與 Issue

之前做過(guò)一個(gè)項(xiàng)目逾滥,當(dāng)時(shí)使用 bootstrap-fileupload 組件處理文件上傳峰档,發(fā)現(xiàn)中文顯示總是亂碼。當(dāng)時(shí)腦子里有個(gè)思維定式:官方的東西怎么可能會(huì)出錯(cuò)呢寨昙,肯定是我自己哪里寫(xiě)的有問(wèn)題讥巡?去官方文檔將所有屬性都檢查了一遍,網(wǎng)上也搜了下問(wèn)題都沒(méi)能找到答案舔哪。最后在源碼里 debugger 一步步找問(wèn)題欢顷,發(fā)現(xiàn)是由于 windows 上記事本的編碼為 'ANSI',而 bootstrap-fileupload 設(shè)置中文編碼 'gbk' 二者并不匹配導(dǎo)致捉蚤,修改之后就恢復(fù)正常了抬驴。我想將這個(gè) Bug 提給官方人員炼七,但不知道怎么聯(lián)系他們,我甚至在搜索引擎里搜索 bootstrap-fileupload 的官方郵箱布持。(現(xiàn)在想想有點(diǎn)傻乎乎的)

今年 6 月份接觸 github豌拙,第一次感受到 開(kāi)源社區(qū) 的含義:dva 是一個(gè)基于 React 的前端框架,公司項(xiàng)目選型時(shí)決定用它题暖,技術(shù)總監(jiān)便給了我它的 github 地址 讓我去讀一讀它的文檔按傅。

在這里,我才曉得原來(lái) dva 的源碼竟然是觸手可及的胧卤,而不再是生硬的 dva.min.js 文件逞敷。如果發(fā)現(xiàn) Bug,可以去 Issue 庫(kù)里提問(wèn)灌侣,官方人員會(huì)驗(yàn)證之后并解決的推捐。在 Issue 庫(kù)里你不僅可以提出 Bug,還可以幫忙解決 Bug 然后將修改的內(nèi)容 Pull Request 給官方人員侧啼。Issue 庫(kù)還有個(gè)巨大的好處就是遇到問(wèn)題去里面找牛柒,基本上你遇到的問(wèn)題其它人都有遇到并解決過(guò),這效率比在百度搜索問(wèn)題準(zhǔn)確性不知高了多少倍痊乾。

Dva github 頁(yè)面

現(xiàn)在皮壁,比如在 Bootstrap-fileupload@1.0.0 里發(fā)現(xiàn)了一個(gè) Bug,在開(kāi)源社區(qū)里給官方提了一個(gè) Issue哪审,官方修復(fù)后并發(fā)布了新版本 Bootstrap-fileupload@1.0.1蛾魄,只需要下載最新的版本即可愉快的使用,而不是去修改源碼湿滓。

注: 并不是所有項(xiàng)目都是開(kāi)源的滴须,開(kāi)源的項(xiàng)目也并不一定就把代碼放在 Github 上,我找了下 jquery 社區(qū)是在 Github 上的叽奥,Bootstrao-fileupload 好像并沒(méi)找到扔水。

2. 軟件需要持續(xù)升級(jí)

軟件的每一次升級(jí),或修復(fù)之前功能 Bug朝氓,或新增新的功能魔市,或在優(yōu)化了性能,讓程序跑的更快赵哲。啥待德?你還不想更新?當(dāng)別人的微信升級(jí)后可以同時(shí)發(fā)送多張照片枫夺,你沒(méi)升級(jí)的版本只能一張張地發(fā)送照片将宪。當(dāng)別人家的 Webstorm 更新之后啟動(dòng)只花了 5 s,你使用老的版本啟動(dòng)卻花了 10 s。你還有什么理由不更新涧偷。

程序或軟件并不是一次性的東西,開(kāi)發(fā)完成就放那不管不顧了毙死。這是個(gè)持續(xù)改進(jìn)燎潮,持續(xù)完善的過(guò)程。版本就是軟件更新的歷史節(jié)點(diǎn)扼倘。一個(gè)好的程序會(huì)指定良好的版本規(guī)則确封,定期發(fā)布新版本,做一些功能上的改進(jìn)再菊,并將做了哪些修改告訴明確的告知客戶爪喘。

手機(jī)軟件更新

二、版本升級(jí)規(guī)范纠拔?

對(duì)于客戶來(lái)說(shuō)秉剑,不需要關(guān)心軟件是怎么升級(jí)的,他們只關(guān)心軟件更新了哪些內(nèi)容稠诲,好不好用侦鹏。

對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),我們制定版本號(hào)臀叙,有條不紊的定期升級(jí)略水。如果制作版本號(hào)的規(guī)則混亂,在管理版本的時(shí)候?qū)?huì)及其痛苦劝萤。所以渊涝,我們遵循著相關(guān)規(guī)范。

1. 版本號(hào)

在上圖中床嫌,可以看到 6.4.7 -> 6.4.8跨释,這是將頭條@6.4.7 版本升級(jí)到 @6.4.8 版本。規(guī)定版本號(hào)由三部分組成厌处,按照順序分別為主版本號(hào).次級(jí)版本號(hào).修訂號(hào)煤傍。

  • 修訂號(hào)何時(shí)變化? 當(dāng)修復(fù)一兩個(gè) Bug嘱蛋,改動(dòng)很小時(shí)蚯姆,將修訂號(hào) +1;

  • 次級(jí)版本號(hào)何時(shí)變化洒敏? 當(dāng)新增一些功能龄恋,如頭條新增一個(gè)欄目時(shí),將次級(jí)版本號(hào) +1凶伙,修訂號(hào)置 0郭毕,就變成了 6.5.0,此時(shí)的改動(dòng)不容忽視函荣,但也不是很大显押;

  • 主版本號(hào)何時(shí)改變扳肛? 當(dāng)做了很大的改變,如:變動(dòng)了頭條欄目的布局乘碑,用戶再登錄進(jìn)去時(shí)操作體驗(yàn)完全改變時(shí)修改主版本號(hào)+1挖息,此時(shí)次級(jí)版本號(hào)和修訂號(hào)置0,變成了 7.0.0兽肤。

在開(kāi)發(fā)人員開(kāi)發(fā)一個(gè)新的程序時(shí)套腹,建議命名第一個(gè)版本號(hào)為 0.1.0 ,以后按照規(guī)則依次遞增资铡,第一個(gè) 可用的發(fā)行版本 將主版本號(hào)升級(jí)為 1.0.0电禀。

2. 版本階段

頭條新聞對(duì)于用戶來(lái)說(shuō)叫做軟件,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)叫做程序笤休,以下統(tǒng)稱程序尖飞。

光是看版本號(hào),可能對(duì)于程序處于什么狀態(tài)并不能完全掌握店雅,此時(shí)還需附帶版本階段相關(guān)英文單詞來(lái)附加說(shuō)明葫松,格式:版本號(hào)-版本階段英文單字

如看到 dva@1.3.0-beta 就知道 dva 的版本號(hào)為 1.3.0底洗,當(dāng)前處于 公測(cè)階段腋么,本身還存在 Bug,給部分用戶體驗(yàn)亥揖,用戶提出 Bug 并全部修復(fù)完成后才能正式發(fā)布珊擂。

版本號(hào)附帶英文字母

程序版本階段對(duì)應(yīng)英文如下,大家遵守規(guī)范费变,看到英文單詞就這個(gè)這個(gè)版本當(dāng)前處于什么階段摧扇。

  • alpha 內(nèi)測(cè)階段:該階段主要實(shí)現(xiàn)程序功能,通常只在內(nèi)部開(kāi)發(fā)人員之間交流挚歧,該階段存在 Bug 較多扛稽,待完善。

  • beta 公測(cè)階段:該階段較 alpha 來(lái)說(shuō)修復(fù)不少 Bug滑负,但仍存在隱藏問(wèn)題在张。由于內(nèi)部人手有限,先發(fā)布該階段版本讓廣大發(fā)燒友用戶們先做體驗(yàn)矮慕,發(fā)現(xiàn)問(wèn)題帮匾,解決問(wèn)題,不斷完善痴鳄。比較熟悉的就如小米發(fā)燒友就會(huì)很積極的測(cè)試功能瘟斜。

  • rc 候選階段:該階段基本解決完 beta 階段的所有 Bug,算是比較完善的一個(gè)版本了,可以發(fā)布給所有用戶使用螺句。該階段與 release 階段相差無(wú)幾虽惭,那為什么不直接忽略此階段版本呢?

    我猜測(cè)應(yīng)該還是考慮一個(gè)穩(wěn)妥的問(wèn)題蛇尚。比如:固定 20 號(hào)發(fā)布一個(gè) release 版本芽唇,15 號(hào)的時(shí)候就已經(jīng)開(kāi)發(fā)完成并測(cè)試通過(guò)進(jìn)入 rc 候選階段,如果剩下五天不出叉子佣蓉,那么這個(gè) rc 版本就是后面的 release 版本,萬(wàn)一運(yùn)氣不好亲雪,又測(cè)出 Bug勇凭,那么就修改發(fā)布 rc2 版本作為新的候選版本。

  • release 正式發(fā)行版:啦啦啦啦义辕,正式上線版本虾标,給廣大用戶使用,此時(shí)要是再有明顯 Bug 是及其影響用戶體驗(yàn)灌砖,損失用戶量的璧函,該階段可以算是完全體了。

當(dāng)然基显,對(duì)于用于來(lái)說(shuō)蘸吓,頻繁的更新版本也是一件很痛苦的事。比如我們使用 node撩幽,我們就是用戶库继,node 官方要是隔三差五就更新一次版本,我們?cè)陧?xiàng)目中也需要被迫更新 node 版本窜醉,這是難以忍受的宪萄。于是,node 推出里兩個(gè)版本階段可供選擇榨惰。

  • LTS(Long-Term Support)長(zhǎng)期支持版本:該階段相當(dāng)于上面的 release 版本拜英,基本沒(méi)啥大 Bug,可供 node 開(kāi)發(fā)人員長(zhǎng)期使用琅催,大概 18 個(gè)月才會(huì)有一次大更新居凶,也就是說(shuō)安裝 LTS 版本之后就不會(huì)頻繁更新。
  • Current 當(dāng)前階段:在 LTS 階段藤抡,如果 node 再添加新的特性或者修復(fù) Bug 怎么辦排监?統(tǒng)統(tǒng)放到 Current 階段里,該階段并不穩(wěn)定杰捂,api 經(jīng)常會(huì)變舆床,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),并不推薦使用。等到 18 個(gè)月會(huì)將該階段升級(jí)為 LTS 穩(wěn)定階段挨队。
Node 官方主頁(yè)

三谷暮、那么多程序,那么多版本盛垦,如何記憶湿弦?

在前端開(kāi)發(fā)中,使用的每個(gè)前端框架(Vue or Angular or React or Dva.....)腾夯、UI 框架都有自己的版本控制颊埃,如何去知道什么框架升級(jí)到什么版本有什么新的功能呢?

1. 開(kāi)源社區(qū)

市面上框架那么多蝶俱,你的項(xiàng)目肯定不是每種都用的吧班利,著重關(guān)注項(xiàng)目中使用到的程序版本問(wèn)題。如我的項(xiàng)目中使用 dva榨呆、ant-design 罗标、roadhog 嗽上、微信小程序锹杈,還有一些開(kāi)源項(xiàng)目,這些項(xiàng)目并不會(huì)每天都有更新省店,官方勤快一點(diǎn)的每周固定更新一次竿拆,懶一點(diǎn)的半個(gè)月宙拉,一個(gè)月左右更新一次。所以我一般每周一去開(kāi)源社區(qū)逛一逛丙笋,看看最新動(dòng)態(tài)鼓黔,社區(qū)里會(huì)有更新日志,沒(méi)有日志的可以去 Issue 庫(kù)里看看又出現(xiàn)了什么新的問(wèn)題不见。

2. 開(kāi)源中國(guó)網(wǎng)站

開(kāi)源中國(guó)社區(qū)首頁(yè)有一個(gè)板塊專門(mén)介紹軟件更新資訊澳化,里面有更新的軟件版本,更新內(nèi)容稳吮,并且涉及面極廣缎谷。每天逛一逛再也不用擔(dān)心拉下什么重要更新事項(xiàng)了。

開(kāi)源社區(qū)軟件更新板塊
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灶似,一起剝皮案震驚了整個(gè)濱河市列林,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酪惭,老刑警劉巖希痴,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異春感,居然都是意外死亡砌创,警方通過(guò)查閱死者的電腦和手機(jī)虏缸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嫩实,“玉大人刽辙,你說(shuō)我怎么就攤上這事〖紫祝” “怎么了宰缤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)晃洒。 經(jīng)常有香客問(wèn)我慨灭,道長(zhǎng),這世上最難降的妖魔是什么球及? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任氧骤,我火速辦了婚禮,結(jié)果婚禮上桶略,老公的妹妹穿的比我還像新娘语淘。我一直安慰自己诲宇,他們只是感情好际歼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著姑蓝,像睡著了一般鹅心。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纺荧,一...
    開(kāi)封第一講書(shū)人閱讀 49,837評(píng)論 1 290
  • 那天旭愧,我揣著相機(jī)與錄音,去河邊找鬼宙暇。 笑死输枯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的占贫。 我是一名探鬼主播桃熄,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼型奥!你這毒婦竟也來(lái)了瞳收?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤厢汹,失蹤者是張志新(化名)和其女友劉穎螟深,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體烫葬,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡界弧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年凡蜻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夹纫。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咽瓷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舰讹,到底是詐尸還是另有隱情茅姜,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布月匣,位于F島的核電站钻洒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锄开。R本人自食惡果不足惜素标,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萍悴。 院中可真熱鬧头遭,春花似錦、人聲如沸癣诱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)撕予。三九已至鲫惶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間实抡,已是汗流浹背欠母。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吆寨,地道東北人赏淌。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像啄清,于是被迫代替她去往敵國(guó)和親六水。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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