来源: 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用于创建独立的项目,创建好之后如下图:
至此,创建了三个不同的项目,那怎样统一管理呢?请继续向下看

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各项目配置文件修改
每个项目默认使用的配置文件是该项目下的配置文件,所以必须修改掉,否则不受总控配置文件的管理的

每个项目目录结构如下:

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

备份一篇SVN的文章, 从搭建到主备库的更多相关文章

  1. MySQL集群搭建(1)-主备搭建

    数据库在任何业务中都是最重要的环节之一,这就对数据库架构提出的较高的要求.单点数据库永远不应该出现在生产环境,我们已经目睹过太多由于单点.备份缺失造成的损失,所以,搭建高可用 MySQL 集群是非常有 ...

  2. 记一次DG搭建过程中备库ORA-00210,ORA-00202,ORA-27086错误

    ORA-00210: cannot open the specified control file ORA-00202: control file: '/u01/app/oracle/oradata/ ...

  3. linux下oracle11G DG搭建(三):环绕备库搭建操作

    linux下oracle11G DG搭建(三):环绕备库搭建操作 环境 名称 主库 备库 主机名 bjsrv shsrv 软件版本号 RedHat Enterprise5.5.Oracle 11g 1 ...

  4. pgsql主备搭建及切换

    二.主从搭建 2.1测试目标 测试postgresql主从搭建安装过程 2.2环境准备 实例级别的复制 流复制主库可读写,但从库只允许查询不允许写人, 而逻辑复制的从库可读写 流复制实验环境 主机 主 ...

  5. pgsql物理复制(pgsql 备库的搭建以及角色互换,提升)

    结构图如下: Postgresql早在9.0版本开始支持物理复制,也称为流复制,通过从实例级复制出一个与主库一模一样的备库.流复制同步方式有同步,异步两种,如果主节点和备节点不是很忙,通常异步模式下备 ...

  6. MySQL集群搭建(2)-主主从模式

    1 环境准备 上次我们搭建了主备架构,如下所示 这次我们的搭建目标是 具体配置信息 IP 系统 端口 MySQL版本 节点 读写 说明 192.168.41.83 Centos6.8 3306 5.7 ...

  7. kingbaseES V8R6集群备份恢复案例之---备库作为repo主机执行物理备份

    ​ 案例说明: 此案例是在KingbaseES V8R6集群环境下,当主库磁盘空间不足时,执行sys_rman备份,将集群的备库节点作为repo主机,执行备份,并将备份存储在备库的磁盘空间. 集群架构 ...

  8. SVN源码服务器搭建-详细教程

    一.引言 笔者曾经试图在网上搜索一篇关于SVN源代码服务器搭建方面的中文技术文章,可惜,所找到的,要么是不完整,要么就是对笔者没什么帮助的文章,TortoiseSvn的帮助文档固然强大,但因为是英文, ...

  9. SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

    SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建 如果你是使用 Eclipse 你需要先安装 MyEclipse,请参考:SSM 框架-02-MyEclipse ...

随机推荐

  1. ARKit从入门到精通(8)-ARKit捕捉平地

    转载:http://blog.csdn.net/hdfqq188816190/article/details/73360287 1.1-ARKit捕捉平地实现流程介绍 1.2-完整代码 1.3-代码下 ...

  2. 基于jQuery CSS3鼠标点击动画效果

    分享基于jQuery CSS3鼠标点击动画效果支持图片或内容滑动,允许设置动画延迟效果.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="co ...

  3. Laravel 5.4 Cache::put的一个小坑

    使用的是Cache的file驱动,然而在\Cache::put($key,$value)时发现,并没有存入. 一开始以为是file驱动的问题,后来跟踪代码发现,居然源码里当过期时间不设置时,根本不保存 ...

  4. [转]Tomcat启动报错:AnnotationConfigBeanDefinitionParser are only available on JDK 1.5 and higher

    原文地址:https://blog.csdn.net/daochuwenziyao/article/details/54949151 问题描述: 控制台输出AnnotationConfigBeanDe ...

  5. 【Linux/CentOS】Boolean ftp_home_dir is not defined

    安装完vsftpd软件后,因为CentOS系统的SELinux安全策略默认是没有开启FTP服务,直接访问会报错500 OOPS,所以需要修改为允许使用FTP服务. 目标:希望ftp用户可以访问自己的家 ...

  6. hbase源码系列(十)HLog与日志恢复

    HLog概述 hbase在写入数据之前会先写入MemStore,成功了再写入HLog,当MemStore的数据丢失的时候,还可以用HLog的数据来进行恢复,下面先看看HLog的图. 旧版的HLog是实 ...

  7. 阿里云扩容数据盘_Linux

    扩容数据盘_Linux 更新时间:2018-10-11 15:18:46 · 编辑者 编辑 · ★ 我的收藏 新手学堂 学习路径 本页目录 前提条件 注意事项 步骤 1. 在控制台上扩容数据盘的磁盘空 ...

  8. TiDB 源码阅读系列文章(一)序

    原创: 申砾 PingCAP  2018-02-28 在 TiDB DevCon2018 上,我们对外宣布了 TiDB 源码阅读分享活动,承诺对外发布一系列文章以及视频帮助大家理解 TiDB 源码.大 ...

  9. js 获取地址栏最后一个文件名称

    var JsRequest={ //这就是一个静态类,类里面有2个静态方法 //方法一:获取url的文件名 例如 index.html getUrlname:function(url){ //假如传进 ...

  10. CRNA的使用

    为了能让更多人感受 RN 的魅力,早在几个月前 React-community 就给出了一个不错的解决方案,可以让一个完全没接触过 RN 的人,从配环境开始5分钟实现 Hello Wolrd 的编写( ...