【SVN】基本功能

【前言】

    SVN的使用在很早之前就开始了,开始只是简单地下载需要的代码,没有深入的去学习和研究SVN的其他功能,今天就来更详细对SVN进行学习。


【代码版本管理系统的历史】


    代码版本管理系统大致可以分为三个时代:

    第一代:本地式

    这代主要的特点提供本地代码版本控制,比如SCCS(1972)、 PVCS(1985)等。

    这代主要实现了基本的代码版本管理,但缺点是无法让多人同时对一个版本库进行修改。这个也和当时软件规模不够大有关,也没有这样的需求。


    第二代:客户端-服务器式

    这代主要的特点是提供集中式服务器端代码版本控制,比如 CVS(1986), ClearCase(1992), Visual SourceSafe(1994), Perforce(1995), Subversion(2000) 等。

    这代主要是实现了中心服务器端的代码版本管理,特点是可以让多人同时对一个代码版本库进行同步和修改,但缺点也相当明显:

  1. 在无法连接服务器的情况下,无法查看日志以及提交和比较代码版本(慢速网络和远程异地工作的程序员的痛),以及当服务或者网络出现问题的时候很多人员就会无法工作。
  2. 不支持local branch,导致branch创建管理复杂,并且一旦创建就很难修改(快速迭代开发中的程序员的痛)
  3. 由于只有一个中心端服务器,一旦发生灾难性问题,那么所有日志都会丢失,所以需要经常做备份(备份需要不小的成本)
  4. 如果软件代码量过于庞大,一般会出现速度缓慢的情况,因为每次的日志查询、不同版本之间的代码比较和代码提交等操作都需要和服务器通信,造成服务器端的负载过大。

    第三代:分布式

    这代主要的特点是提供分布式代码版本控制,比如Git(2005), Mercurial(2005)等。

    这代结合了第一代和第二代的优点并实现了分布式的代码版本管理。

    这代的优点:分布式管理,在没有和服务器有连接的情况下仍然可以查看日志,提交代码,创建分支;支持local branch,可以快速方便的实现各种分支管理;支持分布式,从而可以实现分块管理,以及负载分流管理。

    缺点是有一定的学习曲线,比如分布方式下的代码同步,local branch的理解与运用,分布式代码管理的理解与运用等。详细的比较可以参考:这里


【SVN】

     一、what

    SVN全称Subversion。在开源软件世界,并发版本控制系统(Concurrent Versions System,CVS)长久以来一直是版本控制工具的唯一选择,CVS有很多优点,但是也有一定的缺陷,而修改这些缺陷需要耗费大量的精力。Subversion是以CVS继任者的面貌出现的新型版本控制系统,它保持开源系统的设计,与CVS尽可能类似,同时尽可能避免CVS的显著缺陷。

    Subversion是一个免费/开源的版本控制系统(version control System,VCS),可以跨越时间的对文件和目录,以及他们的修改进行管理,这就允许你恢复数据的旧版本,或检察数据的修改历史,由于这个特点,很多人吧版本控制系统看成一种“时间机器”。

    Subversion可以跨越网络进行操作,这就允许多个用户在不同的机器上工作,从某种程度上讲,允许用户在各自的空间里面修改和管理同一组数据何以促进团队协作,因为修改不再是单线进行,开发速度会更快,由于所有的工作都被记录在案,也就不用担心并行开发会降低软件的质量——如果出现不正确的修改,只要撤销那一次更改即可。


    二、功能

    SVN的功能很全面首先把一些详细的功能做一个图示。

【SVN】基本功能

    三、主要功能

(1)目录版本控制

    CVS只能跟踪单个文件的历史,不过Subversion实作了一个“虚拟”的版本管理文件系统,能够依时间跟踪整个目录的变动,目录和文件都能进行版本控制。

(2)真实的版本历史

    自从CVS限制了文件的版本记录,CVS并不支持那些可能发生在文件上,但会影响所在目录内容的操作,如同复制和重命名。除此之外,在CVS里你不能拥有同样名字,但是没有继承老版本历史或者根本没有关系的文件替换一个已经纳入系统的文件。在Subversion中,你可以增加、删除、复制和重命名,无论是文件还是目录。所有的新加的文件都是一个新的、干净的版本开始。

(3)自动提交

    一个提交动作,不是全部更新到了档案库中,就是完全不更新。这允许开发人员一逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。

(4)纳入版本空管的元数据

    每一个文件与目录都附有一组属性关键字并和属性值相关联。你可以创建,并储存任何你想要的Key/Value对。属性是随着时间来作版本管控的,就像文件内容一样。

(5)选择不同的网络层

    Subversion有抽象的档案库存取概念,可以让人很容易的实作新的网络机制。Subversion可以作为一个扩展模块嵌入到Apache HTTP服务器中。这个为Subversion提供了非常相近的稳定性和协同工作能力,除此之外还提供了许多重要功能: 举例来说, 有身份认证, 授权, 在线压缩, 以及文件库浏览等等。还有一个轻量级的独立Subversion服务器, 使用的是自定义的通信协议, 可以很容易地通过 ssh 以 tunnel 方式使用。

(6)一致的数据处理方式

    Subversion使用二进制差异算法来表示文件的差异,他对文字与二进制文件两类的文件都一视同仁。这两类的文件都同样的以压缩形式储存在档案库中,而且文件差异是以两个方向在网络上传输的。

(7)有效的分支与标签

    在分支与标签上的消耗并不必一定要与项目大小成正比。 Subversion 建立分支与标签的方法, 就只是复制该项目, 使用的方法就类似于硬连接(hard-link)。 所以这些操作只会花费很小, 而且是固定的时间。

(8)Hackability

    Subversion没有任何的历史包袱; 它主要是一群共用的 C 程序库, 具有定义完善的API。这使得 Subversion 便于维护, 并且可被其它应用程序与程序语言使用。


【总结】

    每个工具都有它的优点和缺点,都有它本身适用的情况,同一个项目开发过程中也可以同时使用两个或者更多的版本管理工具。SVN对于我们来说是比较容易上手的工具,也属于集中式的管理,保密性与可靠性对于现阶段我们的开发也可以满足。SVN除了可以基本满足我们的开发之外,有很多优秀的功能需要我们更深入的去学习,探索!


资料来源:

    SVN官网: https://subversion.apache.org/docs/

http://svnbook.red-bean.com/nightly/zh/svn-book.html#svn.intro.architecture.dia-1

     菜鸟:http://www.runoob.com/svn/svn-intro.html

      知乎:https://www.zhihu.com/question/25491925

    相关博主:http://it.tomtang.idv.tw/2013/08/svn-git.html

                        http://blog.51cto.com/cmdschool/1716033