Git和SVN的對比

不是公子的小白發表於2024-03-25

差異

安全性

SVN:較差,定期備份,並且是整個SVN都得備份。Git:較高,每個開發者的本地就是一套完整版本庫,記錄著版本庫的所有資訊。

許可權管理

SVN:SVN的許可權管理相當嚴格,可以按組、個人針對某個子目錄的許可權控制,每個目錄下都會有個.SVN的隱藏檔案。Git:Git沒有嚴格的許可權管理控制,只有賬號角色劃分。但Git可以透過分支合併時的審查策略來勉強繞過此問題。

倉儲大小

SVN程式碼全記錄在伺服器中,Git每份倉庫clone都擁有程式碼的全記錄,意味著對於SVN而言,伺服器的才是全的,你下載下來的可以小一點。而對於Git,你下下來的,和伺服器上的是一樣的。所以使用SVN,會減少各開發機的物理空間佔用。不過這不一定意味著傳輸時間的減少,因為Git是自帶壓縮傳輸的,而SVN沒有。

分支(branch)的使用範圍不一樣

Git中,你只能針對整個倉庫作branch,而且一旦刪除,便無法恢復。而SVN中,branch可以針對任何子目錄,它本質上是一個複製操作。所以,可以建立非常多、層次性的branch,並且,在不需要時將其刪除,而以後需要時只要checkout老的SVN版本就可以了。

區域性更新,區域性還原

SVN由於是在每個資料夾建立一個.svn資料夾來實現管理,所以可以很簡單實現區域性更新或者還原。假如你只希望更新某些部分,則SVN可以很好實現。同時程式碼寫錯了,同時可以很好實現區域性還原,當然Git也可以透過歷史版本還原,但是無法簡單地實現區域性還原。

對比可以看出:分散式版本管理僅僅是增加了本地庫這個概念,其餘的概念與集中管理並無區別。SVN在與伺服器同步之前無法提交程式碼,因而本地修改更容易出問題。

SVN與Git的區別

  1. Git是分散式的,而SVN是集中式的;
  2. Git把內容按後設資料方式儲存,而SVN是按檔案:因為Git目錄是處於個人機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標籤,分支,版本記錄等;
  3. Git分支和SVN的分支不同:SVN會發生分支遺漏的情況,而Git可以同一個工作目錄下快速的在幾個分支間切換,很容易發現未被合併的分支,簡單而快捷的合併這些檔案;
  4. Git沒有一個全域性的版本號,而SVN有;
  5. Git的內容完整性要優於SVN:Git的內容儲存使用的是SHA-1雜湊演算法。這能確保程式碼內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。

SVN的優點

  1. 採用集中式,易於管理,保證安全性;
  2. 管理方便,邏輯明確,理念符合常規思維;
  3. 程式碼的一致性高;
  4. 適合人數不多的專案開發;
  5. 允許一個檔案有任意多的可命名屬性,會關注所有的檔案型別;
  6. 支援二進位制檔案,更容易處理大檔案;
  7. 支援空目錄。

SVN的缺點

  1. 伺服器壓力太大,資料庫容量暴增;
  2. 必須連線在伺服器上(時刻都得聯網操作),否則基本不能工作、提交、對比、還原等;
  3. 不適合開源開發。

Git的優點

  1. 適合分散式開發,強調個體;
  2. 公共的伺服器壓力和數量都不會太大;
  3. 速度快,成熟的架構,開發靈活;
  4. 任意兩個開發者之間可以很容易的解決衝突;
  5. 離線工作,管理程式碼成本低,不需要依賴伺服器;
  6. 部署方便,基本上下個命令就可以用;
  7. 良好的分支機制,可以讓主幹程式碼保持乾淨。

Git的缺點

  1. 學習成本比較大,學習週期比較長,要求人員素質比較高;
  2. 不符合常規思維;
  3. 程式碼保密性差,一旦開發者把整個庫克隆下來就可以完全公開所有程式碼和版本資訊。

掃碼關注公眾號,檢視更多精彩內容

相關文章