首先介紹幾個版本控制軟件相互比較的重要依據:html
a.版本庫模型(Repository model):描述了多個源碼版本庫副本間的關係,有客戶端/服務器和分佈式兩種模式。在客戶端/服務器模式下,每一用戶經過客戶端訪問位於服務器的主版本庫,每一客戶機只需保存它所關注的文件副本,對當前工做副本(working copy)的更改只有在提交到服務器以後,其它用戶才能看到對應文件的修改。而在分佈式模式下,這些源碼版本庫副本間是對等的實體,用戶的機器除了保存他們的工做副本外,還擁有本地版本庫的歷史信息。git
b.併發模式(Concurrency model):描述了當同時對同一工做副本/文件進行更改或編輯時,如何管理這種衝突以免產生無心義的數據,有排它鎖和合並模式。在排它鎖模式下,只有發出請求並得到當前文件排它鎖的用戶才能對對該文件進行更改。而在合併模式下,用戶能夠隨意編輯或更改文件,但可能隨時會被通知存在衝突(兩個或多個用戶同時編輯同一文件),因而版本控制工具或用戶須要合併更改以解決這種衝突。所以,幾乎全部的分佈式版本控制軟件採用合併方式解決併發衝突。服務器
c.歷史模式(History model):描述瞭如何在版本庫中存貯文件的更改信息,有快照和改變集兩種模式。在快照模式下,版本庫會分別存儲更改發生先後的工做副本;而在改變集模式下,版本庫除了保存更改發生前的工做副本外,只保存更改發生後的改變信息。網絡
d.變動範圍(Scope of change):描述了版本編號是針對單個文件仍是整個目錄樹。併發
e.網絡協議(Network protocols):描述了多個版本庫間進行同步時採用的網絡協議。ssh
f.原子提交性(Atomic commit):描述了在提交更改時,可否保證全部更改要麼所有提交或合併,要麼不會發生任何改變。分佈式
g.部分克隆(Partial checkout/clone):是否支持只拷貝版本庫中特定的子目錄。svn
名稱工具 |
版本庫模型spa |
併發模式 |
歷史模式 |
變動範圍 |
網絡協議 |
原子提交性 |
部分克隆 |
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 |
CVS(Concurrent Versions System)併發版本系統目前基本快要淘汰了;SVN和GIT的思想差異很大:公司裏的集中式管理用SVN,開源開發git更合適。
SVN和GIT在用戶管理和權限控制上都很強大並且方便。SVN更適合有穩定的集中服務器,開發人員數目不是很是多,如幾十人的情形;GIT更適合大規模的分散開發,每一個開發者大多數時間都是照看本身的小攤子的情形。
轉自:http://www.cnblogs.com/sujz/archive/2011/05/12/2044379.html