1. 程式人生 > >版本控制SVN與Git

版本控制SVN與Git

SVN VS Git

SVN

作為一個開源的版本控制系統,管理著隨時間改變的資料,這些資料放置在一箇中央資料檔案庫(repository)中。這個庫就像一個普通的檔案伺服器,它會記住每次檔案的變動。我們可以瀏覽檔案的變動歷史,把當前版本的檔案恢復到舊的版本。

SVN 集中式協同模型

集中式程式碼管理的核心是伺服器,所有的版本資訊都放在伺服器上,因此受到網路的限制。所有開發者在開始一天的工作前都要從伺服器獲取最新版本的程式碼,然後進行開發,再提交程式碼,解決衝突。

Git

Git 是一款開源的分散式版本控制系統,可以敏捷高效的處理或或大或小的專案。分散式和 SVN 等集中式的最大區別在於每個開發人員從中心版本庫/伺服器上 check out 程式碼後會在自己的機器上克隆一個自己的版本庫

。這樣在沒有網路的情況下在本地也可以進行開發,程式碼管理。

Git 分散式模型

Git 的一些功能特性

  • 從伺服器上克隆完整的 Git 倉庫(包括程式碼和版本資訊)到單機上;
  • 在自己的機器上根據不同的開發目的,建立分支,修改程式碼;
  • 在單機上自己建立的分支上提交程式碼;
  • 在單機上合併分支;
  • 把伺服器上最新版的程式碼 fetch 下來,然後跟自己的主分支合併;
  • 生成補丁(patch),把補丁傳送給開發者;

Git 與 Github

Git 是一個系統,相當於一個工具,而 Github 就是基於這樣一個系統的程式碼託管平臺,讓開發者更高效的使用 Git 去託管自己的程式碼。

Git 與 SVN 區別

  1. Git 是分散式的,SVN 是集中式的。Git 的好處是跟其他同事不會有太多的衝突,自己寫的程式碼放在自己電腦上,一段時間後再提交、合併,也可以在不用聯網在本地提交。
  2. Git 沒有一個全域性的版本號,而 SVN 有。SVN 裡容易閱讀的數字版本號,它實際是任何一個相應時間的原始碼快照。
  3. Git 分支和 SVN 分支不同。分支在 SVN 中一點不特別,就是版本庫中的另外一個目錄。而 Git 可以從同一個工作目錄下快速的在幾個分支之間切換。
  4. Git 把內容按元資料方式儲存,而 SVN 是按檔案。所有的資源控制系統都是把檔案的元資訊隱藏在一個類似 .svn.cvs 等資料夾裡。如果你把 .git
    目錄的體積大小跟 .svn 比較,你會發現他們差距很大。因為 .git 目錄是處於你的機器上的一個克隆版的版本庫,它具有中心版本庫上所有的東西,例如標籤、分支、版本資訊等。
  5. Git 的內容完整性要優於 SVN。Git 的內容儲存使用的是 SHA-1 雜湊演算法。這能確保程式碼內容的完整性,在遇到磁碟故障和網路問題時降低對版本庫的破壞。

Git 和 SVN 的適用性

SVN 更適用於專案管理,Git 僅適用於程式碼管理。一個研發隊伍的成員正常包括:需求分析、設計、美工、程式設計師、測試、運維,每個成員在工作中都有產出物,包括了文件、設計程式碼、程式程式碼,這些都需要按專案集中進行管理的。SVN 能清楚的按目錄進行分類管理,使專案組的管理處於有序高效的狀態。

文章只是作為個人記錄學習使用,如有不妥之處請指正,謝謝。