以下知识来自老男孩的指导

1svn的介绍

1.1什么是svn

   Svn是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,svn是一个跨平台的开源的版本控制系统。Svn版本管理工具管理着随时间改变的各种数据。这些数据放置在一个中央资料档案库中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是,与众不同的是,SVN会备份并记录每一个文件每一次的修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定文件的更新历史记录。

为什么会有svn这样一个项目呢?

    解释:为了接管CVS的用户基础,确切的说,我们写了一个新的版本控制系统,它和CVS很相似,但是它修正了以前CVS所没有解决的许多问题。

SVN是一个非常通用的软件系统,它常被用来管理程序源码,但是它也可以管理任何类型的文件,如文本、视屏、图片等等。

 Svn相关站点:

  Subversion官网:http://subversion.tigris.org/

                  http://subversion.apache.org/

  SVN客户端:    http://tortoisesvn.net/

  SVN中文网站:  http://www.iusesvn.com/

  官方手册:      http://svnbook.red-bean.com/ 

1.2 SVNgit的区别

   

1.2.1 SVN集中式版本控制系统:

   SVN版本控制系统是集中式的数据管理,存在一个中央版本库,所有的开发人员本地开发所使用的代码都是来自于这个版本库,提交代码也都是提交到这个中央版本库。

SVN版本控制系统工作的流程如下:

1:在中央库上创建或者主干复制一个分支。

2:从中央库check out 下这个分支的代码。

3:增加自己的代码文件,修改现存的代码或删除代码文件。

4commit代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过期,

你得先up你的代码后再提交。Up代码的时候如果出现冲突,需要解决好冲突后再进行提交。

 缺点:

  当无法连接到中央版本库的环境下,你无法提交代码,将代码加入版本控制;

  你无法查看代码的历史版本以及版本的变化过程。提交到版本控制系统中的代码我们都默认通过自测可运行的,如果某个模块的代码比较复杂,不能短时间内实现为可测试的功能,那么你需要等很长的时间才能提交自己的代码,由于代码库集中管理,因此,需要对中央版本库的存储做备份。这点分布式的版本控制系统要好一些。SVN的备份要备份所有代码数据以及所有更改的版本记录。

 

 

                    

  

1.2.2  Git分布式的版本控制

 

  Git是由linus开发的,所以很自然的gitlinux文件系统结合的比较紧密,以至于在windows上你必须使用cygwin才能使其完美的工作。

  Git为什么叫做分布式的版本控制系统?下面说一下它的工作模式吧!

  Git中没有了中央版本库的说法了,但是为了开发小组的代码共享,我们通常还是会搭建一个远程的git仓库。

  但是和svn不同的是,开发者本地也包含了一个完整的git仓库,但是从某种程度上说本地的仓库和远程的仓库在身份上等价的,没有主从之分。

 

  如果你的项目是闭源项目,或者你习惯于以往的集中式的管理模式的话,那么在git下你也可以像svn那样的工作,只是流程中可能会增加一些步骤。

   1:你本地创建一个git库,并将其add到远程git库中。

   2:你在本地添加或者删除文件,然后commit,当然commit操作都是提交到本地的git库中了。(其实是提交到:git目录下的objects目录中去了)

   3:将本地git库的分支push到远程git库的分支,如果这个时候远程git库中已经有别人push过,那么远程git库将不允许你push,这时候你需要先pull,然后如果有冲突,处理好冲突,commit到本地git库后,再push到远程git库。

1.3 运维人员掌握版本管理

 

对于版本管理系统,运维人员需要掌握的技术点:

1:安装、部署、维护、排障

2:简单使用,很多公司都由开发来管理,包括建立仓库和添加删除账号。

3:对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务的。

1.4 Svn服务运行模式与访问方式

1.4.1 svn服务端运行方式

   1:独立服务器访问

       访问地址:svn://svn.~~~~~~/sadoc

   2:借助apachehttp服务

       访问地址:http://svn.~~~~~~/sadoc

          a.单独安装apache+svn

          b.CSVNpapche+svn)是一个单独的整合的软件,带web界面管理的svn软件。

3:本地直接访问(例如:file://application/svndata/sadoc

1.5 SVN客户端访问方式

   Svn客户端可以通过多种方式访问服务器端,例如:本地磁盘访问,或各种各样不同的网络协议访问,但一个版本库地址永远都是一个URLURL反映了访问方法。

  

访问方式

说明

File://

直接通过本地磁盘或者网络磁盘访问版本库

http://

通过webDAV协议访问支持subversionapache服务器

https://

http://相似,但是用SSL加密访问

Svn://

通过TCP/IP自定义协议访问svnserve服务器

Svn+ssh://

通过认证并加密的TCP/IP自定义协议访问svnserve服务器

 

1.6 SVN档案库数据格式

  SVN存储版本数据有2中方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

  BDB:伯克利DB,版本库可以使用的一种经过充分测试的后台数据库实现,不能通过网络共享的文件系统上使用。伯克利DBsubversion1.2版以前的缺省版本库格式。

  FSFS:一个专用于subversion版本库的文件系统后端,可以使用网络文件系统(例如:NFS或者SMBFS)。是1.2版本及其后的缺省版本库格式。

  CVS是个基于RCS文件的版本控制系统。每一个CVS文件都不过是普通的文件,加工些额外信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。

  SVN是基于关系型数据库的(BerkleyDB)或者一系列二进制文件的(FS-FS)。一方面这解决了许多问题(例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性)然而另一方面,数据存储由此变得不透彻,不能像ftp,samba,nfs等能看到实体文件了、

1.7  SVN版本系统逻辑架构原理图




1.8 Svn集中式版本管理系统流程图

 

集中式代码管理的核心是svn服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后进行开发,最后解决冲突、提交。所有的版本信息都放在svn服务器上,因此如果脱离了服务器,开发者就无法进行提交代码工作。

1.9 svn的优缺点

缺点:1:由于每一次提交都保留一个原始副本,因此svn数据库容量会暴增。

      2:如果不能连接到svn服务器上,基本上不可以工作,如果服务器不能连接上,就

         不能提交,还原,对比等等。

      3:不适合开源系统开发(开发人数太多)但是一般集中式管理的有非常明确的权限

         管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众

         多的问题。

优点:1:管理方便,逻辑清晰明确,符合一般人思维习惯。

      2:易于管理,集中式svn服务器更能保证数据安全性。

      3:代码一致性非常高

      4:适合开发人数不多的项目开发。

      5:普及度高。