【云小課】應用平臺第8課 版本管理發(fā)展史之Git+——代碼托管(云平臺課堂)

      網(wǎng)友投稿 791 2025-04-01

      版本管理工具之于軟件開發(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)出真正的技術!

      永久免費:

      這個其實也蠻重要。

      【云小課】應用平臺第8課 版本管理發(fā)展史之Git+——代碼托管(云平臺課堂)

      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小時內刪除侵權內容。

      上一篇:查找和引用函數(shù)(參考)
      下一篇:C++ Primer Plus 第4章 復合類型 學習筆記
      相關文章
      久久久久无码专区亚洲av| 亚洲久热无码av中文字幕| 亚洲色最新高清av网站| 亚洲综合综合在线| 亚洲第一中文字幕| 西西人体44rt高清亚洲 | 国产亚洲精品不卡在线| 亚洲AV永久无码精品一区二区国产| 亚洲av无码一区二区三区人妖| 亚洲人成网亚洲欧洲无码| 亚洲乱码日产精品一二三| 亚洲午夜一区二区电影院| 亚洲精品福利在线观看| 亚洲乱码卡三乱码新区| 亚洲精品免费网站| 亚洲人成色99999在线观看| 亚洲熟女综合一区二区三区| 亚洲AV无码国产剧情| 豆国产96在线|亚洲| 亚洲国产成人精品无码区二本 | 亚洲精品国产摄像头| 国产精品亚洲综合一区在线观看| 国产亚洲综合精品一区二区三区| 亚洲av成人一区二区三区在线观看| 亚洲国产香蕉人人爽成AV片久久| 国产精品亚洲w码日韩中文| 亚洲精品无码AV人在线播放| 亚洲91av视频| 亚洲国产成人精品青青草原| 亚洲天堂2016| 国产亚洲人成在线播放| 日本系列1页亚洲系列| 久久久青草青青国产亚洲免观| 精品亚洲永久免费精品| 亚洲高清无在码在线电影不卡| 中文文字幕文字幕亚洲色| 日本亚洲欧美色视频在线播放| 亚洲女人被黑人巨大进入| 亚洲精品国产品国语在线| 亚洲精品免费观看| 亚洲人成综合网站7777香蕉|