【云小課】應用平臺第8課 版本管理發(fā)展史之Git+——代碼托管(云平臺課堂)
版本管理工具之于軟件開發(fā),猶如地基之于建筑。這句話真是再貼切不過了,當項目越做越大,迭代越來越頻繁,版本管理工具變得越來越具有必要性。

有了版本管理工具,我們可以更方便地瀏覽、檢出所有開發(fā)過程的歷史版本與修改記錄,做任何修改都不再害怕,因為你可以輕易的復原回任意一個版本并且知曉每一次修改的原因。甚至你可以從歷史版中單獨抽出某一次修改,將它放到另一個版本中。
我們也可以通過版本管理工具來同時并行修改和發(fā)布軟件的不同版本,例如公測版本、付費版本和開發(fā)中版本。
選擇一款版本管理工具,已經(jīng)被大多數(shù)企業(yè)作為項目的必要準備工作之一,相信沒有一個開發(fā)者沒有聽過Git、SVN這些工具。
今天我們來尋根溯源,扒一扒版本管理的發(fā)展史。
版本管理發(fā)展史
上圖是版本管理發(fā)展史的里程碑圖,下面我們將其分成四個階段詳細來說說。
史前時代 手動備份
在修改文件之前將它手動備份一份,名稱做上標記,這就是最早的版本管理。
手動備份的存在,說明了人們需要版本管理工具。
農(nóng)耕時代 本地版本管理工具
如同農(nóng)耕時代的信息閉塞一樣,第一批產(chǎn)生的版本管理工具被稱為本地版本管理工具,它們只被賦予在一臺服務器上管理文件版本的能力,并不具備聯(lián)網(wǎng)、交互的特性。
其中比較有代表性的是1982 年由米國普渡大學的 Walter F. Tichy 首次發(fā)布的RCS(Revision Control System),它比Linux的內核發(fā)布還要早9年,最初是為了替代世界上第一款版本管理軟件(SCCS,1972,用于Unix系統(tǒng))所研發(fā)的,起初RCS只應用在Unix系統(tǒng),而后移植到Linux平臺,甚至還有應用于Windows平臺的可執(zhí)行程序。
雖然它們已經(jīng)漸漸被人們淡忘,但是畢竟是版本管理領域的文明啟蒙之作,如今你仍能從各大開源網(wǎng)站找到它們的源碼。
這個時代也產(chǎn)生了鎖的概念。
通過加鎖可以將并發(fā)提交轉換成順序提交,避免了同一文件被多人同時修改,這也是最初的版本控制手段之一。
帝國時代 集中式版本管理工具
集中式版本管理工具的特點是,用一個服務器來保存所有文件的修訂版本,而協(xié)同工作的人們都通過客戶端連到這臺服務器,下載最新的代碼或是更新提交,這像極了中央集權制的帝國時代。
其缺點很明顯,就是如果服務器掛了,所有參與者都無法工作了,并且工作成果有可能就此丟失。
但是集中式版本管理工具的出現(xiàn),解決了軟件行業(yè)遇到的第一個史詩級問題——跨地域協(xié)同開發(fā)。
有問題,就會出現(xiàn)解決問題的英雄,一位名叫 Dick Grune 的荷蘭科學家在 1986 年開發(fā)了一款名叫CVS(Concurrent Versions System)的版本管理工具,這是世界上第一款集中式版本管理工具,它的設計初衷就是解決跨地域協(xié)同開發(fā)帶來的不便。
當時Dick和他的兩名學生正在合作完成一個編譯器項目,一個學生是朝九晚五的穩(wěn)定工人,另一個學生的時間是不規(guī)律的,而Dick本人只能在晚上做這個項目,顯然三個人沒法坐到一起完成項目,為此Dick在RCS的基礎上研發(fā)了CVS。
CVS曾是世界上最為流行的版本管理軟件,這種情況持續(xù)了十余年,直到 2000 年被 Subversion(SVN) 所取代。
2010 年 1 月,SVN正式成被 Apache 軟件基金會接收,并成為一個頂級項目,如今(2020年)SVN仍然是集中式版本管理工具中的江湖扛把子。
SVN也是首創(chuàng)使用分支系統(tǒng)的版本管理軟件,雖然其起初僅能將所有文件備份做為一個分支,但也對今后版本管理軟件的發(fā)展產(chǎn)生了深厚的影響。
分支,可以理解為一個項目中平行存在的幾套代碼,它們可以彼此獨立被修改,也可以被合并。
共產(chǎn)主義時代 分布式版本管理工具
分布式版本管理系統(tǒng)的最大特點就是客戶端并不只從服務器提取最新版本的文件快照,而是把倉庫完整的鏡像下來,包括了完整的歷史記錄。
可以這樣理解,每個客戶端其實都可以當做是中央服務器。
這種運作模式帶來的優(yōu)勢不僅僅是當中央服務器掛掉了、數(shù)據(jù)損壞了,從任何一個本地客戶端都可以重新恢復。還可以允許開發(fā)者在飛機、游輪這種沒有網(wǎng)絡的環(huán)境下編程時,先將工作內容提交到本地倉庫,等有網(wǎng)絡條件時再合并到遠程倉庫。
分布式版本管理工具已經(jīng)基本剔除了鎖的限制方式,允許項目參與者隨時拉取中央倉庫內容到本地倉庫,在本地庫自由開發(fā),而只將對項目有貢獻的修改合并回中央倉庫,這種模式在開源項目中被利用到了極致,每個參與者都會感覺自己就是項目擁有者,開源項目的托管平臺儼然就是一個迷你的共產(chǎn)主義社會。
Git可說是世界上最先進的分布式版本管理系統(tǒng)(沒有之一)。
Linux開源項目的初期,世界各地的志愿者把源代碼文件發(fā)給Linus,然后由Linus本人通過手工方式合并到Linux源碼中,這種情況持續(xù)了十多年(1991~2002),代碼庫的幾何式增大讓Linus很難繼續(xù)通過手工方式管理了,于是Linus選擇了一個商業(yè)化的版本管理系統(tǒng)BitKeeper(世界上第一款分布式版本管理軟件,當時唯一的缺點就是 貴!),BitKeeper的東家BitMover公司也出于人道主義精神,授權Linux社區(qū)免費使用這個版本管理系統(tǒng)。
直到2005年,Linux開源社區(qū)的一位參與者破解了BitKeeper的協(xié)議,被BitMover公司發(fā)現(xiàn)了,于是BitMover公司怒了,收回了Linux社區(qū)的免費使用權。由于倡導開源精神的Linus瞧不上集中式的CVS、SVN,又買不起B(yǎng)itKeeper,迫不得已開始研發(fā)自己的版本管理工具,并命名為Git(英國俚語,討厭鬼),用Linus自己的話說:
關于Git的具體研發(fā)時間,有人說是兩周,也有人說是兩個月,其實都不準確,下面是文獻記載的Git誕生里程碑。
2005 年 4 月 3 日,開始開發(fā) Git。
2005 年 4 月 6 日,項目發(fā)布。
2005 年 4 月 7 日,Git 就可以作為自身的版本管理工具了。
2005 年 4 月 18 日,發(fā)生第一個多分支合并。
2005 年 4 月 29 日,Git 的性能就已經(jīng)達到了 Linus 的預期。
2005 年 6 月 16 日,Linux 核心 2.6.12 發(fā)布,那時 Git 已經(jīng)在維護 Linux 核心的源代碼了。
而后Git迅速成為世界使用量第一的版本管理軟件,尤其是到2008年,誕生了首個伴生開源社區(qū)GitHub,更是讓更多的人了解和開始使用Git。
中國開源社區(qū)主要創(chuàng)始人、華為高級產(chǎn)品經(jīng)理莊表偉老師在《從28萬個開源項目中,我們能夠學到一些什么?》一文中也多次提到:“Git的統(tǒng)治地位,已經(jīng)無可動搖”。
為什么更多人愿意選擇Git?
那么,開發(fā)者愿意使用Git作為他們的版本管理工具,僅僅是因為它出身名門么?多少會是有一些影響的,你想啊,生而為了管理Linux這種操作系統(tǒng)級別的項目,還有什么項目是它搞不定的呢。
但是更多睿智的開發(fā)者看中的是Git的特質:
分布式:
這使得服務器的壓力不會很大,客戶端也被賦予了更多權限,可以拉取全量代碼、歷史,離線工作等。
將分支的使用發(fā)揚光大:
相比于SVN,Git采用快照的形式存儲分支,并用指針方式完成切換,這使得切換變得非常的迅速,并且允許服務器與各個客戶端都可以有自己獨立的分支。
在本地解決代碼沖突:
Git不允許將有沖突的代碼段提交到服務器,它倡導開發(fā)者將差異代碼拉取到本地,并提示開發(fā)者差異位置,在本地解決、合并后,再提交到服務器,這不僅對于開發(fā)者來說是個最好的解決方案,同時也保證了服務器中代碼版本的穩(wěn)定性。
可以很簡單,也可以很復雜:
Git提供了豐富的指令集來實現(xiàn)幾乎你能想到的所有功能,但是上手卻非常簡單,新手只要知道clone、add、commit就能完成基本工作流,高手又可以用復雜的指令組合展現(xiàn)出真正的技術!
永久免費:
這個其實也蠻重要。
Git也有缺點!
金無足赤,白璧微瑕,Git雖然是公認的王者,但是也不是沒有缺點,我們來看下Git跟天下第二SVN的對比。
功能&特性
Git
SVN
運行模式
分布式,每個客戶端都是獨立版本庫
集中式,所有版本存儲于中央服務器
離線工作
支持,可將代碼提交到本地版本庫
不支持,一切需要依賴于連通中央服務器
分支
快照式分支,切換速度快
全量文件式分支,切換速度慢,費內存
對并發(fā)的處理
分支、本地合并,支持多人多個版本并行研發(fā)
鎖,對并發(fā)的處理辦法就是避免并發(fā)。。。
歷史版本存儲
快照,多終端 ,經(jīng)濟而安全
全量存于中央服務器,一旦損害,很難找回
使用難度
易上手、難精通
對中文的支持很出色,容易使用
權限管理
基本沒有
比較完善,支持顆粒級配置權限
可以看到Git在運作機制和具體功能實現(xiàn)上都是略勝一籌的,但其富有開源精神的血統(tǒng)決定了其在權限管理方面的薄弱,Linux對Git的設計就是,任何人都能拉取代碼倉庫,而且是全量的拉取,也包括了倉庫的歷史記錄和歷史版本,這在開源項目中實在是個很酷的設定,但在商業(yè)項目中,這難道不是一個Bug?
華為云CodeHub服務彌補了Git的缺點
很多組織都很欣賞Git的優(yōu)秀,同時也發(fā)現(xiàn)了Git在權限控制方面的薄弱,紛紛發(fā)布了基于Git的代碼托管平臺,就如同為Git打造的甲胄,其中值得一提的是華為云打造的代碼托管(CodeHub)平臺。
這身紅色的盔甲,沉淀著了華為在信息安全領域近30年的探索,下面我們來看看CodeHub目前已知的權限控制與安全策略:
采用“租戶+用戶+用戶組+角色”多維度模型對權限進行顆粒化控制。
用戶需通過HTTPS/SSH與云端倉庫通信,將使用SSH Key或者倉庫用戶名及密碼進行訪問鑒權。
所有操作都必須帶有Token,對所有關鍵操作進行審計記錄,審計日志被持久化,可保留足夠長時間,并可進行精確的回溯。
用戶的托管文件是以加密的方式存儲的。
支持保護分支的設置。
提供了多人參與、評分制的代碼合并評審組件。
簡單來說,CodeHub將用戶的讀寫權限變成了可控可配置的,它補上了Git的最后一塊短板。
CodeHub服務還能做什么?
↓↓↓↓↓~給求知者的傳送門~↓↓↓↓↓
豐富的代碼模板
可自定義的代碼提交規(guī)則
代碼提交與項目任務狀態(tài)可產(chǎn)生聯(lián)動
積分制的Code Review
代碼提交自動觸發(fā)DevOps流水線
在線代碼檢查
在瀏覽器里Coding
數(shù)據(jù)分析
跳過那些磨磨唧唧的,直接去創(chuàng)建一個倉庫試試~
豐富的代碼模板
華為云代碼托管服務針對不同的開發(fā)語言、構建環(huán)境,預置了數(shù)十個倉庫模板,開發(fā)者可以使用模板在云端創(chuàng)建倉庫,達到快速初始化研發(fā)環(huán)境的效果。
針對正在學習軟件開發(fā)的同學們,也提供了豐富了的Demo源代碼,可直接拿來學習,或者用于體驗在DevCloud中的DevOps全流程。
了解更多
另外,支持用戶將自己的倉庫共享為模板。
可自定義的代碼提交規(guī)則
華為云代碼托管服務支持對每個倉庫設置不同的代碼提交規(guī)則,保證了中央庫的代碼規(guī)范性,為團隊素質建設保駕護航。
了解更多
代碼提交與項目任務狀態(tài)可產(chǎn)生聯(lián)動
華為云代碼托管服務可以將代碼的變更與項目管理中的工作項(需求單、問題單)相關聯(lián),而自動改變工作項的狀態(tài)。
也就是說,開發(fā)者只需要提交代碼,問題單就能自動流轉,這大大地提升了協(xié)作效率,將開發(fā)者從繁雜的工作流程里解救出來,使其更專注的投入編碼中。
了解更多
積分制的Code Review
代碼評審的價值不僅僅是集思廣益,避免bug、提升代碼質量、尋求更優(yōu)的解決方案,還可以通過這個過程讓每個項目參與者了解更多的業(yè)務模塊,同時也能達到人員互備的目的。
華為云代碼托管服務提供了積分制的在線Code Review功能,項目參與者可以在評審中進行打分、評論、發(fā)起討論等操作,總積分可以作為一個標準,團隊達成共識后,方可進行下步的合入分支等操作。
評審意見的記錄,也使得團隊成員在需要了解項目歷史時,可以更方便的順著代碼、順著提交記錄與討論記錄解到當時發(fā)生了什么。
了解更多
代碼提交自動觸發(fā)DevOps流水線
作為華為云DevCloud的組成服務之一,代碼托管服務可以被作為云上DevOps的觸發(fā)器使用。
了解更多
在線代碼檢查
華為云代碼托管服務會自動識別倉庫語言,并生成對應的檢查報告。
在倉庫管理管理頁面就能看到倉庫的代碼健康度,點擊更能看到詳細的代碼檢查報告。
了解更多
在瀏覽器里Coding
華為云代碼托管服務內置了Cloud IDE功能,開發(fā)者可以在瀏覽器中Coding。
大大提升了開發(fā)者對緊急任務的響應速度,讓敏捷開發(fā)模式更加得心應手。
了解更多
數(shù)據(jù)分析
華為云代碼托管服務提供了多維度的數(shù)據(jù)分析報表(代碼貢獻度統(tǒng)計、倉庫語言統(tǒng)計、提交統(tǒng)計、倉里提交網(wǎng)絡圖等),幫助倉庫管理者了解研發(fā)工作的推進情況。
了解更多
如果您正在尋找一個靠譜的版本管理平臺,不妨到華為云代碼托管(CodeHub)服務創(chuàng)建一個倉庫試試,5人以下使用免費哦~
Git 代碼托管 CodeHub
版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。
版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。