1》Subversion版本控制简介:

Subversion(SVN)是一款自由开放的版本控制软件,可以管理文件,文件夹以及记录他们的修改状况,常用来帮助我们管理软件开发的源代码或是公司手册文档。SVN通过将文档导入至版本库中进行管理,版本库类似于文件服务器,但比文件服务器更强大的是,它可以记录用户每一次对文件或目录的修改状况,并提供还原数据至老版本的功能;版本控制对于软件开发而言是至关重要的,现在的软件开发一般作为项目进行,一个项目中会有很多人参加,那么每个人手中都有自己的一份修改备份,最后谁的版本是最新的?有时一款软件开发出来之后会有很多个版本,比如1.0版本,2.0版本,而且每个大版本下还有小版本号,1.1.1,2.1.1,等版本,SVN可以帮助我们很好地管理这些代码;

2》SVN架构图:

从下图可以看出,服务器端保存着Subversion的版本库,客户端通过命令或图形工具连接到服务器,并建立本地“工作副本”,也就是从服务器端将版本库中的资料复制到客户端本地,当然,客户端主机可以将自己本地的版本更新至服务器版本库,而客户端可以通过三种方式连接到服务器取得版本库中的数据:

版本库(Svn   Repository)---------------------->服务器端

========================================================

Apache

                       mod_dav                                          SVN

                       mod_dav_suv

                                                                               Internet

                     --------------------------------------------------------------------------------------------------

DAV             SVN               Local

版本库访问

===========================================================

命令行或图形工具------------------------------》客户端

3》Subversion服务器:

客户端访问服务器时可以通过三种方式访问:svnserve访问,svnserve+ssh访问,Apache间接访问;

      svnserve是一个小巧,轻便的服务器程序,客户端通过使用SVN专用的协议进行访问,其特点是简单;由于svnserve本身并不提供数据加密通信的功能,所以,如果需要更加安全的连接,可以使用svnserve+ssh的方式与服务器建立SSH隧道连接,再通过SSH调用svnserve程序,实现数据的安全加密传输;Apache通过mod_dav_svn模块可以访问版本库,这样客户端可以通过访问Apache取得版本库资料,从而完成对数据的版本控制;

*************

Apache+DAV                                                   svnserve                                                   svnserve+SSH

认证                     HTTP基本认证,LDAP,证书          支持MD5认证                                                      SSH认证

权限           可对版本库整体设置权限,也可对        可对版本库整体设置权限,也可对               仅对版本库 整体设置权限

        指定目录设置权限                指定目录设置权限

加密      支持SSL加密               无                   支持SSH隧道加密  

日志      完善的Apache日志              无                   无   

速度      慢                    快                   快   

设置      相对复杂                 简单                   相对简单

4》SVN服务器搭建:

1>安装SVN软件:

      yum  -y  install  subversion

   2>搭建服务器:

版本库软件安装完成以后,我们首先要做的是创建一个版本库,svnadmin工具是SVN软件所提供的版本库管理工具,该工具可以用来创建库,备                 份库,修订版本等操作;其次我们还需要为版本库建立一套有效的认证机制以增强版本数据库的安全性,最后当服务器端的所有设置均完成后,启动                  服务器端相应的服务进程即可;

1)创建服务器版本库:

          利用svnadmin命令可以创建服务器版本库;

       描述:subversion版本库管理工具,通过svnadmin help可以查看命令帮助;

       用法:svnadmin    命令   /版本库路径【选项】

命令:

          create            创建一个新的版本库

          hotcopy   版本库热备

          lslocks     打印所有的锁描述

       svnadmin实例:

svnadmin     create  /var/svn/project1

          svnadmin    hotcopy   /var/svn/project1        /var/svn/projet1_copy

          svnadmin    lslocks  /var/svn/project1

         ABC公司近期刚刚接到一个网站项目,由于项目开发是多人进行的,所以公司希望使用版本控制系统高效地管理项目代码,项目代码保存                            在/var/web_code目录下,下面我们将为该项目创建名为web_project的版本库:

mkdir   /var/svn

          svnadmin   create   /var/svn/web_project

通过svnadmin命令已经创建了一个名为web_project的空版本库,下面我们将使用svn命令将项目代码导入到版本库中,import代表执行导入操                       作,将本地web_code目录下的资料导入到刚刚创建的空版本库web_project中,-m后面跟的是说明性的字符串,可以为任意字符:

svn  import  /var/web_code/  file:///var/svn/web_project/  -m  "Initial  DaTa"

         svn  list  file:///var/svn/web_project           列出版本库中的资料列表

2)认证与授权

使用SVN内置的认证机制可以有效地增强客户端访问版本库的安全性,当客户端访问版本库服务器时,服务器会根据版本库目录下的                                     conf/svnserve.conf文件中定义的认证与授权策略实现权限的控制,下面是该文件的核心配置说明:

                

在svnserve.conf中已经配置好了账户密码文件,下面分别看看passwd与authz文件的内容,默认该文件存放在版本库的conf目录下,在                           passwd文件中需要设置账户信息,在authz文件中需要设置访问控制权限;

3)启动svnserve服务:

svnserve命令的描述和用法如下:

描述:SVN服务器程序

           用法:svnserve [选项]

选项:

              -d                     以守护进程方式运行svnserve

             --listen-port=port     指定监听的端口,默认监听端口号为3690

            -r         为版本库指定一个虚拟路径,默认客户端要指定绝对路径访问库

直接运行svnserve命令即可启动SVN服务进程,但如果需要该服务作为后台程序持续监听客户端访问,可以使用-d选项使该程序以守护进                         程的方式启动svnserve服务,SVN服务默认监听端口为3690,如果防火墙处于开启状态,需要注意对防火墙的正确设置;svnserve运行后,会将                         所有版本库发布至网络(假设有多个版本库);此时,客户端需要指定绝对路径访问版本库,如;svn://centos.example.com/var/svn/web_project,                       同时服务器端如果需要在authz文件中为目录设置权限,路径应该为[web_project:/]或[project2:/test],即这里的[web_project:/]表示web_project是版                       本库的根,[project2:/test]表示project2下的test目录;  

默认SVN会将服务器计算机中所有的版本库共享给网络用户,但有时我们仅希望发布其中一个版本库时,就需要限制仅发布web_project                         一个版本到网络中,这样客户端也可以使用相对路径访问版本库,如:svn://centos.example.com/web_project(客户端会访问服务/var/svn/目录下                     的web_project项目),同时,服务器端如果需要在authz文件中为目录设置权限,路径应该为[/]或[/test],即这里的根(/)仅表示web_project版本                          库,/test表示web_project下的test目录;如果需要发布个别版本库给网络用户,可以使用svnserve 命令的-r 选项,该选项后面接版本库的路径:

svnserve  -d  -r  /var/svn

4)客户端访问:

版本库服务器创建完成后,我们可以通过多种方式访问SVN服务器的版本库,可以使用命令行或者图形工具,也可以通过本地磁盘或网络                                协议访问,但不管你使用哪种方式,都需要提供一个URL地址来定位版本库的位置,每种URL的使用格式及含义示下:

file:///                   直接访问本地磁盘上的版本库(客户端与服务器端在一台机器上)

         http://       配置Apache的WebDAV协议,通过网页访问版本库

         https://        与http://相似,但使用了SSL进行数据加密

         svn://        通过svnserve定义的协议访问版本库

         svn+ssh://    与svn://相似,但使用了SSH封装加密数据

          在客户端访问服务器版本库的众多方法中,命令行的方式是高效,功能完善,无须安装第三方软件的一种简单方式,SVN软件为我们提供                           了一个名为svn的命令行程序; 

(1)svn命令:

              描述:subversion客户端命令行工具

              用法:svn  命令  【选项】

              选项:

              --password         密码

              --username    用户名

              --revision(-r)  指定要检查的特定版本

           命令:

               add                    添加文件,目录或符合链接

               cat       输出特定文件的内容

               checkout     URL[@REV] [PATH]

从服务器版本库中复制一份副本到本地,URL定位版本库,通过REV可以下载特定版本的数据,PATH为本地工作副本路径:

commit                将本地工作副本修改后的内容发布至版本中,简写为ci

               copy    SRC    DST       将工作副本中的一个文件或目录复制到版本库中

               delete    PATH               从本地工作副本中删除一个项目

               delete    URL       从版本库中删除一个项目

               diff          对比两个版本之间的差别

               import          提交一个路径的副本至版本库中

               info         显示本地或远程版本信息

        svn实例:

svn   checkout   file:///var/svn/project1   mine

           svn    co   svn://192.168.0.254/project1  mine

           svn    commit  -m   "modified  foo.html"

             svn     commit  -m   "modified  foo.html"   /mine

             svn     delete   testfile

             svn      diff

           svn   import  -m  "New  project"   /etc    file:///var/svn/project

           svn  info

              svn  info   svn://172.16.0.118/var/svn/web_project

除了核心的svn命令,SVN软件包还提供了一个用于对版本库数据信息进行简单查询的工具,svnlook命令可以帮助用户完成这些查询工作;

(2)svnlook命令

                   描述:subversion检查工具,通过svnlook  help可以查看命令帮助;

           用法:svnlook 命令     /版本库路径    【选项】

             选项:--revision(-r)   指定要检查的特定版本

             命令:

             author                        显示作者

             cat         显示版本库中的文件内容

               date        显示时间标记

               log           显示日志消息

               tree          显示版本库资料树

svnlook实例:

svnlook   author  /var/svn/web_project

svnlook  author  -r  2  /var/svn/web_project     查看版本2的作者信息

            svnlook  cat    /var/svn/web_project  a.text   查看版本库中a.text文件的内容

我们可以使用svn命令或图形工具连接版本库服务器,下载版本数据到本地,通过图形方式在本地计算机生成本地副本版本,图形工具                            选的是windows平台的TortoiseSVN软件,安装完成该软件后,在桌面点击鼠标右键即可找到该工具,它是免费的基于GPL开发的开源自由软                                件,它是subversion版本控制系统的一个非常优秀的客户端程序,可以帮助我们高效地管理文件与目录,我们可以在http://tortoisesvn.net/网站                              上找到下载链接,该软件还提供了多语言软件包(包括中文);

5》svnserve+SSH服务器搭建:

由于svnserve并不支持加密,所以对公司的数据安全危害比较大,基于SSH的svnserve使得客户端可以通过SSH服务调用SVN服务程序,客户端需要          使用ssh程序连接远程服务器的SSHD服务,通过SSH认证机制验证账户身份后,再自动启动svnserve服务,所以服务器端不需要提前启动SVN服务;在这            种模式下,svnserve.conf配置文件依然可以进行权限控制,服务器部署流程是启动SSH服务,在服务器上创建版本库,向版本库中导入数据,最后客户端            使用命令或图形方式访问服务器,具体操作步骤如下:

        1>服务器端启动SSHD服务器:

service     sshd    start                                     

    chkconfig   sshd  on

    2>服务器端创建版本库:

svnadmin    create   /var/svn/web_project2

       svn   import   /var/cofe2     file:///var/svn/web_project2  -m  "Web  code"

3>客户端访问:

svn  co   svn+ssh://172.16.0.118/var/svn/web_project2   /web_code2

6》Apache+SVN服务器搭建:

虽然前面两种服务器类型已经可以满足大多数人的使用需求,但当客户端没有任何工具可以使用时,我们还可以创建基于Apache的SVN服务器,这样          客户端只要有浏览器,就可以访问版本库服务器,Apache是目前非常流行的Web服务器软件,它允许在几乎所有的计算机平台上运行,目前绝大多数系统          平台都可以部署Apache  Web  Server,使用它访问版本库需要加载mod_dav与mod_dav_svn模块,Apache需要通过这两个模块才可以管理subversion版            本库,使用Apache发布subversion版本库的好处有:  

subversion可以使用Apache的多种认证方式;

     不需要创建系统账户;

     Apache提供了完善的日志功能;

            可以通过TLS进行数据加密;

       HTTP以及HTTPS可以穿越企业防火墙;

       客户端简单地通过浏览器访问版本库;

1>创建版本库:

svnadmin  create   /var/svn/web_project3

          svn  import   /var/web_code3   file:///var/svn/web_project3   -m  "Term  3"  

2>安装Apache及相关模块软件:

yum  -y  install httpd

yum  -y  install   mod_dav_svn

3>修改Apache配置:

为了让Apache  Web  Server 可以读取SVN版本库中的数据,我们需要修改httpd针对SVN的配置文件subversion.conf,在该文件中至少确保                        mod_dav和mod_dav_svn两个模块会被加载,还要确保/etc/httpd/conf/httpd.conf文件中dav_module模块也会被加载;另外为了满足用户对数据安全的                 需求,我们还可以利用httpd的认证模块实现基于账户和密码的访问机制;

chown   -R   apache.apache   /var/svn                           修改权限

          chown  -R   -t   httpd_sys_content_t         /var/svn          仅当SELinux开启时使用

          htpasswd  -c   /var/svn/.pass   jerry                                 创建账户文件,添加jerry用户

               service   httpd start

chkconfig    httpd  on

4>客户端访问

我们可以使用任何一款浏览器通过URL访问版本库数据,通过地址加端口和版本库根目录访问;

7》常见问题:

1>访问版本库路径错误:

如果通过svnserve命令启动服务时指定了发布的具体版本库,则客户端访问时就可以直接使用相对路径访问,如果服务器端使用svnserve  -d  -r                      /var/svn  启动服务后,客户端依然使用svn  co  svn://172.16.0.118/var/svn/web_project  /mine  ,系统将提示:svn:No  repository  found,说明没有                      找到该版本库,正确的写法是svn  co  svn://172.16.0.118/web_project  mine;

2>每次想访问版本库时,进程就会挂起:

首先确保版本库没有被破坏,数据也没有丢失,当进程直接访问版本库时,进程将通过Berkeley DB来实现,Berkeley DB包含日志系统,也就是                   说,所有的操作在执行前都被记录在日志中;当进程崩溃时,遗留下文件锁,并记录了所有未完成操作的信息,从而导致所有试图访问数据库的进程                   将因为要访问文件锁而被挂起,若想解除文件锁,可以回滚到前一个正常状态;

3>subversion提示工作副本已过时:

这可能是提交失败导致了你的工作副本被破坏,可以使用svn  revert回滚,svn  update更新来解决该问题;

4>Windows  XP下,subversion服务器有时会发布一些错误数据:

如果你是在windows平台下搭建subversion服务器,可以尝试通过安装SPI补丁包解决该问题;

5>Apache拒绝访问:

通过浏览器访问版本库时提示:You  don't  have  permission  to access  /svn  on this  server;出现这种提示说明没有权限读取相应的目录,如                       用户在这里输入:http://172.16.0.118/svn,就会得到这样的提示,正确的输入应为http://172.16.0.118/svn/web_project;

SVN版本控制服务的更多相关文章

  1. SVN版本控制工具使用学习

    SVN版本控制工具使用学习 Subversion是优秀的版本控制工具. 1.下载和搭建SVN服务器 http://subversion.apache.org/packages.html 类型有5种,推 ...

  2. 基于腾讯Centos7云服务器搭建SVN版本控制库

    基于腾讯Centos7云服务器搭建SVN版本控制库 最近在和小伙伴组队参加一个关于人工智能的比赛,无奈不知道怎么处理好每个人的代码托管问题,于是找到了晚上免费svn托管服务器的服务,但是所给的免费空间 ...

  3. CentOS下 SVN版本控制的安装(包括yum与非yum)的步骤记录。

    一.yum安装 rpm -qa subversion //检查是否安装了低版本的SVN yum remove subversion //如果存储旧版本,卸载旧版本SVN 开始安装 yum -y ins ...

  4. 转:Tortoise SVN 版本控制常用操作知识

    转自:http://www.cnblogs.com/csharp4/archive/2010/11/26/1889317.html 今天老大跑过来问我如何把SVN服务器上的当前版本回退到某一个版本上去 ...

  5. 快速清除文件夹svn版本控制信息

    将下面内容另存为clear.bat文件,在有版本控制的目录执行即可 @echo On @Rem 清除SVN版本控制信息 @for /r . %%a in (.) do @if exist " ...

  6. SVN 版本控制工具

    1,安装完服务端VisualSVN Server和客户端TortoiseSVN 后,随便在一个文件夹下,右键,会看到有SVN checkout 选项,这个选项只有在第一次在仓库下下载的时候会用到: 1 ...

  7. 取消svn版本控制

    删除项目中的版本控制,即删除项目文件夹下的所有.svn文件夹(在做项目的时候,有时候想把项目拷回去看看,但是文件太大了,而且压缩起来很慢.这主要是因为在项目中有大量的.svn文件夹.所以才想把.svn ...

  8. Mac 搭建svn本地服务端

    首先建立一个svn目录,位置可以随意,以桌面为例 $ mkdir ~/Desktop/svn 新建一个名为proj的目录作为一个repository $ cd ~/Desktop/svn $ mkdi ...

  9. linux下svn(subversion)服务端添加工程及配置权限

    linux下svn(subversion)服务端添加工程及配置权限 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/9010507.html 此篇我只是将所做过的 ...

随机推荐

  1. spring-boot-starter-security Spring Boot中集成Spring Security

    spring security是springboot支持的权限控制系统. security.basic.authorize-mode 要使用权限控制模式. security.basic.enabled ...

  2. ror笔记2

    在rails app的 config 文件夹中新建unicorn.rb内容如下 worker_processes 2 working_directory "/home/mage/boleht ...

  3. MySQL group_concat_max_len

    MySQL提供的group_concat函数可以拼接某个字段值成字符串,如 select group_concat(user_name) from sys_user,默认的分隔符是 逗号,即" ...

  4. JBPM4.4学习笔记

    1.JBPM4表说明: JBPM4_DEPLOYMENT 流程定义表 JBPM4_DEPLOYPROP 流程定义属性表 JBPM4_EXECUTION 流程实例表 JBPM4_HIST_ACTINST ...

  5. U盘安装centos7.1出现dracut问题的超简单解决方法

    恰好今天有空,于是抽空回忆一下之前U盘安装CENTOS7时遇到的一个大坑.U盘装系统习惯了,就顺手用大白菜工具刻了一个CentOS 7.1的minimun ISO镜像到U盘,于是噩梦开始了.如果有人像 ...

  6. Abstract(抽象)

    谈到抽象,就先谈谈面向对象语言的三大特性,也是人们口中常说的封装.继承.多态. 封装:什么是封装,按到我的理解,封装就是把某些类的相关属性和方法封装,对内实现数据影城,对外提供稳定接口. 继承:从字面 ...

  7. LNMP 参数调优 ( 无注释 )

    简介: PHP FastCGI 优点 1.PHP 脚本运行速度更快.PHP 解释程序被载入内存而不用每次需要时从存储器读取,极大的提升了依靠脚本运行站点的性能. 2.需要使用的系统资源更少.由于服务器 ...

  8. canvas的性能优化

    canvas玩多了后,就会自动的要开始考虑性能问题了.怎么优化canvas的动画呢? [使用缓存] 使用缓存也就是用离屏canvas进行预渲染了,原理很简单,就是先绘制到一个离屏canvas中,然后再 ...

  9. 解决 Android Studio 报SDK tools directory is missing

    问题描述: 因为之前已经有安装过sdk manager,在设置中将Android SDK Location设置为Android SDK安装的目录之后还是一直报SDK tools directory i ...

  10. Perl 子程序(函数)

    1.Perl 子程序(函数)Perl 子程序也就是用户定义的函数.Perl 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读. Perl 子程序可以出现在程序的任何地方,语法 ...