备份一篇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

 

转载于:https://www.cnblogs.com/walkerwang/p/4346033.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值