常見的版本控制軟件:版本控制工具有哪些

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

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存在單點故障,備份極其重要。服務器壓力基本上所有的操作需要與服務器交互,操作受限於帶寬,不能移動辦公。安全性集中式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是分佈式版本控制工具,除了與服務器之間進行按需同步之外,所有的提交操作都不需要服務器。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/226791.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:52
下一篇 2024-12-09 14:52

相關推薦

發表回復

登錄後才能評論