SVN 簡介、相關概念及優於CVS之處

SVN 簡介、相關概念及優於CVS之處

SVN 簡介

Subversion(SVN) 是一個開源的版本控制系統, 也就是說 Subversion 管理著隨時間改變的數據。 這些數據放置在一箇中央資料檔案庫(repository) 中。 這個檔案庫很像一個普通的文件服務器, 不過它會記住每一次文件的變動。 這樣你就可以把檔案恢復到舊的版本, 或是瀏覽文件的變動歷史。

SVN 的一些概念

  • repository(源代碼庫):源代碼統一存放的地方
  • Checkout(提取):當你手上沒有源代碼的時候,你需要從repository checkout一份
  • Commit(提交):當你已經修改了代碼,你就需要Commit到repository
  • Update (更新):當你已經Checkout了一份源代碼, Update一下你就可以和Repository上的源代碼同步,你手上的代碼就會有最新的變更

日常開發過程其實就是這樣的(假設你已經Checkout並且已經工作了幾天):Update(獲得最新的代碼) -->作出自己的修改並調試成功 --> Commit(大家就可以看到你的修改了) 。

如果兩個程序員同時修改了同一個文件呢, SVN可以合併這兩個程序員的改動,實際上SVN管理源代碼是以行為單位的,就是說兩個程序員只要不是修改了同一行程序,SVN都會自動合併兩種修改。如果是同一行,SVN會提示文件Confict, 衝突,需要手動確認。

SVN 的主要功能

(1)目錄版本控制

CVS 只能跟蹤單個文件的歷史, 不過 Subversion 實作了一個 "虛擬" 的版本控管文件系統, 能夠依時間跟蹤整個目錄的變動。 目錄和文件都能進行版本控制。

(2)真實的版本歷史

自從CVS限制了文件的版本記錄,CVS並不支持那些可能發生在文件上,但會影響所在目錄內容的操作,如同複製和重命名。除此之外,在CVS裡你不能用擁有同樣名字但是沒有繼承老版本歷史或者根本沒有關係的文件替換一個已經納入系統的文件。在Subversion中,你可以增加(add)、刪除(delete)、複製(copy)和重命名(rename),無論是文件還是目錄。所有的新加的文件都從一個新的、乾淨的版本開始。

(3)自動提交

一個提交動作,不是全部更新到了檔案庫中,就是完全不更新。這允許開發人員以邏輯區間建立並提交變動,以防止當部分提交成功時出現的問題。

(4)納入版本控管的元數據

每一個文件與目錄都附有一組屬性關鍵字並和屬性值相關聯。你可以創建, 並儲存任何你想要的Key/Value對。 屬性是隨著時間來作版本控管的,就像文件內容一樣。

(5)選擇不同的網絡層

(6)一致的數據處理方式

Subversion 使用二進制差異算法來異表示文件的差異, 它對文字(人類可理解的)與二進制文件(人類無法理解的) 兩類的文件都一視同仁。 這兩類的文件都同樣地以壓縮形式儲存在檔案庫中, 而且文件差異是以兩個方向在網絡上傳輸的。

(7)有效的分支(branch)與標籤(tag)

在分支與標籤上的消耗並不必一定要與項目大小成正比。 Subversion 建立分支與標籤的方法, 就只是複製該項目, 使用的方法就類似於硬連接(hard-link)。 所以這些操作只會花費很小, 而且是固定的時間。

(8)Hackability

Subversion沒有任何的歷史包袱; 它主要是一群共用的 C 程序庫, 具有定義完善的API。這使得 Subversion 便於維護, 並且可被其它應用程序與程序語言使用。

優於CVS之處

  • 1、原子提交。一次提交不管是單個還是多個文件,都是作為一個整體提交的。在這當中發生的意外例如傳輸中斷,不會引起數據庫的不完整和數據損壞。
  • 2、重命名、複製、刪除文件等動作都保存在版本歷史記錄當中。
  • 3、對於二進制文件,使用了節省空間的保存方法。(簡單的理解,就是隻保存和上一版本不同之處)
  • 4、目錄也有版本歷史。整個目錄樹可以被移動或者複製,操作很簡單,而且能夠保留全部版本記錄。
  • 5、分支的開銷非常小。
  • 6、優化過的數據庫訪問,使得一些操作不必訪問數據庫就可以做到。這樣減少了很多不必要的和數據庫主機之間的網絡流量


分享到:


相關文章: