版本控制是管理数据变更的一种技术。对于程序员来说,它已经成为不可或缺的工具,因为他们经常修改软件代码,产生部分的变更,然后第二天再取消所有的变更。想象有一群程序员同时工作的情况你就能理解,为什么需要一个良好的系统来管理可能出现的混乱。
什么是 Subversion?
Subversion 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。 许多人会把版本控制系統想像成某种 “时光机器”。
某些版本控制系統也是 SCM(software configuration management) 系统。 这些系統是特別设计来管理大量代码的, 而且具有许多专门针对软件开发的功能,像通俗易懂的程序语言, 或是提供编译软件的工作。 不过 Subversion 并不是这样的系统; 它是一个通用的系统, 可用来管理任何类型的文件, 其中包括了程序源码。
Subversion 的历史
早在2000年,CollabNet, Inc.(http://www.collab.net)就开始召集开发人员开发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 自己来管理。
从启动这个项目到现在,虽然CollabNet提供了大部分的资金(它付出几位全职 Subversion 开发人员的薪水), 但这还是个开源项目, 由一组松散透明的规则所约定。 CollabNet 拥有代码的版权完全符合 Debian Free Software Guidelines。 换句话说, 每个人都可以随意地免费下载、修改、以及重新发布 Subversion; 完全不需要经过 CollabNet, 或是任何人的允许。
Subversion提供以下主要功能:
目录版本控制
CVS 只能跟踪单个文件的历史, 不过 Subversion 实作了一个 “虚拟” 的版本控管文件系统, 能够依时间跟踪整个目录的变动。 目录和文件都能进行版本控制。
真实的版本历史
自从CVS限制了文件的版本记录,CVS并不支持那些可能发生在文件上,但会影响所在目录内容的操作,如同复制和重命名。除此之外,在CVS里你不能用拥有同样名字但是没有继承老版本历史或者根本没有关系的文件替换一个已经纳入系统的文件。在Subversion中,你可以增加(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始。
自动提交
一个提交动作,不是全部更新到了档案库中,就是完全不更新。这允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。
纳入版本控管的元数据
每一个文件与目录都附有一組属性关键字并和属性值相关联。你可以创建, 并儲存任何你想要的Key/Value对。 属性是随着时间来作版本控管的, 就像文件內容一样。
选择不同的网络层
Subversion 有抽象的档案库存取概念, 可以让人很容易地实作新的网络机制。 Subversion 可以作为一个扩展模块嵌入到Apache HTTP 服务器中。这个为Subversion提供了非常先进的稳定性和协同工作能力,除此之外还提供了许多重要功能: 举例来说, 有身份认证, 授权, 在线压缩, 以及文件库浏览等等。还有一个轻量级的独立Subversion服务器, 使用的是自定义的通信协议, 可以很容易地通过 ssh 以 tunnel 方式使用。
一致的数据处理方式
Subversion 使用二进制差异算法来异表示文件的差异, 它对文字(人类可理解的)与二进制文件(人类无法理解的) 两类的文件都一视同仁。 这两类的文件都同样地以压缩形式储存在档案库中, 而且文件差异是以两个方向在网络上传输的。
有效的分支(branch)与标签(tag)
在分支与标签上的消耗并不必一定要与项目大小成正比。 Subversion 建立分支与标签的方法, 就只是复制该项目, 使用的方法就类似于硬连接(hard-link)。 所以这些操作只会花费很小, 而且是固定的时间。
Hackability
Subversion没有任何的历史包袱; 它主要是一群共用的 C 程序库, 具有定义完善的API。这使得 Subversion 便于维护, 并且可被其它应用程序与程序语言使用。
分享到:
相关推荐
配置管理工具SVN介绍及使用
这份“svn介绍和安装处理PPT”将深入探讨SVN的基本概念、工作原理以及安装过程。 首先,让我们了解一下SVN的基本概念。SVN的核心是版本库,它存储了所有文件的历史版本。每个文件都有一个唯一的标识符,称为修订...
【SVN介绍与日常使用详解】 SVN,全称Subversion,是一款开源的版本控制系统,设计初衷是为了弥补CVS( Concurrent Version System)的不足。与传统的版本控制系统如VSS(Visual SourceSafe)采用的锁定-修改-解锁...
### SVN介绍及使用安装详解 #### 一、SVN简介 **SVN**(Subversion)是一种广泛使用的版本控制系统,主要用于管理软件项目的多个版本。当多个开发者需要协作开发同一个项目时,SVN提供了一种有效的方式来追踪每一次...
**svn 介绍** **为什么我们需要源代码管理** 源代码管理对于任何软件开发团队都是至关重要的。它解决了多人协作开发中的诸多挑战,确保代码的稳定性和可维护性。以下是几个主要理由: 1. **代码回归**:通过源...
SVN,全称为Subversion,是一款广泛应用于软件开发领域的版本控制系统。它允许团队成员协同工作,跟踪文件和目录的变化,并管理项目的多个版本。本压缩包提供了丰富的 SVN 学习资源,包括安装教程、文档和视频,旨在...
对于SVN版本管理进行相应介绍,对常用svn命令进行简介,对版本库进行介绍并具有实操性
【SVN使用介绍】 SVN,全称Subversion,是一个开源的版本控制系统,用于管理和跟踪文件及目录在不同时间的更改。它允许多人协同工作,同时保持代码的历史记录,便于团队成员之间的协作和代码管理。在软件开发过程中...
该文档主要介绍了Visual Studio 2022下的软件配置管理工具的配置和使用方法,涵盖了Visual SVN、TortoiseSVN和AnkhSvn三个工具的安装、配置和使用方法。 ### 1. SVN 和 VI SUAL SVN 介绍 SVN(Subversion)是一种...
三、AnkhSVN介绍 AnkhSVN是专为Visual Studio设计的免费SVN客户端插件,它完全集成在VS的菜单和工具栏中,提供了与VS原生功能相似的用户体验。AnkhSVN支持多种VS版本,包括Visual Studio 2010到Visual Studio 2019,...
详细讲解svn,默认情况下,在下载远程代码时,SVN不会新建当前选定的远程文件夹,例如对应上面的图片中,SVN是不会新建cgi_oss目录的,代码下载时,直接在sourcecode下列出cgi_oss目录下的子目录及文件,而不包含cgi...
1. **AnkhSvn介绍**:AnkhSvn是一个开源项目,由志愿者开发者维护和更新。它为Visual Studio提供了对Subversion版本控制系统的支持,使开发者可以在熟悉的IDE内进行版本控制操作,如提交、更新、合并、冲突解决等。 ...
五、svn 介绍 svn 是一种版本控制系统,主要用于软件开发中的版本控制和项目管理。svn 可以帮助开发团队协作开发,解决代码冲突、版本控制、权限控制等问题。svn 的使用方法有复制-修改-合并方案和锁定-修改-解锁...
【SVN介绍】:Subversion是一个开源的版本控制系统,用于管理文件和目录的变更历史,使得多人协作开发时可以有效地跟踪和控制代码的修改。SVN通过存储文件的不同版本,允许用户回滚到以前的状态,避免数据丢失,并且...
主要是对svn的简单使用介绍,包括windows和linux上的使用
**一、SVN 介绍** SVN,全称 Subversion,是一种版本控制系统,用于管理软件项目的源代码和其他文件,记录文件和目录的变更历史,便于团队协作开发。它允许开发者查看历史版本、回滚到旧版本、合并不同分支的修改,...
1. AnkhSVN介绍: AnkhSVN是一款开源项目,它为Microsoft Visual Studio提供对Subversion(SVN)的支持。Subversion是一款广泛使用的版本控制系统,用于追踪文件和目录的修改,以便多人协作开发。AnkhSVN将这些功能...
简介 第1章 VS项目软件配置工具介绍 1 .1 SVN和VISUALSVN介绍 1.2 必备软件 ...4.1 ANKHSVN介绍 4.2 ANKHSVN安装 4.2 ANKHSVN连接VISUALSVN SERVER 下载源项目 4.3 ANKHSVN开发项目时其它的操作流程
一、AnkhSvn介绍 AnkhSvn是一个开放源码的Visual Studio插件,它将强大的版本控制功能无缝地整合到Visual Studio开发环境中。通过AnkhSvn,开发者可以直接在IDE内部执行常见的SVN操作,如版本提交、更新、合并、差异...
**一、SVN 介绍** SVN(Subversion)是一种开源的版本控制系统,用于管理文件和目录的变更历史,支持多人协同工作,使得团队成员可以在同一份代码上进行修改并合并更改,同时保持代码的历史记录。它允许用户追踪...