首先介紹幾個版本控制軟件相互比較的重要依據,更詳細的比較請參考文中鏈接:
* 版本庫模型(Repository model):描述了多個源碼版本庫副本間的關係,有客戶端/服務器和分佈式兩種模式。在客戶端/服務器模式下,每一用戶通過客戶端訪問位於服務器的主版本庫,每一客戶機只需保存它所關注的文件副本,對當前工作副本(working copy)的更改只有在提交到服務器之後,其它用戶才能看到對應文件的修改。而在分佈式模式下,這些源碼版本庫副本間是對等的實體,用戶的機器出了保存他們的工作副本外,還擁有本地版本庫的歷史信息。
* 併發模式(Concurrency model):描述了當同時對同一工作副本/文件進行更改或編輯時,如何管理這種衝突以避免產生無意義的數據,有排它鎖和合並模式。在排它鎖模式下,只有發出請求並獲得當前文件排它鎖的用戶才能對對該文件進行更改。而在合併模式下,用戶可以隨意編輯或更改文件,但可能隨時會被通知存在衝突(兩個或多個用戶同時編輯同一文件),於是版本控制工具或用戶需要合併更改以解決這種衝突。因此,幾乎所有的分佈式版本控制軟件採用合併方式解決併發衝突。
* 歷史模式(History model):描述瞭如何在版本庫中存貯文件的更改信息,有快照和改變集兩種模式。在快照模式下,版本庫會分別存儲更改發生前後的工作副本;而在改變集模式下,版本庫除了保存更改發生前的工作副本外,只保存更改發生後的改變信息。
* 變更範圍(Scope of change):描述了版本編號是針對單個文件還是整個目錄樹。
* 網絡協議(Network protocols):描述了多個版本庫間進行同步時採用的網絡協議。
* 原子提交性(Atomic commit):描述了在提交更改時,能否保證所有更改要麼全部提交或合併,要麼不會發生任何改變。
* 部分克隆(Partial checkout/clone):是否支持只拷貝版本庫中特定的子目錄。
名稱 | 版本庫模型 | 併發模式 | 歷史模式 | 變更範圍 | 網絡協議 | 原子提交性 | 部分克隆 |
CVS | Client-server | Merge | Changeset | File | Pserver,ssh | No | Yes |
SVN | Client-server | 3-way merge, recursive merge, octopus merge | Changeset and Snapshot | Tree | custom (svn), custom (svn) over ssh, HTTP and SSL (usingWebDAV) | Yes | Yes |
Git | Distributed | Merge or lock | Snapshot | Tree | custom, custom over ssh, rsync, HTTP/HTTPS, email, bundles | Yes | No |
主要參考鏈接:
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software#cite_note-47
http://www.softeng.rl.ac.uk/media/uploads/publications/2010/03/cvs-svn.pdf
http://www.smashingmagazine.com/2008/09/18/the-top-7-open-source-version-control-systems/
http://jon.limedaley.com/plog/archives/2004/10/15/version-control-comparison
版本控制軟件中Trunk和Branch的區別:
Trunk---軟件開發過程中的主線,保存了從版本庫建立到當前的信息。 Branch---軟件開發過程中的分支,保存了從版本庫的某一特定點(不一定是版本庫建立時)到當前的信息。分支主要用於在不影響Trunk其它用戶情況下進行一些關於新功能的探索性或實驗性的開發,待新功能完善後它也可以合併到Trunk中。