自由版本控制系统 这些是在2007年中段我所知的所有开源版本控制系统。我日常唯一使用的是Subversion。除了Subversion和CVS,我对大多数系统仅有很少,甚至没有任何经验;这里的信息取自他们的网站。也请看 <emphasis role="bold">CVS</emphasis> — <ulink url="http://www.nongnu.org/cvs/"/> CVS已经有很长的历史了,许多程序员已经非常熟悉。它曾经是革命性的:它是第一个开源版本控制系统,在网络上被开发者广泛使用(在我所知的范围内),也是第一个提供匿名只读检出的系统,可以让心开发者轻松的开始参与项目。CVS只能版本化文件,但不包括目录;它能提供分支、标签和优良的客户端性能,但不能很好的处理大文件和二进制文件。它也不支持原子提交。[免责声明:在开始替代CVS的Subversion项目前,我也在CVS开发上活跃了大约5年。] <emphasis role="bold">Subversion</emphasis> — <ulink url="http://subversion.tigris.org/"/> Subversion是最早也是最重要的CVS替代者—也就是以与CVS近似的方法实现版本控制,但没有经常困扰CVS用户的一些问题和特性缺失。Subversion的一个目标就是使已经习惯CVS的用户能够平滑的过渡到Subversion。这里没有空间详细描述Subversion的特性;相关信息请看它的网站[免责声明:我参与了Subversion开发,也是在日常中唯一使用的系统。] <emphasis role="bold">SVK</emphasis> — <ulink url="http://svk.elixus.org/"/> 尽管SVK建立在Subversion之上,但它更类似于下面说的一些非集中式的系统,而不是Subversion。SVK支持分布式开发、本地提交、精密的变更合并和从非SVK版本控制系统镜像目录树的能力。详细信息可以看它的网站。 <emphasis role="bold">Mercurial</emphasis> — <ulink url="http://www.selenic.com/mercurial/"/> Mercurial是一个分布式版本控制系统,提供“完整的文件和变更集的跨索引;有效率的带宽和CPU下的HTTP和SSH同步协议;开发者分支间的任意合并;集成独立的web界面;UNIX、MacOS X和Windows跨平台能力”以及更多(前面的特性列表来自Mercurial网站)。 <emphasis role="bold">GIT</emphasis> — <ulink url="http://git.or.cz/"/> GIT是Linus Torvalds开启的一个用于管理Linux kernel源代码的项目。一开始GIT仅仅限于满足kernel开发的需要,但不久就超出了这个范围,被用于Linux kernel之外的项目中。它的主页上说“...设计用于快速有效的处理非常大的项目;主要用于各种开源项目,最引人注目的是Linux kernel。 Git属于分布式源代码管理工具,类似于GNU Arch或Monotone(或私有世界的BitKeeper)。每个Git工作目录是一个完整的版本库,包含了完整的修订跟踪能力,不依赖于网络访问或中央服务器。” <emphasis role="bold">Bazaar</emphasis> — <ulink url="http://bazaar.canonical.com/"/> Bazaar还处于开发中。它是GNU Arch协议的一个实现,并依然随着演进的GNU Arch协议保持兼容,而且与GNU Arch社区中对于需要用户友好的任何协议变更的进程进行配合,。 <emphasis role="bold">Bazaar-NG</emphasis> — <ulink url="http://bazaar-ng.org/"/> Bazaar-NG(或bzr)目前由Canonical()开发。它提供了一种在单个项目中结合集中式和非集中式工作的选择。例如,当在办公室中,你可以在一个共享的中央分支上工作;对于实验性变更或离线工作,你可以在笔记本上建立一个分支,并在之后合并回去。 <emphasis role="bold">Darcs</emphasis> — <ulink url="http://abridgegame.org/darcs/"/> “David的高级修订控制系统(Advanced Revision Control System)是另一个CVS的替代者。它由Haskell编写,已经用于Linux、MacOS X、FreeBSD、OpenBSD和Microsoft Windows。Darcs包含一个可以查看版本库内容的cgi脚本。” <emphasis role="bold">Arch</emphasis> — <ulink url="http://www.gnu.org/software/gnu-arch/"/> GNU Arch同时支持分布式和集中式的开发。开发者将变更提交到一个可以是位于本地的”归档(archive)“,而管理员可以根据情况将变更推和拉到其他归档。这个方法学暗示了Arch提供比CVS更精密的合并。Arch也允许一个人轻松的为没有提交权限的人建立归档的分支。这里只是简短的描述;更多细节请看Arch网页。 <emphasis role="bold">monotone</emphasis> — <ulink url="http://www.venge.net/monotone/"/> ”monotone是自由分布式版本控制工具。它提供了一个简单,单个文件事务的版本存储,包含完全无连接的操作,以及有效率的端到端同步协议。它理解历史敏感的合并,轻量级的分支、集成代码评审和第三方测试。它使用加密的命名和客户端的RSA凭证。它也有不错的国际化支持,没有外部依赖,可以按照GNU GPL运行在linux、solaris、OSX和windows上。“ <emphasis role="bold">Codeville</emphasis> — <ulink url="http://codeville.org/"/> ”为什么需要另一种版本控制系统?所有其他版本控制系统需要你小心跟踪分支间的关系,这样你才能不会重复合并同一个冲突。Codeville更加自由。它允许你随时更新或提交到任意版本库,而无需担心重复合并。“ ”Codeville为每个完成的变更创建一个标识符,并记住每个文件已经已经应用的变更列表。如果有冲突,它会检查某一方是否已经应用到另一方,如果是这样,则使另一方自动获胜。如果确实有非自动的可合并的版本冲突,codeville则与CVS的工作方式相同。“ <emphasis role="bold">Vesta</emphasis> — <ulink url="http://www.vestasys.org/"/> ”Vesta是一个可移植的SCM[软件配置管理]系统,旨在支持任意规模的,从相对较小(小于10000行源代码)到非常巨大(10000000行)的软件系统的开发。“ ”Vesta是一个成熟的系统。它是Compaq/Digital系统研究中心10年研究和开发的成果,它是Compaq的Alpha微处理器团队两年半的时间里生产使用的系统。Alpha团队有超过150个活跃开发者位于距离几千英里的两地,分别在美国的西海岸和东海岸。该团队使用Vesta管理编译超过130MB的源数据,会产生1.5GB的衍生数据。东部的构建每天会产生10到15GB的衍生数据,全部由Vesta管理。尽管Vesta主要关注的是软件开发,但Vesta Alpha团队设法使系统可以用于硬件开发,将它们的硬件描述语言检入到Vesta的源代码控制用具中,并使用Vesta构建器构建模拟器和其他衍生的对象。前Alpha团队的成员,现在是Intel的一部分,在新的微处理器项目中还是继续使用Vesta。“ <emphasis role="bold">Aegis</emphasis> — <ulink url="http://aegis.sourceforge.net/"/> ”Aegis是一个基于事务的软件配置管理系统。它提供了一个框架,在其中一个团队的开发者可以独立的为程序的多个变更工作,而Aegis协调将这些变更集成到程序的主源中,并尽可能减少中断。“ <emphasis role="bold">CVSNT</emphasis> — <ulink url="http://cvsnt.org/"/> ”CVSNT一个高级跨平台的版本控制系统。与行业的标准CVS协议相比,添加了许多附加特性。 ... CVSNT是开源,使用GNU GPL许可证的自由软件。“它的特性列表包括通过CVS协议的认证,以及Windows特定的SSPI和活动目录。支持安全传输,通过sserver或加密的SSPI;跨平台性(可以运行于Windows或Unix环境);NT版本与Win32系统完全集成;MergePoint处理的含义是没有更多的标签和合并;处于活跃开发中。 <emphasis role="bold">META-CVS</emphasis> — <ulink url="http://users.footprints.net/~kaz/mcvs.html"/> ”Meta-CVS是一个建立在CVS周边的版本控制系统。尽管它保留了CVS的大多数特征,包括所有的网络支持,它比CVS能干,更易于使用。“META-CVS的站点包括的特性列表:目录结构版本化,改进的文件类型处理,类似和更用户友好的分支和合并,支持符号链接,附加属性列表的版本化数据,改进的第三方数据导入,以及易于从CVS升级。 <emphasis role="bold">OpenCM</emphasis> — <ulink url="http://www.opencm.org/"/> ”OpenCM设计为一个安全的,CVS的高完整性替代产品。关键特性列表可以在特性页面找到。虽然不像CVS那样‘特性丰富’,但它提供了一些CVS缺乏的特性。简要来说,OpenCM提供了第一流的重命名、配置、加密认证和访问控制和第一流的分支。“ <emphasis role="bold">Stellation</emphasis> — <ulink url="http://www.eclipse.org/stellation/"/> ”Stellation是一个高级,可扩展的软件配置管理系统,最初由IBM研究院开发。虽然Stellation提供了任何SCM系统提供的所有标准功能,但它也提供了许多高级特性,例如面向任务的变更管理,一致的项目版权化和轻量级的分支,目的是简化由松散结合的开发者组成的大规模团队开发软件系统的难度。“ <emphasis role="bold">PRCS</emphasis> — <ulink url="http://prcs.sourceforge.net/"/> ”PRCS,项目修订控制系统是一系列工具(如CVS)的前端,提供了一种以一个整体管理一组文件和目录的方法,保存了整个集合的一致版本。 ... 它的目的类似于SCCS、RCS和CVS,但是(至少根据其作者称)与这些工具相比更加简单。“ <emphasis role="bold">ArX</emphasis> — <ulink url="http://www.nongnu.org/arx/"/> ArX是一个分布式修订控制系统,提供了分支和合并特征,加密数据完整性验证和将归档轻松发布到任意HTTP服务器的能力。 <emphasis role="bold">SourceJammer</emphasis> — <ulink url="http://sourcejammer.org/"/> ”SourceJammer是一个使用Java编写的源代码控制和版本化系统。它由服务器端维护文件和版本历史,处理检入、检出等功能的组件,以及客户端向服务器发起请求并管理客户端文件系统的组件组成。 “ <emphasis role="bold">FastCST</emphasis> — <ulink url="http://www.zedshaw.com/projects/fastcst/index.html"/> ”一个使用文件修订变更集,并且分布式而非集中控制的‘现代’系统。只要你有一个邮件帐号,你就可以使用FastCST。对于较大的分发,只需要一个FTP服务器和一个HTTP服务器,或使用内置的‘serve’命令来直接提供服务。所有的变更集都是全局唯一,并且有大量元数据,这样你可以拒绝任何未经测试的东西。合并是通过比较合并的变更集和当前的目录内容完成的,而不是试图将其与另一个变更集合并。“ <emphasis role="bold">Superversion</emphasis> — <ulink url="http://www.superversion.org/"/> ”Superversion是一个基于变更集的多用户分布式版本控制系统。它的目标是成为一个行业力量,商业解决方案的开源选择,提供相同(或更简单)的易用性和类似的强大。实际上,从一开始,直觉和可用的效率就处于Superversion开发的最高优先级之一。 “