[華為云在線課程][Git基礎與實操][第1章][Git基礎理論篇][版本控制工具簡介]

      網友投稿 718 2025-03-31

      版本控制是一種記錄一個或若干文件內容變化,以便將來查閱特定版本修訂情況的系統,方便查看更改歷史,備份以及恢復以前的版本,保證多人協作不出問題。

      1,原始的版本控制

      版本控制工具的黑暗時代:

      最原始的版本控制是純手工的版本控制:修改文件,保存文件副本;

      保存副本命名隨意,版本難辨新舊,不能辨別每一版的修改內容。

      2,版本控制起源:diff & patch

      在最初的版本控制軟件出現之前,其實已經有了比較好用的源碼比較與打補丁的工具:diff和patch。

      Linus Torvalds(Linux之父)也對這兩個工具偏愛有加。

      在1991-2002年之間,即使CVS出現之后,Linus一直使用diff和patch管理著Linux的代碼。

      diff與patch是用于源碼版本控制中的兩個最基本的概念。

      CVS(Concurrent Versions System):協作版本系統。

      2.1,Diff簡介

      diff用來比較兩個文件或者目錄之間的差異。

      2.2,Patch簡介

      patch是diff的反向操作

      我們把上述差異結果保存到文件中,例如:diff.txt中,那么這個diff.txt就可以用來從left.c推算出right.c的內容,反之亦可。

      通過diff.txt,把left.c變成right.c的內容:

      $ patch left.c diff.txt

      上面執行的命令的意思是,把diff.txt應用到left.c文件上,命令結束后left.c與right.c中的內容是一樣的。

      通過diff.txt,把right.c變成原來left.c的內容:

      $ patch -R right.c diff.txt

      上面執行的命令中多了一個-R,其代表的意思是把diff.txt采用反向的方式,應用到right.c上,命令結束后right.c與left.c中原來的內容是一樣的。

      3,RCS:最早期的本地版本控制工具

      RCS(Revision Control System)

      RCS作為非常古老的版本工具,遠遠在SVN和已經退役的CVS之前,它的古老程度應該比Web開發的ASP前代的CGI還要更久遠。

      如果想對版本管理實現方式進行深入研究的話,研究RCS是一種最為簡單的入手方式。

      RCS采用把diff的集合,采用RCS自己的格式保存到磁盤中(可以通過diff -n left.c right.c產生RCS格式的diff內容),能通過這些diff集合,重新回到文件修改的任何歷史中的點。

      4,CVS & SVN:集中式版本控制工具

      CVS簡介

      CVS(Concurrent Versions System)誕生與1985年,有史以來第一個被大規模使用的版本控制工具。CVS的出現讓工程師可以協同工作。

      CVS存在的問題

      不支持原子化提交,會導致客戶端向服務器端提交了不完整的數據,還有網絡傳輸效率低等。

      SVN誕生

      SVN(Subversion)目的是創建一個更好用的版本控制以取代CVS。優化了服務器上內容的存儲,實現了原子提交等。

      SVN存在的問題

      在局域網之外使用SVN,單是查看日志、提交數據等操作的延遲,就足以讓基于廣域網協同工作的團隊抓狂了。

      集中式版本控制存在的問題

      狹窄的提交通道

      提交排隊,不能同時修改,提交缺乏質量控制。

      缺乏代碼門禁,在本地代碼提交到服務器之間缺少檢查防護。一種解決方案:Rietveld提供旁路檢查

      數據安全性差

      單點故障

      黑客攻擊

      5,Git:Linus的第二個偉大作品

      5.1,Git起源

      Linux之父Linus是堅定的CVS反對者,他也同樣地反對SVN。2002年Linus頂著開源社區精英們的口誅筆伐,選擇了一個商業版本控制系統BitKeeper作為Linux內核的代碼管理工具。和CVS/SVN不同,BitKeeper是屬于分布式版本控制系統。

      Git誕生大事件

      2005年4月3日,開始開發Git。

      2005年4月6日,項目發布。

      2005年4月7日,Git就可以作為自身的版本控制工具了。

      2005年4月18日,發生第一個多分支合并。

      2005年4月29日,Git的性能就已經達到了Linus的預期。

      2005年6月16日,Linux核心2.6.12發布,那時Git已經在維護Linux核心的源代碼。

      5.2,集中式 VS 分布式

      集中式 VS 分布式(1):記錄差異還是記錄快照

      Git和其他版本控制系統(包括Subversion和近似工具)的主要差別在于Git對待數據的方法。

      概念上來區分,其它大部分系統以文件變更列表的方式存儲信息。

      這類系統(CVS、Subversion、Perforce、Bazaar等等)將保存的信息看作是一組基本文件和每個文件隨時間逐步積累的差異。

      Git不按照以上方式對待或保存數據。反之,Git更像是把數據看作是對小型文件系統的一組快照。

      每次提交更新,或在Git中保存項目狀態時,它主要對當時的全部文件制作一個快照并保存這個快照的索引。

      為了高效,如果文件沒有修改,Git不再重新存儲該文件,而是只保留一個鏈接指向之前存儲的文件。Git對待數據更像是一個快照流。

      集中式 VS 分布式(2):脆弱的中央庫 VS 強壯的分布庫

      脆弱的中央庫

      備份的重要性

      集中式CVS存在單點故障,備份極其重要。

      [華為云在線課程][Git基礎與實操][第1章][Git基礎理論篇][版本控制工具簡介]

      服務器壓力

      基本上所有的操作需要與服務器交互,操作受限于帶寬,不能移動辦公。

      安全性

      集中式CVS假定服務器是安全的。假定成立嗎?存在單點故障,黑客攻擊等。

      不適合開源項目

      強調集中管理,適合人數不多的項目。

      強壯的分布庫

      全是服務器

      數據最安全;無帶寬和性能瓶頸。

      提交為本地操作

      快;全離線操作;編碼不會被沖突打斷;能夠移動辦公。

      數據的完整性

      Git數據、提交全部使用SHA1哈希,以保證完整性,甚至提交可以使用PGP簽名。

      工作模型

      適合分布式開發,強調個體。

      Git容災示例

      kernel.org 2011 attack(2011.8-2011.11)

      宇宙射線反轉磁盤一個比特的數據修復

      5.3,選擇合適的版本控制工具

      SVN不適合的領域

      跨地域的協同開發

      對代碼的高質量追求和代碼門禁

      Git不適合的領域

      不適合Word等二進制文檔的版本控制,因為:Git無鎖定/解鎖模式,故不能排他式修改。

      整體的讀授權,不能將讀授權精細到目錄級別,解決方案:版本庫按照目錄拆分。

      6,結語:Git是什么

      Git是一個版本控制工具,而且是一個開源的分布式版本控制工具。

      按照Linus本人的描述,Git的很多命令設計是來源于BitKeeper,但是Git有更多屬性:

      極快的速度

      簡單的設計

      對非線性開發模式的強力支持(允許成千上萬并行開發的分支)

      完全分布式

      有能力高效管理類似Linux內核一樣的超大規模項目(速度和數據量)

      7,小結

      版本控制工具的發展歷史經過:原始人工維護狀態,本地RCS,集中式如CVS、SVN和分布式如Git。

      版本控制工具提供了協作開發的能力,借助它們我們可以回到任何時間的代碼狀態。

      集中式版本控制工具,幾乎所有的動作都需要服務器參與,并且數據安全性與服務器關系很大。

      Git是分布式版本控制工具,除了與服務器之間進行按需同步之外,所有的提交操作都不需要服務器。

      Git

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:甘特圖如何畫
      下一篇:如何將表格打印到一頁紙上(怎么打印表格在一頁紙上)
      相關文章
      国产精品亚洲一区二区三区| 理论亚洲区美一区二区三区| 一本久到久久亚洲综合| 国产亚洲精品影视在线| 天堂亚洲国产中文在线| 亚洲三级视频在线| 亚洲av无码久久忘忧草| 国产精品久久亚洲不卡动漫| 午夜在线a亚洲v天堂网2019| 亚洲中文字幕无码中文| 99亚偷拍自图区亚洲| 亚洲人成网亚洲欧洲无码| 亚洲欧美精品午睡沙发| 亚洲GV天堂无码男同在线观看 | 亚洲国产熟亚洲女视频| 日本亚洲精品色婷婷在线影院| 亚洲免费中文字幕| 亚洲一区精品视频在线| 天堂亚洲国产中文在线| 亚洲爆乳成av人在线视菜奈实| 亚洲AV无码专区在线观看成人| 亚洲AV无码AV男人的天堂不卡 | 久久亚洲国产精品一区二区| 亚洲成AV人片在| 久久精品国产亚洲77777| 亚洲激情电影在线| 亚洲日日做天天做日日谢| 亚洲欧美中文日韩视频| 久久亚洲中文字幕无码| 亚洲第一区精品日韩在线播放| 亚洲精品国产V片在线观看| 久久亚洲精品无码播放| 亚洲不卡中文字幕无码| 亚洲人成在线观看| 亚洲欧洲国产综合| 亚洲自偷自偷在线成人网站传媒| 亚洲av综合av一区二区三区| 一本色道久久88亚洲综合| 亚洲乱码日产一区三区| 78成人精品电影在线播放日韩精品电影一区亚洲 | 欧美激情综合亚洲一二区|