来源: 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 |
1 | mkdir - p / data / svndata / |
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 - p / 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 |
每个项目目录结构如下:
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 - d - r / data / svndata / |
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 |
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 |
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 将数据从主库同步过来 |
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 |