zoukankan      html  css  js  c++  java
  • 备份一篇SVN的文章, 从搭建到主备库

    来源: http://h2ofly.blog.51cto.com/6834926/1539141

    【svn简介】
                svn用于版本管理数据,它采用了分支管理系统。在它出现之前存在CVS,svn推出之后,逐步替代了CVS。
                目前又出现git,相比于svn,git更支持分布式版本管理,目前发展很猛,这里不详细介绍。大家可以先把svn了解熟悉之后,再看看git,对比下。
                ps:时代总是在进步啊,需要跟上潮流。同时,需要了解潮流为何,需要思考潮流背后的原因为何,了解背景历史为何,否则就是盲从了。

    【第一安装】

    1
    yum install subversion

    (当然如果你觉得这个版本不满足需求,也可以编译安装,去下载相关的包即可)
    具体是安装一下6个包

    1
    2
    3
    4
    5
    6
    (1/6): apr-1.3.9-5.el6_2.i686.rpm                                                                                    | 129 kB     00:01    
    (2/6): apr-util-1.3.9-3.el6_0.1.i686.rpm                                                                             |  89 kB     00:00    
    (3/6): neon-0.29.3-3.el6_4.i686.rpm                                                                                  | 120 kB     00:00    
    (4/6): pakchois-0.4-3.2.el6.i686.rpm                                                                                 |  21 kB     00:00    
    (5/6): perl-URI-1.40-2.el6.noarch.rpm                                                                                | 117 kB     00:00    
    (6/6): subversion-1.6.11-10.el6_5.i686.rpm                                                                           | 2.2 MB     00:07



    【第二配置】
    2.1、创建svn目录

    1
    mkdir -p  /data/svndata/


    2.2、创建多项目:将iso、android、web分开管理

    1
    2
    3
    svnadmin create /data/svndata/ios
    svnadmin create /data/svndata/android 
    svnadmin create /data/svndata/web

    注意:svnadmin create用于创建独立的项目,创建好之后如下图:
    wKioL1PqHNaCfQVdAAElRCyqElE977.jpg至此,创建了三个不同的项目,那怎样统一管理呢?请继续向下看

    2.3、统一管理配置(用于管理多个项目)
    2.3.1、创建统一管理相关配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    mkdir -/data/svndata/conf/  #该目录用于管理所有项目的帐号密码、权限控制等
     
    cat /data/svndata/conf/svnserve.conf #svn的总控文件[general] 
    anon-access = none#未鉴定的用户无权限访问该版本库
    auth-access = write#鉴定后的可读写版本库 
    password-db = passwd #使用的密码文件是同级路径的passwd文件,即是/data/svndata/conf/passwd  
    authz-db = authz#使用的权限控制文件是同级路径的authz文件,即是/data/svndata/conf/authz
    realm = svndata#realm 指定版本库的认证域,即在登录时提示的认证域名称。各个项目的认证域都可以自定义
     
    cat /data/svndata/conf/passwd #每个用户的用户名和密码
    [users]
    h2o = Yj3NlMD
    river = Yjh9jNj
    1
    2
    cat 
    /data/svndata/conf/authz #权限管理,权限管理的统一思路是:创建多个组,将各个用户加入到各个组,控制各个组的权限。以后对权限管理就维持在组的维度,否则以人为粒度管理,会死人滴
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [groups]
    develop=h2o,user1#说明develop有两人
    android=h2o,user3
    ios=h2o,river,user2
    [android:/trunk]#说明android的trunk相关权限
    @android = rw#说明android 组有读写权限
    @develop = rw
    [ios:/trunk]
    @ios = rw
    @develop = rw



    自此,总控的配置文件已经准备完毕

    2.3.2各项目配置文件修改
    每个项目默认使用的配置文件是该项目下的配置文件,所以必须修改掉,否则不受总控配置文件的管理的

    每个项目目录结构如下:

    wKioL1PqHQ2QySGWAABN0BRJy8Q158.jpg

    1
    2
    3
    4
    5
    6
    # grep -v '#' /data/svndata/android/conf/svnserve.conf  #其他项目类似,这里就不一一列举了[general] 
    anon-access = none 
    auth-access = write
    password-db = ../../conf/passwd #说明使用总控的密码文件 
    authz-db = ../../conf/authz #说明使用总控的权限文件 
    realm = android


    【第三启动】

    1
    svnserve --/data/svndata/


    【第四数据初始化】
    已有代码需要导入svn版本库如下

    1
    svn import /tmp/data/ios/ file:///data/svndata/codes/ios/trunk -m 'init import

    【第五备库搭建】
    注:这里使用了svnsync定时同步数据,也可以做实时同步,请自己研究(大致提示为配置钩子post-commit来实现
    5.1备库项目创建(和主库创建项目无异)以下操作在备库上操作

    1
    2
    3
    4
    mkdir -p  /data/svndata/
    svnadmin create /data/svndata/ios
    svnadmin create /data/svndata/android
    svnadmin create /data/svndata/web


    配置文件也和主库一样:包括总控的配置文件及各项目的配置文件,这里就不详细列了。

    5.2准备备库的钩子(以android项目为例,其他项目一样)以下操作在备库上操作

    1
    2
    3
    4
    5
    6
    cat /data/svndata/android/hooks/pre-revprop-change
    #!/bin/sh
    exit 0
     
     
    chmod 755 /data/svndata/android/hooks/pre-revprop-change



    5.3svnsync初始化及同步数据
    这里以android 项目为例,其他项目类似
    注:172.16.0.185 是备库,172.16.0.120是主库;主库和备库的用户名和密码一致,并且h2o需要有相关权限,具体看/data/svndata/conf/authz

    1
    2
    3
    svnsync init svn://172.16.0.185/android svn://172.16.0.120/android --username h2o--password Yj3NlMD --no-auth-cache #svnsync 建立主备库关系
     
    svnsync sync svn://172.16.0.185/android   --username h2o --password Yj3NlMD--no-auth-cache #svnsync 将数据从主库同步过来


    如果看到以下内容就说明成功了。如果发现只有版本号,没有Transmitting file data,请仔细检查主库备库配置文件,是否有错误和遗漏

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Transmitting file data .
    Committed revision 1.
    Copied properties for revision 1.
    Transmitting file data .
    Committed revision 2.
    Copied properties for revision 2.
    Committed revision 3.
    Copied properties for revision 3.
    Transmitting file data .
    Committed revision 4.
    Copied properties for revision 4.



    【第六定时更新脚本】
    在备库上写定时同步的脚本,关键如下

    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    now_time=$(
    date "+%F_%T”)
    projects=(android  ios web)
    for project in ${projects[@]};do
          
    svnsync sync svn://172.16.0.185/$project --username h2o--password Yj3NlMD --no-auth-cache >> /home/logs/svnbak.log.$now_time 2>&1
    done
  • 相关阅读:
    python接口自动化测试十三:url编码与解码
    python接口自动化测试十二:对返回的json的简单操作
    python接口自动化测试十一:传参数:data与json
    python接口自动化测试九:重定向相关
    python接口自动化测试十:字典、字符串、json之间的简单处理
    python接口自动化测试八:更新Cookies、session保持会话
    python接口自动化测试七:获取登录的Cookies
    python接口自动化测试六:时间戳,防重复处理
    python接口自动化测试五:乱码、警告、错误处理
    python接口自动化测试四:代码发送HTTPS请求
  • 原文地址:https://www.cnblogs.com/walkerwang/p/4346033.html
Copyright © 2011-2022 走看看