晓夏

YoungCheung

Zhang Sir's technical way

SVN版本管理工具

浏览量:1312

一、svn介绍

1.1 什么是svn

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

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

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

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

SVN相关站点:

blob.png

        截至到当前,所接触到常见的版本管理软件有:vss,cvs,svn,git,其中常用的就是SVN版本管理系统。

1.2  svn和Git的区别

1.2.1 SVN集中式版本控制系统

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

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

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

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

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

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

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

缺点:

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

    2. 你无法查看代码的历史版本以及代码的变化过程,提交到版本控制系统中的代码,我们都默认通过自测可运行,如果某个模块的代码比较复杂,不能短时间内实现为可测试的功能,那么您需要很长时间才能提交代码。

   3.由于代码版本库集中管理,因此需要对中央版本库的存储做备份,这点分布式版本控制系统要好些


1.2.2 Git分布式控制

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

那git凭什么叫做分布式的版本控制系统呢?还是从模式讲起。

        Git中没有了中央版本库的说法了,但是为了开发小组的代码共享,从某种程度上说本地的仓库和远程的仓库在身份上是等价的,没有主从之分。

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

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

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

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


二、SVN服务运行模式和运行方式

2.1 SVN服务运行方式

svn服务常见的运行访问方式有3种: 

1、独立服务器

访问地址如:svn://svn.etiantian.org/sadoc);

2、借助apache等http服务

访问地址如:http://svn.etiantian.org/sadoc);

       a.单独安装apache+svn(不要用)。

       b.CSVN(apache+svn)是一个单独的整合的软件,带web界面管理的SVN软件

3、本地直接访问(例如:file:///root/svndata/sadoc)

2.2 SVN客户端访问方式

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

blob.png

2.3 SVN档案数据格式

blob.png

2.4 逻辑结构原理图

blob.png



2.5 SVN集中版本管理工具

        SVN是一种集中式版本管理系统,集中式管理的工作流程如下图所示:

blob.png

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


2.6  SVN版本管理工具工作过程

下面举例说明:

开始新一天的工作:

1.首先从SVN服务器下载项目组最新代码:

2.进入自己的分支,进行开发工作,每隔一小时向服务器上自己的分支提交一次代码(很多程序员都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一小时修改了哪些代码,就需要这样做了)

3.下班时间快到了,把自己的分支合并到主分支上,一天的工作完成,并反映给服务器

这就是经典的SVN工作流程,从流程上看有缺点也有优点:

缺点:

1.由于每一次提交都保留一个原始副本,因此SVN数据库容量会暴增

2.如果不能连接到SVN服务器上,基本上不可以工作, 例如上面第二步,如果服务器不能连接上,就不能提交,还原,对比 。

3.不适合开源系统开发(开发人数非常多,但是Google appengine就是用的SVN的)但是一般集中式管理的有非常明确的权限管理机制(例如分只访问限制)可以实现分层管理,从而很好的解决开发人数众多的问题。

优点:

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

2. 易于管理,中实施svn服务器更能保证数据安全性。

3. 代码一致性非常高。

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

5. 普及度高,大部分软件配置管理的大学教材都是使用svn和vss。

三、安装配置

3.1 环境准备

[root@SVN ~]# cat /etc/redhat-release 
CentOS Linux release 7.1.1503 (Core)

3.2 安装SVN

[root@SVN ~]# rpm -qa subversion
subversion-1.7.14-6.el7.x86_64
[root@SVN ~]# yum install subversion -y

3.3 配置并启动

创建版本库及用户密码权限目录

[root@SVN ~]# mkdir -p /root/svndata
[root@SVN ~]# mkdir -p /root/svnpasswd

建立版本库

[root@SVN ~]# svnadmin create /root/svndata/car2share

3.4 调整SVN配置文件及权限

[root@SVN ~]# cd /root/svndata/car2share/conf/
[root@SVN conf]# vim svnserve.conf

blob.png

注意: 如果是ldap认证需要将 use-sasl=true注释打开
[root@SVN conf]# cp authz passwd /root/svnpasswd/
[root@SVN conf]# cd /root/svnpasswd/
[root@SVN svnpasswd]# chmod 700 *

3.5 创建用户及密码

[root@SVN svnpasswd]# tail -3 authz
[users]
# harry = harryssecret
# sally = sallyssecret
zhangyang = 123456
[root@SVN svnpasswd]# tail -3 authz 
# * = r
[car2share:/]
zhangyang = rw

3.6 启动服务

[root@SVN svnpasswd]# svnserve -d -r /root/svndata/

出现错误:

svnserve: warning: cannot set LC_CTYPE locale
svnserve: warning: environment variable LANG is en
svnserve: warning: please check that your locale name is correct

解决:

export LC_CTYPE="zh_CN.UTF-8"

登录测试:
blob.png

blob.png

到此,SVN安装完成。


神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。