常用源代碼管理軟件 |
全稱 |
出處 |
CVS |
Concurrent Versions System |
Open Source |
SVN |
Apache Subversion |
Open Source |
VSS |
Visual Source Safe |
Microsoft |
TFS |
Team Foundation Server |
Microsoft |
P4 |
Perforce |
Perforce |
Git |
Git, 中文蠢貨,作者自嘲之意 |
Open Source |
CC |
ClearCase |
IBM Rational |
名稱 |
幕后推手 |
狀態 |
架構 |
並發模式 |
授權 |
支持平台 |
AccuRev SCM |
AccRev |
持續開發 |
C/S |
Merge (合並) or lock (加鎖) |
商業 |
支持Java 虛擬機的大多數平台 |
Bazaar |
Canonical |
持續開發 |
分布式 |
Merge |
GPL |
Unix家族, Windows, Mac OS X |
ClearCase |
IBM |
持續開發 |
C/S |
Merge or lock |
商業 |
Linux, Windows, AIX, Solaris, HP UX, I5/OS, OS/390, Z/OS |
CVS |
CVS開發團隊 |
維護 |
C/S |
Merge |
GPL |
UNIX家族, Windows, Mac OS X |
Git |
Junio Hamano |
持續開發 |
分布式 |
Merge |
GPL |
POSIX, Windows, Mac OS X |
Monotone |
Nathaniel Smith, Graydon Hoare |
持續開發 |
分布式 |
Merge |
GPL |
Unix家族, Windows, Mac OS X |
Perforce |
Perforce |
持續開發 |
C/S |
Merge or Lock |
商業 |
Unix家族, Windows, Mac OS X |
Rational Team Concert |
IBM |
持續開發 |
C/S |
Merge or Lock |
商業 |
同ClearCase |
SCM Anywhere |
Dynamsoft |
持續開發 |
C/S |
Merge Or Lock |
商業 |
Unix家族, Windows, Mac OS X |
StarTeam |
Borland |
持續開發 |
C/S |
Merge or Lock |
商業 |
Windows和基於Java的跨平台操作系統 |
Subversion (SVN) |
Apache Software Foundation |
持續開發 |
C/S |
Merge or Lock |
Artistic /GPL |
Unix家族, Windows, Mac OS X |
Team Foundation Server |
Microsoft |
持續開發 |
C/S |
Merge or Lock |
商業 |
Windows |
Visual SourceSafe |
Microsoft |
僅修復嚴重bug |
共享文件夾 |
Merge or Lock |
商業 |
Windows |
注:
幕后推手,目前負責該軟件開發和維護的組織或企業;
狀態,目前項目的開發狀態;
架構,描述版本控制服務器和開發人員客戶端的關系,C/S架構為客戶端/服務器(Client/Server)模式,這種模式下客戶端上的文件僅是服務器的一份副本拷貝,要想與其它客戶端同步,必須先把修改提交到服務器,再有其它要同步的客戶端和服務器進行同步。分布式架構則意味每一個客戶端都可以作為同步源並維護一個本地的版本庫。
並發模式(Concurrency Model),描述如何規避多個客戶端同時修改同一文件並提交導致的沖突。如果是加鎖(lock)模式,則一個文件被鎖住的同時其他人不能簽出,即同一時間同一文件只允許一個簽出,如果是合並(Merge)模式,則交由版本控制系統對來自不同開發人員的多個修改進行合並。
歷史
名稱 |
歷史 |
關鍵用戶 |
AccuRev SCM |
2002年第一版發布 |
福特,閃迪,索尼,Orbitz,美航,Polycom |
Bazaar |
其前身是由Canonical的開發者Rovert Collins開發的Baz。 |
Ubuntu, Launchpad, KatchTV, MySQL, Bugzilla, GNU Emacs |
ClearCase |
1990由Atria主導開發,后被IBM收購,2009年發布7.1.1版本 |
IBM, 阿爾卡特-朗訊, 思科, 摩托羅拉, 西門子,愛立信,諾基亞以及其它大型組織 |
CVS |
1986年發布第一版,其前身是RCS |
廣泛 |
Git |
由Linux Torvalds(Linux之父)發起 |
Linux Kernel, GNOME, Perl 5, X.org, Qt, Cairo, Samba, OpenEmbedded, Ruby on Rails, … |
Monotone |
2003第一版 |
CTWM, Pidgin, Xaraya, I2P |
Perforce |
Perforce公司在1995年由Christopher Serwald創建 |
被廣泛使用 |
Rational Team Concert |
2008年發布第一版 |
IBM |
StarTeam |
1995年第一版,StarBase出品,后被Borland收購,現Borland已被Micro Focus收購 |
Borland, BT, Cintas, EDS, Kaiser Permanente, Met Office, Quest Software, 西門子以及其他國際大型組織 |
Subversion (SVN) |
2000年由一小撮人發起,旨在推出能夠替換CVS得更好的版本控制軟件系統。 |
ASF, SourceForge, FreeBSD, Google Code, KDE, GCC, Ruby, Mono, PuTTY, 以及其他更廣泛的組織。 |
Team Foundation Server |
2006年第一版 |
微軟以及其它大型組織 |
Visual SourceSafe |
第一版由一家叫做One Tree Software的公司開發,后備微軟收購並在1995年推出4.0版本 |
曾經廣泛使用過,但逐漸被淘汰。 |
注:關鍵用戶,采用該版本控制系統的知名組織或企業。
功能與特性比較(一)
名稱 |
原子提交 |
文件重命名 |
符號鏈接 |
事件鈎子 |
版本簽名 |
EOL轉換 |
AccuRev SCM |
支持 |
支持 |
支持 |
支持 |
支持 |
支持 |
Bazaar |
支持 |
支持 |
支持 |
支持 |
部分支持 |
支持 |
ClearCase |
部分支持 |
支持 |
支持 |
支持 |
支持 |
支持 |
CVS |
不支持 |
不支持 |
不支持 |
部分支持 |
不支持 |
支持 |
Git |
支持 |
支持 |
支持 |
支持 |
部分支持 |
支持 |
Monotone |
支持 |
支持 |
不支持 |
支持 |
強制支持 |
支持 |
Perforce |
支持 |
支持 |
支持 |
支持 |
支持 |
支持 |
Rational Team Concert |
支持 |
支持 |
支持 |
支持 |
支持 |
支持 |
StarTeam |
支持 |
支持 |
不支持 |
不支持 |
不支持 |
支持 |
Subversion (SVN) |
支持 |
支持 |
支持 |
支持 |
不支持 |
支持 |
Team Foundation Server |
支持 |
支持 |
支持 |
支持 |
支持 |
支持 |
Visual SourceSafe |
不支持 |
不支持 |
部分支持 |
支持 |
不支持 |
未知 |
注:
原子提交(Atomic Commits),每一次提交都認為是不可分割的,提交失敗則意味全部沒有提交,而不會發生因網絡中斷等異常造成只提交成功了部分的情況。
文件重命名,在重命名文件的同時能夠保持文件版本信息。
符號鏈接(Symbolic links),是否支持符號鏈接文件的版本控制。
事件鈎子(Pre/post event hooks),在事件發生前后是否可以觸發自定義的命令。
版本簽名(Signed revisions),是否支持對版本進行數字簽名。
EOL轉換(End of line conversions),是否支持文本類型能夠根據操作系統不同自適應文件行尾字符。
功能與特性比較(二)
名稱 |
合並重命名文件 |
合並跟蹤 |
標簽 |
國際化版本 |
Unicode文件名 |
大規模代碼庫 |
AccuRev SCM |
支持 |
不支持 |
不支持 |
有 |
未知 |
未知 |
Bazaar |
支持 |
支持 |
支持 |
有 |
支持 |
未知 |
ClearCase |
支持 |
支持 |
支持 |
有 |
未知 |
支持 |
CVS |
不支持 |
支持 |
支持 |
未知 |
不支持 |
未知 |
Git |
支持 |
支持 |
支持 |
部分有 |
支持 |
支持 |
Monotone |
支持 |
支持 |
支持 |
未知 |
支持 |
未知 |
Perforce |
支持 |
支持 |
支持 |
有 |
支持 |
支持 |
Rational Team Concert |
支持 |
支持 |
支持 |
有 |
支持 |
未知 |
StarTeam |
未知 |
支持 |
支持 |
有 |
支持 |
未知 |
Subversion (SVN) |
不支持 |
支持 |
部分支持 |
有 |
未知 |
支持 |
Team Foundation Server |
支持 |
支持 |
支持 |
有 |
支持 |
支持 |
Visual SourceSafe |
未知 |
不支持 |
支持 |
有 |
未知 |
未知 |
注,
合並重命名文件(Merge file renames),是否支持在文件在重命名后還能同步並合並修改,或者與另一個分支上的同名文件進行合並。
合並跟蹤(Merge tracking),是否支持一個分支同步合並另一個分支時,只合並那些被修改的部分,而不是全部更新,這意味着每一個分支版本庫都會維護一個自己版本修改的歷史記錄。
標簽(Tags),是否支持為每一個版本或者提交加上一段描述性文字。
國際化版本,支持多國版本。
Unicode文件名,支持不同字符集下的文件名。
大規模代碼庫(Supports large repos),是否支持超大規模代碼和數據的版本維護。
技術實現比較
名稱 |
編程語言 |
網絡協議 |
版本號格式 |
改動影響范圍 |
儲存模型 |
AccuRev SCM |
C++,Java |
定制化 |
數字 |
未知 |
增量集 (Changeset) |
Bazaar |
Python, Pyrex, C |
Http, FTP, ssh, SFTP, WebDAV(帶插件) Email包 |
偽隨機 |
樹 |
快照 (Snapshot) |
ClearCase |
C,Java,Perl |
Http, CCFS, MVFS |
數字 |
僅文件 |
Changeset |
CVS |
C |
ssh, pserver |
數字 |
僅文件 |
Changeset |
Git |
C, Shell腳本, Perl |
基於tcp和ssh的Git服務器協議, Rsync, Http/https, Email包 |
SHA-1哈希 |
樹 |
Snapshot |
Monotone |
C++ |
Netsync, ssh, 文件系統 |
SHA-1哈希 |
樹 |
混合型 |
Perforce |
C++,C |
定制化 |
數字 |
樹 |
Changeset |
Rational Team Concert |
Java |
基於 Http/https 的REST服務 |
數字 |
樹 |
Changeset |
StarTeam |
C,Java |
定制化, Tcp/ip |
MD5哈希 |
未知 |
Snapshot |
Subversion (SVN) |
C |
定制化, ssh, Http SSL |
數字 |
樹 |
Snapshot 和Changeset |
Team Foundation Server |
C++, C# |
基於Http或 https的 SOAP |
數字 |
未知 |
Changeset |
Visual SourceSafe |
C |
SBM, DCOM |
數字 |
文件 |
Snapshot |
注,
編程語言,版本控制系統開發的語言
網絡協議,文件同步(如在客戶端和服務器之間同步)所使用的網絡協議。
版本號格式,內部用來表示文件版本的格式,數字或者其他類型。
改動影響范圍(Scope of Change),記錄修改的方式是僅僅記錄修改的文件還是整個文件夾。
儲存方式(History model),描述每次提交的變化被儲存的方式,快照(snapshot)方式用來儲存修改前以及修改后兩次針對文件樹的副本。修改增量集(changeset)方式記錄修改前的文件樹的副本以及代表當前修改的集合。
用戶交互方式比較
名稱 |
Web接口 |
獨立的圖形界面 |
IDE插件 |
AccuRev SCM |
支持 |
Windows (集成了資源管理器) Linux, Unix, BeOS |
IntelliJ IDEA, Eclipse, Visual Studio |
Bazaar |
簡單的webserver, 基於webserve, Trac,Launchpad, Loggerhead的插件 |
Olive, bzr-gtk, Bazaar Explorer, QBzrr, TortoiseBzr |
Eclipse, Visual Studio, TextMate, Komodo IDE |
ClearCase |
支持, CC Web借口 |
Windows, Unix家族, z/OS |
Emacs, Eclipse, Visual Studio, KDevelop, IntelliJ IDEA |
CVS |
cvsWeb, ViewVC, codeBeamer, 其它 |
TortoiseCVS, WinCVS, Mac OS X, GTK |
Eclipse, KDevelop, IntelliJ IDEA, Emacs, BBEdit, Komodo IDE |
Git |
gitweb, wit, cgit, GitHub, gitorious, Trac, codeBeamer |
gitk, git-gui (Tcl/Tk), tig, Gitbox (Mac OS X), TortoiseGit, qgit, gitg (GNOME/GTK), (h)gct (Qt), git-cola (Qt), Git Extensions (Windows資源管理器), SmartGit, Tower, SourceTree, Sprout (Mac OS X), GitX (Mac OS X) |
Aptana 3 Beta; Eclipse (JGit/EGit); Netbeans (NbGit); Visual Studio 、 (Git Extensions); Emacs (extension); TextMate (Git TextMate Bundle); Vim (plugin); IntelliJ IDEA >8.1; Komodo IDE; Anjuta |
Monotone |
ViewMTN, TracMonotone |
Monotone-Viz (GTK+), Guitone (Qt), Monotone Browser (GTK+, Perl) |
未知 |
Perforce |
P4Web, P4FTP |
Windows, Linux, Unix, Mac OS X, BeOS available |
Eclipse, Visual Studio (P4SCC), KDevelop (standard?), IntelliJ IDEA, Komodo IDE, BBEdit, Emacs (p4.el) |
Rational Team Concert |
支持 |
基於Eclipse的圖形界面 |
集成Eclipse和Visual Studio |
StarTeam |
包含 |
Windows, Java, Eclipse, Visual Studio, BDS2006, 等 |
IntelliJ IDEA, Visual Studio, JBuilder, Eclipse |
Subversion (SVN) |
Apache 2 模塊, WebSVN, ViewSVN, ViewVC, Trac, SharpForge, sventon, Warehouse, codeBeamer |
Java, KDESVN, Mac OS X[128], Nautilus, Qt, RabbitVCS, RapidSVN, TortoiseSVN (Windows 資源管理器) |
Anjuta, BBEdit, Eclipse, Emacs, IntelliJ IDEA, KDevelop, Komodo IDE, MonoDevelop, Netbeans, RabbitVCS, TextMate, Visual Studio |
Team Foundation Server |
包含 |
Windows, Mac OS, Unix |
Visual Studio, Eclipse IDE, IntelliJ IDEA |
Visual SourceSafe |
SSWI, VSS Remoting |
Windows, Linux, Mac OS, Solaris, 等 |
Visual Studio, IntelliJ IDEA |
注:
Web接口,描述系統是否提供Web接口和管理界面。
獨立的圖形界面,通過圖形界面窗口管理和使用系統,其相對的是命令行方式。
IDE插件,是否能夠集成到開發環境或者作為插件使用,比如Perforce的插件可以集成到Visual Studio中,這樣就可以在Visual Studio中進行源代碼的同步,而不必通過Perforce本身的客戶端軟件進行同步,提高了工作效率。