首页 > 代码库 > [代码管理_版本控制]开放源代码版本控制系统

[代码管理_版本控制]开放源代码版本控制系统

当前主流的源代码版本控制系统有:CVS、 SVN、Git、Bazzar、Mercurial等几类;多数开源软件源代码都是由上述工具管理,典型的 Linux kernel之前通过SVN,现在由Git工具管理,Ubuntu 发行版所有源代码由 Bazzar 管理。Git、Mercurial和Bazzar为下一代分布式版本控制系统,CVS、SVN 为传统的版本控制系统。

由上述版本控制系统为主功能组成的项目托管平台(也可称协同开发平台)包括:google Code ( 支 持 Git, Mercurial 、 SVN )、 Sourceforge(支持 SVN)、Launchpad(支持 Bazzar)、Github(支持Git)、codeplex(支持 SVN)、Taocode(支持SVN)、Matrix(支持SVN)、盛大Teamhost(GIT和Subversion);这些项目托管平台除了提供源代码版本控制之外,还有项目发布,bug 跟踪,邮件列表,Wiki 等项目协同开发所需的主要功能。

详细介绍如下。

二、主流源代码版本控制系统介绍

1.CVS 版本控制系统

CVS是一个C/S系统,一个常用的代码版本控制软件。主要在开源软件管理中使用。因SVN (Subversion)的出现,当前该系统已经停止维护。  

CVS(Concurrent Versions System)版本控制系统是一种 GNU 软件包,主要用于在多人开发环境下的源码的维护。Concurrent 有并发的、协作的、一致的等含义。实际上 CVS 可以维护任意文档的开发和使用,例如共享文件的编辑修改,而不仅仅局限于程序设计。CVS维护的文件类型可以是文本类型也可以是二进制类型。CVS 用Copy-Modify-Merge(拷贝、修改、合并)变化表支持对文件的同时访问和修改。它明确地将源文件的存储和用户的工作空间独立开来,并使其 并行操作。CVS 基于客户端/ 服务器的行为使其可容纳多个用户,构成网络也很方便。这一特性使得 CVS 成为位于不同地点的人同时处理数据文件(特别是程序 的源代码)时的首选。所有重要的免费软件项目都使用 CVS 作为其程序员之间的中心点,以便能够综合各程序员的改进和更改。这些项目包括

GNOME、KDE、THE GIMP和Wine等。

CVS的基本工作思路是这样的:在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。由源代码库管理员统一管理这些源程序。每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后用户可以在本地任意修改,后用 CVS 命令进行提交,由 CVS 源代码库统一管理修改。这样,就好像只有一个人在修改文件一样,既避免了冲突,又可以做到跟踪文件变化等。

2.SVN 版本控制系统

svn(subversion)是近年来崛起的版本管理工具,是 cvs 的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。

早在 2000 年,CollabNet, Inc.就开始召集开发人员开发 CVS 的替代品。CollabNet 提供一套名为SourceCast协同工作套件,其中的一部分组件是版本控制。虽然SourceCast使用 CVS作为其初的版本控制系统,但是CVS的种种限制从一开始就处处可见,后 CollabNet 明白必须要找到一个更好的解决方案。不幸的是,至少在免费 license 中,因为没有更好的选择,CVS已经广泛成为了开源世界中事实上的标准。所以CollabNet决定开发 一个新的版本控制系统,保留CVS的基本特性但去除CVS的 bug和不好的特性。 

在2000年2月,他们联系《使用CVS开发开源项目》(Open Source Development with CVS)(Coriolis, 1999)的作者Karl Fogel,并征求了他是否愿意在这个新的项目中担任一个角色。巧合的是,当时Karl已经和他的朋友Jim Blandy 讨论了一个关于新的版本控制系统的设计。在 1995 年,这两人就成立了 Cyclic Software,一个提供 CVS 的商业支持的软件公司。虽然他们经营商业服务,但是仍然在每天都在工作中使用 CVS。使用 CVS 的挫折感使得 Jim认真思考更好的方法来管理数据,不但确定名 字 为 “Subversion” , 而 且 完 成 了

Subversion档案库的基础设计。  当CollabNet的电话到来时,Karl立即答

应了加入项目中,而且Jim让他的雇主 RedHat Software 同意让他在这个项目中不定期工作。 CollabNet 雇 用 了 Karl 和 Ben Collins-Sussman,并在5月开始了详细设计工作。在得到了来自 CollabNet 的 Brian Behlendorf、Jason Robbins和Greg Stein(当时是一名活跃在 WebDAV/DeltaV 规范过程的自由程序员)很多创意的帮助下,Subversion 很快地引起了一个活跃开发者社区 的注意。它找出并欢迎很多同样在 CVS 上受到挫折的社员能来为这个项目做点什么。 

Subversion 初的设计 Team 定下了几个简单的目标。 它必须在功能上可取代 CVS,也就是说, 所有 CVS 可做到的事, 它都要能够作到。 在修正明显的瑕疵的同时, 还要保留相同的开发模式。 还有, Subversion 应该要和 CVS 很相像, 任何 CVS 使用者只要花费少许的力气, 就可以很快地上手。 

经过十四个月的编码后, Subversion 于 2001年8月31日开始实现 “自行管理”。 也就是说, 开发人员不再使用 CVS 来管理 Subversion 的代码, 而以 Subversion 自己来管理。

Subversion 优于 CVS 之处

n   统一的版本号。CVS是对每个文件顺序编排版本号,在某一时间各文件的版本号各不相同。而Subversion下,任何一次提交都会对所 有文件增 加到同一个新版本号,即使是提交并不涉及的文件。所以,各文件在某任意时间的版本号是相同的。版本号相同的文件构成软件的一个版本。

n   原子提交。一次提交不管是单个还是多个文件,都是作为一个整体提交的。在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏。

n   重命名、复制、删除文件等动作都保存在版本历史记录当中。

n   对于二进制文件,使用了节省空间的保存方法。(简单的理解,就是只保存和上一版本不同之处)

n   目录也有版本历史。整个目录树可以被移动或者复制,操作很简单,而且能够保留全部版本记录。

n   分支的开销非常小。

n   优化过的数据库访问,使得一些操作不必访问数据库就可以做到。这样减少了很多不必要的和数据库主机之间的网络流量。

n   支持元数据(Metadata)管理。每个目录或文件都可以定义属性(Property),它是一些隐藏的键值对,用户可以自定义属性内容,而且属性和文件内容一样在版本控制范围内。

Subversion 不足

n   只能设置目录的访问权限,无法设置单个文件的访问权限。

Subversion 使用情况

虽然在2006年Subversion的使用族群仍然远少于传统的CVS,但已经有许多开放原码团体决定将CVS转换为Subversion。已经转换使用 Subversion 的包括了 FreeBSD、Apache Software Foundation、KDE、GNOME、GCC、Python、 Samba、Mono以及许多团体。许多开发团队换用 Subversion 是因为 Trac、SourceForge、 CollabNet、CodeBeamer等专案协同作业软体以及Eclipse、NetBeans等IDE提供Subversion 的支援整合。除此之外,一些自由软体开发的协作网如SourceForge.net除了提供CVS外,现在也提供专案开发者使用Subversion作为源代码管理系统,JavaForge、Google Code 以及 BountySource 则以 Subversion 作为官方的源代码管理系统。

2009年,绝大多数CVS服务已经改用SVN。此时CVS早已经停止维护。不过CVS也有了合适的替代品。

3.Git 版本控制系统

Git 是一个由 Linuxkernel 创始人林纳斯·托瓦兹为了更好地管理 linux 内核开发而创立的分布式版本控制/软件配置管理软件。

Git 初的开发动力来自于 BitKeeper 和 Monotone。 Git 初只是作为一个可以被其他前端比如 Cogito 或 StGIT 包装的后端而开发的。不过,后来 Git 内核已经成熟到可以独立地用作版本控制。很多有名的软件都使用 Git 来进行版本控制, 其中有 Linux 内核,X.Org 服务器和OLPC (OLPC) 内核开发。

主要功能

Git --- The stupid content tracker, 傻瓜内容跟踪器。Linus 是这样给我们介绍 Git 的。Git 是用于 Linux 内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 为出色的是它的合并跟踪(merge tracing)能力。

实际上内核开发团队决定开始开发和使用 Git 来作为内核开发的版本控制系统的时候,世界开源社群的反对声音不少,大的理由是 Git 太艰涩难懂,从 Git 的内部工作机制来说,的确是这样。但是随着开发的深入,Git 的正常使用都由一些友好的脚本命令来执行,使 Git 变得非常好用,即使是用来管理我们自己的开发项目,Git 都是一个友好,有力的工具。现在,越来越多的著名项目采用 Git 来管理项目开发,例如:wine, U-boot 等,详情看 http://www.kernel.org/git 作为开源自由原教旨主义项目,Git 没有对版本库的浏览和修改做任何的权限限制,通过其他工具也可以达到有限的权限控制,比如:gitosis。原本 Git 的使用范围只适用于 Linux / Unix 平台,但逐步并成熟了在 Windows 平台下的使用,主要归功于Cygwin与msysgit环境与TortoiseGit 这样易用的 GUI 工具。其实 Git 的源代码中已经加入了对 Cygwin 与 MingGW 编译环境的支持并被逐步完善,对于 Windows 使用者是个福音。

4.Bazzar 版本控制系统

(http://wiki.bazaar.canonical.com/)

Bazaar-NG 是个分散式版本(revision)控制系统。版本控制需要跟踪/保存软件源代码或类似信息的修订历史,帮助人们一起协力工作。Bazaar-NG 由 Canonical Limited 资助,它同时也是 Ubuntu 和 Launchpad 的缔造者。 Bazaar-NG 是个自由软件,遵照 GNU GPL 许可证发布。Bazaar-NG 采用 Python 语言编写,设 计 目 标 是 高 效 、 简 单 和 一 致 性

(familiarity),便于开发人员从 CVS 或

Subversion 迁移过来。 

bzr 自2005年3月以来就用自己进行版本控制(self-hosting),现在已足够成熟,完全能够对付诸如 Launchpad.net 的大型项目。 bzr 有一整套的 插件 ,各种各样不断涌现的第三方工具 也都在火热开发中。自那时起,大量项目 都发现了 Bazaar 的优势,并开始采用

Bazaar-NG。 

5.Mercurial 版本控制系统

Mercurial 是一个跨平台的分布式版本控制软件。Mercurial主要由Python语言实现,不过也包含一个用 C 实现的二进制比较工具。

Mercurial一开始的主要运行平台是Linux。现在Mercurial已经被移植到Windows、Mac OS X 和大多数类Unix系统中。Mercurial主要由一个命令行程序组成,但现在也有了图形用户界面。对 Mercurial 的所有操作都由用不同的关键字作为参数调用程序hg来实现,Hg是参考水银的化学符号而取的名字。

Mercurial的主要设计目标包括高性能、可扩展性、分散性、完全分布式合作开发、能同时高效地处理纯文本和二进制文件,以及分支和合并功能,以此同时保持系统的简洁。

Mercurial也包括一个集成的Web界面。

Mercurial 的创建者和主要开发人员是 Matt Mackal。其源代码采用GNU通用公共许可证第二版为授权,确保了 Mercurial 是一个自由软件。

Mackall 在2005年4月19日第一次发布了Mercurial。其动机是当月早期Bitmover公司宣布撤销其免费版本的 BitKeeper。 BitKeeper 已经被用于 Linux 内核的项目版本控制。Mackall 决定为 Linux 内核开发写一个分布式的版本控制软件来替代BitKeeper。在该项目启动数天前,Linus Torvalds 基于类似的目的开始了另一个版本控制软件Git。Linux内核开发项目决定使用Git而不是Mercurial,但

Mercurial也使用于在很多其他的项目中。

三、使用版本控制系统的主流项目托管平台(协同开发平台)

1.Google Code(http://code.google.com/)

 

目前该平台上共有250,000个项目。

Google Code(Google代码)是Google公司利用自身服务器资源提供的开发人员主页。其初目的是为Google自身的开源软件提供开发平台,以及协 助开发者扩展 Google 产品的功能。随着 Google 开源之夏等项目的推进, Google Code 正在成为一个开放的项目托管平台,类似 Sourceforge 提供版本控制、问题跟踪、Wiki、下载托管等工具。

2.Sourceforge(http://sourceforge.net/)
 

目前该平台上共有327,614个项目。

SourceForge 是一套合作式软件开发管理系统。SourceForge本身是VA Software出售的专有软件。它集成了很多开源应用程序(例如

PostgreSQL 和 SVN、CVS),为软件开发提供了整套生命周期服务。

SourceForge.net,又称SF.net,是开源软件的开发者进行开发管理的集中式场所,也是全球大开源软件开发平台和仓库。

SourceForge.net由VA Software提供主机,并运行 SourceForge 软件。大量开源项目在此落户(2005 年 6 月已经达到 125,090 个专案及 1,352,225 位注册用户),包括维基百科使用的 MediaWiki,但也包含很多停止开发和一人开发的项目。

SourceForge 软件授权

SourceForge 网站程序的源代码曾经也是开放的,但是后来 VA Software 决定不再继续发布开源版本。它可能是从2001年起变为专有软件继续开发的。在封闭前后的正式的开源版本是2.5,而后的CVS版本 是 2.61。目前存在一系列利用 SourceForge 软件运行的协作式网站。

2003 年 VA Software 首 次 发 布 了

SourceForge Enterprise Edition 4.x,将其做为 Java-J2EE 程序完全重写。由采用

SourceForge 4.x 的组织报告说其性能和伸缩性相对SourceForge 3.x或者更早的2.x明显改善。SourceForge 4.x为将来的集成和扩展而支持SOAP、XML、Web Services等API。

SourceForge 的竞争者

从 SourceForge 开源版本基础上还出现了开源替代物Gforge.org等。它是SourceForge 的一个程序员在SourceForge后的CVS版本基础上的重写,增加了很多新特性并继续保持自由。

自由软件基金会建立了Savannah网站做为对SourceForge成为专有软件的回应,Savannah 是基于2.0版SourceForge软件。

Google公司推出的Google Code服务由于 Google 和众多新兴开源项目的大力支持正在成为 SourceForge.net 在全球范围内重要的竞争对手。至2009年3月,已有超过50,000个开源项目落户Google Code。

SourceForge 的其他竞争者还包括了

Bounty Source、Tigris.org(由CollabNet所建立)、JavaForge(由JavaLobby采CodeBeamer 建立)及berlios.de。

中国的网络封锁

SourceForge.net由于服务器设置台湾,故容易被封锁。

SourceForge.net网站在2002年时曾经被中国封锁过,而在 2003 年时解封,但是直到

2005年初vhost.sourceforge.net网址仍然处于被中国封锁的状态。

2006 年 2 月 有 使 用 者 回 报

SourceForge.net 网站又被中国再度区域性的封锁,然而对中国使用者的影响似乎并不很大。

2008 年 6 月因 Notepad++ 在主页上发起

“抵制奥运”为抗议中国政府在西藏的镇压行动,又有使用者回报 SourceForge.net 被中国封锁。至2008年6月25日封锁解除。 3.Launchpad(https://launchpad.net/)
 

目前管理着25,812项目。

Launchpad(发射台)是Canonical有限公司所架设的网站,是一个提供维护、支持或连络Ubuntu开发者的平台。其中Launchpad提供了联机翻译软件的功能,你可以自由的参与 Ubuntu 或相关自由软件的开发或翻译工作。而你也可以利用该网站的回报机制来回报相关软件的Bug,或者进一步提供建议。

4Github(https://github.com/)
 

该平台由1,204,21人, 管理着3,532,242 项目 

GitHub 是一个用于使用Git版本控制系统的项目的基于互联网的存取服务。它是由 GitHub公司(先前被称作用Logical Awesome)的开发者Chris Wanstrath, PJ Hyett, 和 Tom Preston-Werner 使用Ruby on Rails写成的。 GitHub 同时提供商业账户和为开源项目提供的免费账户。根据在 2009 年的 Git 用户调查,

GitHub是流行的Git存取站点。

它提供了像 feeds,followers 和显示开发者们怎样在他们的版本库的版本上工作的网络图表。GitHub也经营了一个pastebin风格的站点,维基用于个人信息库,并且可以通过一个git版本库进行编辑网页。截至2010年1月,

GitHub仍然由GitHub公司所经营.

GitHub于2008年2月运行。 在2009年2 月 24 日通过 Yahoo!进 行的一次采访中, GitHub 队伍成员们宣布在 GitHub 运行的第一年,有共计 46,000 个公共版本库,它们中有 17,000个是于近一个月内创建 的。当时,大概有6,200个版本库被派生(fork)至少一次,有4,600被合并。在另一个在2009年6月27 日通过Yahoo!的采访中,Tom Preston-Werner 宣布版本库数量已经提升到了90,000唯一性公共版本库,有12,000个版本库被派生(fork)至少一次,总共有135,000个版本库。  在2010 年6月,GitHub宣布它现在已经提供可1百万项目,它们中的60%是完整的版本库,但仍然有


5.Codeplex(http://www.codeplex.com/)


 

目前该平台由26220个项目。

CodePlex 是一个由微软所建的 Open Source 网站,在此网站中所发布的所有程序都可以下载源代码使用,目前它已经成为微软软件的周边组件或扩展的发布管道。


 

CodePlex 开放源码基金会于2009年9月 10日宣布成立,微软拿出100万美元作为该基金会的初始资金。微软设立CodePlex基金会的目的是,加强同开源 社区的代码交换以及沟通理解程度。此前微软平台战略部门已设有

CodePlex项目,CodePlex基金会就是该项目的延伸。该基金会今后将设立一个论 坛,并邀请开源社区和其他软件开发商参与讨论交流,以共同搜索出行之有效的开源软件发行模式。今后凡属于CodePlex名下的知识产权,都将以开源许可证形式对外发布。主要用来让软件业者及开源团体分享源代码,并促进双方的交流。

根据声明,该基金会主要采用论坛形式,让开放源始码社区及软件开发社区一起促进参与 开源团体项目的共同目标。在既有的开放源码组织之外,让各界通过此一论坛分享彼此的认知及佳实现。

ColePlex 活跃的技术工程包括:C#,

Sharepoint, ASP.NET, .NET, WPF, Ajax, .NET

2.0, Silverlight, DotNetNuke, XNA,

TFS, .NET 3.5, Framework, LINQ, SQL Server, Tools, patterns & practices, Library, game, MOSS, CMS, DNN, powershell, MVC, Visual Studio, wcf, Database, SharePoint 2007, xml, orm, SQL, Controls, winforms, blog, utility, VB.NET, Enterprise Library, watch. 6.Taocode(http:// code.taobao.org)(国内协同开发平台)


 

中文名为淘蝌蚪,目前有200多个项目。

由淘宝建设的开源软件托管平台,淘蝌蚪默认使用SVN管理代码,有trac可以跟踪 bug 和项目进度。现在的项目分类为:system, Storage ,utils,development 四个分类。每个项目下有相关的Wiki。"

7.Matrix(http://matrix.oss.org.cn);(国内协同开发平台)


 

目前注册项目约270多个。

Matrix 平台为开放源代码软件开发者提供全面的社区开发服务,包括Subversion代码仓库、邮件列表、BUG跟踪、在线讨论区、任务管理、网站空间、项目存储及完整的备份,并且完全通过 WEB 方式进行管理。目前是中国开源软件推进联盟(COPU)和工业和信息化部软件与集成电路促进中心(CSIP)共同主办的开源中国社区功能的一部分,由COPU和CSIP开源团队维护。

8.盛大 Teamhost(http://www.teamhost.org)

目前有约40个项目。

Teamhost.org 是为那些致力于开源项目的开发者服务的,一个公开的免费开源服务平台,提供类似于 Google Code 和 Github 的开源项目托管服务,而这只是Teamhost第一阶段要做的事情,这一阶段除了几个功能点还在开发外,大致上已经完成,已于2011年10月31 日正式开启内测! 而下一阶段是将围绕社会化 (SNS)为核心建立更加敏捷的互动平台服务。

四、总结

源代码版本控制系统也不止本文中描述的那几种,还有如BitKeeper、Micorosoft Visual SourceSafe、Perforce、Rational ClearCase、 RCS(GNU Revision Control System)、Serena

Dimention、SVK、Monotone 、SourceGear Vault。

项目托管管理平台(协同开发平台)也不止上述主流的几种,在开源中国社区收录了大量的开源软件,您会发现,其中绝大多数托管在 sf.net、GitHub、code.google.com 等站点上。其实不错的开源托管站点还真的是不少。笔者为您总结了如下国外知名的开源项目托管网站。

托管站点 Top20 如下:

  1. SourceForge

SF 为大家所熟知,开源项目的大本营,SF 托管至少30万个开源项目,一天的下载量超过

200万。

  1. GitHub

GitHub托管使用Git版本控制系统的公开和私有项目。 目前该网站托管超过120万项目,包括许多开源软件。

  1. Google Code

Google 提供免费的使用 Git、Subversion 或是 Mercurial 版本控制系统的开源项目托管服务。 它提供 2G 的存储空间,整合了代码查看工具、wiki、问题跟踪。Google Code站点也提供了大量的Googe自己的APIs和其他开发工具。

  1. Eclipse Labs

同样由Google Code托管, Eclipse Labs 是建立在Ecipse平台上的开源项目存储。提示,这些并不是官方的Eclipse基金会项目。

  1. BitBucket

类似GitHub, BitBucket托管公开和私有项目。在这个站点上,开源项目和私有项目的用户少于5人,则免费。它托管了超过4.8万个项目,多数可在站点上搜索。

  1. LaunchPad

由 Ubuntu 的东家 Canonical 维护, LaunchPad目标是运行在Ubuntu上的项目。它托管超过2.1万个使用Bazaar版本控制系统的项目。

  1. Codehaus

Codehaus 定义自己为“开源软件的协作开发环境”。托管需要审查,是否符合站点的声明。

  1. RubyForge

从名字您就可猜出,它托管Ruby程序语言

开发的开源项目,目前托管项目超过9000个。

  1. Tigris

Tigris 具有很强的专注性,仅限于“为协作软件开发创建更好的工具”。它目前包括700 个项目。

  1. BerliOS Developer

BerliOS Developer 为各种类型的开源项目提供免费的托管服务,并且支持的语言众多。目前它托管的项目超过4600个。

  1. Savannah—GNU

Savannah定义自己为“官方GNU软件的开发、维护、发行的中心”。它托管 410 个官方

GNU项目。

  1. Savannah—non-GNU

         与    Savannah-GNU         相 对 应 ,

Savannah-non-GNU 托管其他类型的开源项目,总是超过2800个。

  1. Gna!

如果你访问过 Savannah 项目,Gna!会非常类似,因为它使用同样的软件,并同样关注 GNU相关的项目。目前它托管1350个项目。

  1. CodePlex 由微软托管,Codepex提供微软开发的开源软件和一些社区项目。它提供下载的项目超过2 万。
  2. Java.net

早由Sun公司创立,Java.net托管和链接大量的Java相关的项目。另外,它也包括许多的博客、论坛和其他Java社区资源。

  1. Gitorious

Gitorious 提供使用 Git 版本控制系统的开源项目免费的托管服务。它托管了一些著名的软件,包括OpenSUSE、Qt相关项目。

  1. TuxFamily

TuxFamily为开源软件提供免费托管服务,

托管数量超过2300。提示,这是一个法语组织。

 

 

  1. KnowlegeForge

KnowlegeForge 规模较小,托管 250 个项目。它由Open Knowledge基金会支持,使用多种版本控制系统。

  1. OSOR

OSOR是欧盟站点,目前托管200个开源项目,链接项目超过2500个。该站点包含自由和开源软件的相关搜索和新闻。

  1. OW2

OW2(the ObjectWeb Forge)提供基础软件相关的开源项目托管服务,目前托管 188 个项目。

[代码管理_版本控制]开放源代码版本控制系统