常用源代码管理软件 |
全称 |
出处 |
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本身的客户端软件进行同步,提高了工作效率。