Svn版本管理-学习篇-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

Svn版本管理-学习篇

简介:
  1. svn介绍

  2. 常见版本控制软件

  3. svn常用的运行模式

  4. svn常用的访问模式

  5. svn数据格式

  6. svn服务器搭建部署

  7. windows系统svn客户端使用

  8. linux系统svn客户端使用

  9. Svn钩子脚本简介

  10. Svn备份还原模拟演练


                                                                                        本文参考了网上资料

                                        

                                             svn 服务端搭建部署


svn介绍

        SubversionSVN)是一个开源的,跨平台的版本控制系统,由CollabNet公司成立于2000年;Subversion作为新一代的版本管理系统,以其目录版本化、原子提交、版本化的元数据、更加有效的分支和标签等特性,至今已被众多的互联网企业使用来管理网站、论坛的代码文件;Subversion最独特的地方,便是可以通过Apache的扩展模块与ApacheHTTP服务相结合,实现更安全的特性与管理,其次用户还可以通过HTTP协议去访问版本库,还可以通过SSL协议传输加密,保证数据的安全性;SubversionApache软件基金会的发展的一个项目,并且也是一个丰富的开发人员和用户社区的一部分。


常见的版本控制软件

            1,CVS,逐渐被SVN取代,是CVX重写版和改写版

            2,SVN,Subversion

            3,Git,Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件


svn的服务器常见有3种运行访问方式

1
2
3
1、独立服务器(例如:svn://IP/sadoc);
2、借助apache(例如:http://IP/sadoc);
3、本地直接访问(例如:file://IP/sadoc)


客户端访问方式

    Subversion可以通过多种方式访问--本地磁盘访问,或各种各样不同的网络协议,但一个版本库的地址永远都是一个URL,URL方案反映了访问方法

1
2
3
4
5
file://直接版本访问(本地磁盘或者网络磁盘)
http://通过WebDAV协议访问支持Subversion的Apache服务器
https://与http://相似,但是用的SSL加密
svn://通过未认证的TCP/IP自定义协议访问svnserver服务器
svn+ssh://通过认证并加密的TCP/IP自定义协议访问svnserver服务器



SVN数据格式

Subversion存储版本数据方式2种:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点;那么在创建Subversion版本控制仓库的时候,可以指定存储版本数据为FSFS方式;



集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说

明:开始新一天的工作    


1、从服务器下载项目组最新代码

2、进入自己的分支,进行工作,每隔一小时向服务器上自己的分支持提交一次代码(很多人都有这个习惯。因为有时候自己对自己代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。

3、下班时间快到了,把自己的分支合并到服务器的主分支上,一天的工作完成,并反映给服务器

这就是经典的svn工作流程,从流程上看,有缺点,也有优点

缺点:

1、服务器压太大,svn数据库容量暴增

2、如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等

3、不适合开源开发(开发人数非常非常多,但是Google app engine就是用SVN的)。但一般集中式管理的有非常明确权限管理机制(例如分支访问限制),可以实现分层管理,从而很好解决开发人数众多问题


优点:

1、管理方便,逻辑明确,符合一般人思维习惯

2、易于管理,集中式服务器更能保证安全性

3、代码一致性非常高

4、适合开发人数不多的项目开发

5、大部分软件配置的大学教材都是使用svn和vss


1,yum安装subversion

1
[root@localhost ~]# yum -y install subversion



2,检测是否安装成功

1
2
[root@localhost ~]# rpm -qa subversion
subversion-1.6.11-15.el6_7.x86_64



3,创建svn版本根目录已经密码权限目录

1
2
3
4
5
6
7
8
[root@localhost ~]# mkdir -pv /web/svndata /web/svnpasswd
mkdir: 已创建目录 "/web"
mkdir: 已创建目录 "/web/svndata"
mkdir: 已创建目录 "/web/svnpasswd"
[root@localhost ~]# ll /web/
总用量 8
drwxr-xr-x. 2 root root 4096 2月  23 22:16 svndata
drwxr-xr-x. 2 root root 4096 2月  23 22:16 svnpasswd



4,启动服务,并检测服务和端口是否开启

1
2
3
4
5
[root@localhost ~]# svnserve -d -r /web/svndata
[root@localhost ~]# ps -ef  | grep svn | grep -v grep
root       1745      1  0 22:18 ?        00:00:00 svnserve -d -r /web/svndata
[root@localhost ~]# netstat -lntup | grep 3690
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      1745/svnserve



5,创建一个新的subversion项目www.baidu.com,项目可以创建很多个

1
2
3
[root@localhost ~]# svnadmin create /web/svndata/www.baidu.com
[root@localhost ~]# ls -ld /web/svndata/www.baidu.com/
drwxr-xr-x. 6 root root 4096 2月  23 22:20 /web/svndata/www.baidu.com/



6,关于帮助,可以查看帮助

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# svnadmin help create
create: 用法: svnadmin create REPOS_PATH
在 REPOS_PATH 创建一个新的空版本库。
有效选项: 
  --bdb-txn-nosync         : 在提交事务时禁用fsync [BDB]
  --bdb-log-keep           : 禁用自动删除日志文件 [BDB]
  --config-dir ARG         : 从目录 ARG 读取用户配置文件
  --fs-type ARG            : 版本库类型: “fsfs”(默认)或“bdb”
  --pre-1.4-compatible     : 使用与1.4之前版本兼容的格式
  --pre-1.5-compatible     : 使用 Subversion 1.5 之前版本的格式
  --pre-1.6-compatible     : 使用与 1.6 之前版本兼容的格式



7,修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@localhost ~]# cd /web/svndata/www.baidu.com/
[root@localhost www.baidu.com]# ls
conf  db  format  hooks  locks  README.txt
 
**************************************************************************
dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据,刚开始新建时此目录没有
db目录:就是所有版本控制的数据存放文件
hooks目录:放置hook脚本文件的目录
locks目录:用来放置subversion常见锁定数据的目录,用来追踪存取文件库的客户端
format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号
conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等),也是我们要关注的配置文件
 
[root@localhost www.baidu.com]# cd conf/
[root@localhost conf]# ls
authz  passwd  svnserve.conf
**************************************************************************
authz                     #认证权限相关
passwd                 #用户名和密码
svnserve.conf              #服务器配置文件
 
[root@localhost conf]# cp svnserve.conf svnserve.conf.2016-3-3bak
[root@localhost conf]# vi svnserve.conf
[root@localhost conf]# egrep "\-access|-db = " svnserve.conf
anon-access = read               #原先注释掉了,匿名用户可以读,使用none的话就是匿名用户不可以访问
auth-access = write           #这几行都要取消注释,认证用户可以写,可以是read,write,none
password-db = /app/svnpasswd/passwd #密码库文件,默认使用的是同一目录下的passwd文件作为用户密码库
authz-db = /app/svnpasswd/authz     #认证权限文件
realm = www.baidu.com       #登陆提示信息
注意:此配置文件的所有内容必须顶格,否则会报错



8,定义用户名密码,权限配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost conf]# cp authz passwd /web/svnpasswd/
[root@localhost conf]# cd /web/svnpasswd/
[root@localhost svnpasswd]# ls
authz  passwd
[root@localhost svnpasswd]# vi passwd
[users]
# harry = harryssecret
# sally = sallyssecret
user1 = 123456
user2 = 123456
user3 = 123456
 
**************************************************************************
#末尾添加上面三行
#对于部分版本,前面的[users]是有#号的,如果有#号,一定要取消,否则只能使用匿名用户登录,客户端登录不会
出现登录窗口或密码提示,除非在配置文件将anon设置为none,否则将返回一个错误
#这里的密码都是明文,没有加密



8.1,配置权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@localhost svnpasswd]# vi authz 
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
# [/foo/bar]
# harry = rw
# &joe = r
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
admin = user1,user2    #定义组,在[groups]下面添加  #用户组格式 用户组名 = 用户1,用户2
                       #一个组可以包含多个用户,英文逗号间隔,用户名必须是在passwd中存在的
[www.baidu.com:/]      #/表示我当前所在版本库目录
@admin = rw            #@admin表示这个组的权限,就是上面定义的组的成员
user3 = r              #用户
* =                    #除了上面的有赋予权限成员之外,其他的成员都没有权限
 
**************************************************************************
authz配置
用户组格式,其中1个用户组可以包含1个或多个用户,用户间用,隔开
[groups]
=,
[<项目库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
[/]表示根目录 及以下,根目录是svnserve启动时指定的,
我们指定为/app/svndata,[/]就是表示全部版库设置权限
[repos:/]表示版本库repos设置权限
[repos:/webtest]表示版本库repos中的webtest项目设置权限
[repos:/webtest/zhanghe]表示版本库对repos中的webtest项目的zhanghe目录设置权限
权限主体可以是用户组,用户或*,用户组在前面加@,*表示全部用户
权限可以是w,r,wr和空,空表示没有任何权限
authz中每个参数都要顶格写,开头不能空格
对于组,要以@开头,用户不需要@开头



9,重新启动svn服务

1
2
3
4
5
6
[root@localhost svnpasswd]# pkill svnserve
[root@localhost svnpasswd]# ps -ef | grep svn
root       1881   1679  0 23:30 pts/0    00:00:00 grep svn
[root@localhost svnpasswd]# svnserve -d -r /web/svndata/
[root@localhost svnpasswd]# netstat -tlunp | grep svn
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      1883/svnserve


                                               windows系统svn客户端使用


                                                                      Linux系统运维交流群:476794643


1,下载svn windows 客户端

wKiom1bX2PbQ4QNqAAA6Jk47HM0277.png


2,安装windows svn客户端

wKiom1bX2iDQvEQ_AADMSfYJ9nI507.png


3,新建文件夹svn 右击svn checkout设置设置取出数据

wKiom1bX2iCCDGvCAAB_EKlp-Hk177.jpg


4,设置svn地址

wKioL1bX2prTgGXdAADWvPv5UYI181.png


5,输入账号密码

wKioL1bX2prAKstAAADqTH75BYA950.png


6,见到这个页面就代表取出数据成功了

wKiom1bX2iGz8vBIAACZ7o4JBXo753.png


7,windows svn客户端提交数据

wKioL1bX2pvybwXCAACCq79c8fs684.png


8,提交数据成功

wKiom1bX2iGzxg2dAABylPgK7KQ670.png


9,右击 tortoisesvn 选中 repo-browser,随时查看服务器上面的内容

wKioL1bX2pvx-WHeAACa5RdwXY8316.png


10,看到服务器上面的内容了

wKiom1bX2iLRpRfjAAB5tVkPtvk100.png



                                        linux系统 svn客户端使用


                                                                     Linux系统运维交流群:476794643


svn Linux客户端使用帮助

1,安装软件

1
[root@localhost ~]# yum -y install subversion


2,本地取出svn数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# mkdir svn
[root@localhost ~]# svn co svn://192.168.42.128/www.baidu.com /root/svn/ --username=user1 --password=123456
-----------------------------------------------------------------------
注意!  你的密码,对于认证域:
   <svn://192.168.42.128:3690> Welcome SVN server
只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
A    /root/svn/index.php.txt
取出版本 1。
[root@localhost ~]# svn co svn://192.168.42.128/www.baidu.com /root/svn/ --username=user1 --password=123456
A    /root/svn/zabbix.txt
取出版本 2。
[root@localhost ~]# ls svn/
index.php.txt  zabbix.txt

###################################

2.1,解决 UTF-8  中文取出失败

1
2
[root@localhost ~]# export LC_CTYPE="en_US.UTF-8"
[root@localhost ~]# export LC_ALL=


3,Linux客户端查看svn文件列表

1
2
3
4
[root@localhost ~]# svn ls svn://192.168.42.128/www.baidu.com --username=user1 --password=123456
index.php.txt
zabbix.txt
新建文本文档.txt

4,Linux客户端查看svn文件内容

1
2
3
[root@localhost ~]# svn cat svn://192.168.42.128/www.baidu.com/zabbix.txt
111111111111111111111111
222222222222222222222222


5,Linux客户端提交数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost svn]# touch {a..e}#一定要本地创建好
[root@localhost svn]# ls
a  b  c  d  e  index.php.txt  zabbix.txt  新建文本文档.txt
[root@localhost svn]# svn add a b c d e
A         a
A         b
A         c
A         d
A         e
[root@localhost svn]# svn ci -m "1"
增加           a
增加           b
增加           c
增加           d
增加           e
传输文件数据.....
提交后的版本为 5。

6,文件夹创建提交

1
2
3
4
5
6
[root@localhost svn]# mkdir zhanghe
[root@localhost svn]# svn add zhanghe
A         zhanghe
[root@localhost svn]# svn ci -m "2"
增加           zhanghe
提交后的版本为 6。


7,Linux客户端数据导入

1
2
3
4
5
6
7
[root@localhost ~]# mkdir svn1
[root@localhost ~]# mkdir -p svn1/trunk svn1/branch svn1/tag
[root@localhost ~]# svn import svn1/ svn://192.168.42.128/www.baidu.com -m "4"
增加           svn1/trunk
增加           svn1/tag
增加           svn1/branch
提交后的版本为 7。


8,svn 把主干拷贝成分之

1
2
[root@localhost ~]# svn copy svn://192.168.42.128/www.baidu.com/trunk svn://192.168.42.128/www.baidu.com/branch/branch_cms_160303 -m "5" --username=user1 --password=123456
提交后的版本为 8。





                                            Svn钩子脚本简介

                            

                                                                     Linux系统运维交流群:476794643    


钩子脚本的具体写法就是操作系统shell脚本程序写法,请根据自己SVN所在的操作系统和shell程序进行相应的开发。


钩子脚本就是被某些版本库事件触发的程序,例如创建新版本或修改未被版本控制的属性。每个钩子都能掌管足够的信息来了解发生了什么事件,操作对象是什么以及触发事件用户的账号。根据钩子的输出或者返回状态,钩子程序能够以某种方式控制该动作继续执行,停止或者挂起。


1
2
3
4
5
6
svn的hooks模版功能介绍
start-commit提交前触发事务
pre-commit提交完成前触发事务
post-commit提交完成时触发事务
pre-revprop-change版本属性修改前触发事务
post-revprop-change版本属性修改后触发事务
1
post-commit

在提交完成,成功创建版本之后执行该钩子,提交已经完成,不可更改,因此脚本返回值被忽略

1
post-lock

对文件进行加锁操作之后执行该脚本

1
post-revprop-change

在修改revision属性之后,执行该脚本。因为修改稿已经完成,不可更改,因此本脚本的返回值被饭忽略

(不过实际上的实现似乎是该脚本的正确执行与否影响属性修改)

1
post-unlock

对文件进行解锁操作之后执行该脚本

1
pre-commit

在Subversion transaction完毕之后,在提交之前,执行该脚本

1
pre-revprop-change

在修改revision属性之前,执行该脚本

1
start-commit

对客户端还没有向服务器提交数据之前,即还没有建立Subversion transaction(缩写txn)之前,执行该脚本


脚本post-commit 演示


脚本用处:当svn更新时候,自动同步到tmp下面去,适合网站使用

1
2
3
4
5
6
7
8
9
10
11
12
13
REPOS="$1"
REV="$2"
export LC_CTYPE="en_US.UTF-8"
export LC_ALL
LOGPATH="/web/log"
[ ! -d ${LOGPATH} ] && mkdir ${LOGPATH} -p
#update content from svn
SVN=/usr/bin/svn
$SVN update --username user1 --password 123456 /data/www
if [ $? -eq 0 ]
then
 /usr/bin/rsync -az --delete /data/www /tmp
fi




脚本pre-commit 演示

脚本用处:限制上传文件大小,文件后缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
REPOS="$1"
TXN="$2"
#此处更改大小限制,这里是5M
MAX_SIZE=5242880
#此处增加限制文件后比缀名
FILTER='\.(zip|rar|o|obj|tar|gz)$'
#Make sure that the log message contains some test
SVNLOOK=/usr/bin/svnlook
#LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" wc -c`
if "$LOGMSG" -lt 9 ];
then
        echo -e "nLog message cann't be empty! you must input more than 8 chars as comment!." 1>&2
exit 1
fi
files=$($SVNLOOK changed -t $TXN $REPOS |cut -d "" -f 4-)
#echo "$files">&2
#echo "$r">&2
#exit 1
rc=0
echo "$files" while read f;
do
#check file type
filesize=`$SVNLOOK cat -t "$TXN" "$REPOS" "$f" wc -c `
if "filezie" -gt "$MAX_SIZE" ];
then
        echo "File $f is too large(must <+$MAX_SIZE)B" >&2
        exit 1
fi
done
#All checks passed,so allow the commit.
if [ $? -eq 1 ];
then
exit 1
else
exit 0
fi



2016年03月03日15:52:53

数据备份还原    待更新。。。。。。。。。


            脚本实现svn备份与恢复,基于rsync实现远程备份,并记录日志


                                                                 Linux系统运维交流群:476794643


svn服务器:192.168.42.128

备份服务器:192.168.42.129

在svn服务器进行本地备份


1.全量备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# vim  /data/shell/backup_svn.sh
  
#!/bin/sh
#
PATH=$PATH:/usr/local/subversion/bin
export PATH
#定义时间变量,用于文件名后缀
DATE=$(date +%F) 
   
#定义SVN库目录变量
SVN_DIR_docs=/web/svndata/www.baidu.com               
SVN_DIR_tools=/web/svndata/
#SVN_DIR_ALL=/web/svndata/   #没有试过能不能把两个库一起备份下来      
   
#定义备份文件存放目录变量
SVN_BAK_DIR=/data/bak/
   
#初始化版本号,全库备份一定是从0版本号开始
echo '0' /data/svnnum/docs_svn_id
echo '0' /data/svnnum/tools_svn_id 
   
#取初始化版本号
NUM_docs1=$(cat /data/svnnum/docs_svn_id)
NUM_tools1=$(cat /data/svnnum/tools_svn_id)
   
#取当前最新的版本号
NUM_docs2=$(svnlook youngest $SVN_DIR_docs)
NUM_tools2=$(svnlook youngest $SVN_DIR_tools)
   
#备份用户认证以及授权文件
 \cp  /web/svnpassword {authz,passwd/data/bak/.
   
#开始备份
#判断备份是否成功,若成功,则记录当前最新的版本号到临时文件中,用于下次增量备份使用
All_Backup_svn(){
   
        svnadmin dump $SVN_DIR_docs  -r $NUM_docs1:$NUM_docs2  --incremental >  $SVN_BAK_DIR/docs_bak_$DATE
        if [ $? -eq 0 ];
            then
            echo $NUM_docs2 > /data/svnnum/docs_svn_id
            else
            echo "$(date +%F) docs backup fail...." >> /tmp/svnback.log
        fi
        svnadmin dump $SVN_DIR_tools  -r $NUM_tools1:$NUM_tools2  --incremental >  $SVN_BAK_DIR/tools_bak_$DATE
        if [ $? -eq 0 ];
            then
            echo $NUM_tools2 > /data/svnnum/tools_svn_id
            else
            echo "$(date +%F) tools backup fail...." >> /tmp/svnback.log
        fi
}
   
All_Backup_svn

       

2.增量备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# vim  /data/shell/day_backup_svn.sh
  
#!/bin/bash
#
PATH=$PATH:/usr/local/subversion/bin
export PATH
#定义时间变量,用于文件名后缀
DATE=$(date +%F) 
   
#定义SVN库目录变量
SVN_DIR_docs=/web/svndata/www.baidu.com                
SVN_DIR_tools=/web/svndata/www.google.com
#SVN_DIR_ALL=/web/svndata/   #没有试过能不能把两个库一起备份下来  
   
#定义备份文件存放目录变量
SVN_BAK_DIR=/data/bak/
   
#取初始化版本号
NUM_docs1=$(cat /data/svnnum/docs_svn_id)
NUM_tools1=$(cat /data/svnnum/tools_svn_id)
   
#取当前最新的版本号
NUM_docs2=$(svnlook youngest $SVN_DIR_docs)
NUM_tools2=$(svnlook youngest $SVN_DIR_tools)
   
#开始备份
#判断备份是否成功,若成功,则记录当前最新的版本号到临时文件中,用于下次增量备份使用
Day_Backup_svn(){
          
        if [ $NUM_docs1 -lt $NUM_docs2 ];
            then
   
            svnadmin dump $SVN_DIR_docs  -r $NUM_docs1:$NUM_docs2  --incremental >  $SVN_BAK_DIR/docs_bak_$DATE
              
            if [ $? -eq 0 ];
                then
                echo $NUM_docs2 > /data/svnnum/docs_svn_id
                else
                echo "$(date +%F) docs backup fail...." >> /tmp/svnback.log
            fi
        fi
          
      
        if [ $NUM_tools1 -lt $NUM_tools2 ];
            then
            svnadmin dump $SVN_DIR_tools  -r $NUM_tools1:$NUM_tools2  --incremental >  $SVN_BAK_DIR/tools_bak_$DATE
            if [ $? -eq 0 ];
                then
                echo $NUM_tools2 > /data/svnnum/tools_svn_id
                else
                echo "$(date +%F) tools backup fail...." >> /tmp/svnback.log
            fi
        fi
}
  
Day_Backup_svn


3.添加定时任务

1
2
3
4
5
6
7
# crontab -e
#start
0 2 * * *  /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1
#每周日做一次全量备份
59 23 *  * 0   /data/shell/backup_svn.sh &>/dev/null
#对svn进行增量备份
59 23 *  * 1-6  /data/shell/day_backup_svn.sh


4.配置rsync服务器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# rpm -qa rsync(如果安装  yum install   rsync -y)
rsync-3.0.6-12.el6.x86_64
  
# yum install xinetd -y
  
启用rsync
# vim /etc/xinetd.d/rsync 
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable = no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
提供rsync配置文件
  
# vim  /etc/rsyncd.conf
#rsync --daemon  --config=/etc/rsyncd.conf
#全局选项 
  
strict modes =yes 
# 是否检查口令文件的权限 
  
port = 873
# 默认端口873 
  
log file /var/log/rsyncd.log
# 日志记录文件 
  
pid file /var/run/rsyncd.pid
# 运行进程的ID写到哪里 
  
[svn]
  
path = /data/bak
  
# 这里是认证的模块名,在client端需要指定 
  
max connections = 0
# 客户端最大连接数,默认0(没限制) 
  
uid = root
# 指定该模块传输文件时守护进程应该具有的uid 
  
gid = root
# 指定该模块传输文件时守护进程应该具有的gid 
  
ignore errors
# 可以忽略一些无关的IO错误 
  
read only = yes
# no客户端可上传文件,yes只读 
  
write only = no
# no客户端可下载文件,yes不能下载 
  
hosts allow = * 
# 充许任何主机连接 
  
#hosts deny = 10.5.3.1
# 禁止指定的主机连接 
  
auth users = root
# 认证的用户名,如果没有这行,则表明是匿名 
  
secrets file /etc/backserver.pas
# 指定认证口令文件位置


5.提供认证文件,且权限必须为600

1
2
3
4
# vim /etc/backserver.pas 
root:123456
  
# chmod 600 /etc/backserver.pas


6.重启服务

1
# /etc/init.d/xinetd restart


 7.同步备份至192.168.42.129

提供认证文件,且权限必须为600

1
2
3
4
5
6
7
8
9
10
11
# vim /etc/backserver.pas 
123456
  
# chmod 600 /etc/backserver.pas
  
# mkdir -p  /data/bak/svn
  
# vim /home/bak/backup_svn.sh 
#!/bin/bash
#备份svn仓库
/usr/bin/rsync  -vzrtopg --progress --delete  root@192.168.42.129::svn /data/bak/svn --password-file=/etc/backserver.pas

 

8.添加定时任务

1
2
3
4
5
6
# crontab -e
#Start
0 2 * * *  /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1
#备份svn
35 01 * * * /home/backup_svn.sh  &> /dev/null
#End


9. svn恢复测试

1
2
3
4
5
6
7
8
# mkdir docs 
# svnadmin create newrepos 
# svnadmin load newrepos < docs_bak_Mon
# svnadmin load newrepos < docs_bak_Tue 
# svnadmin load newrepos < docs_bak_Wed
# svnadmin load newrepos < docs_bak_Thu
# svnadmin load newrepos < docs_bak_Fri
# svnadmin load newrepos < docs_bak_Sun


本文转自 好笔记运维 51CTO博客,原文链接:http://blog.51cto.com/zhang789/1747188,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章