svnsync远程备份镜像

1. 进入远程备份服务器,创建备份版本库

#新建版本库
svnadmin create /svn/pro_bak
#钩子pre-revprop-change
cp /svn/pro_bak/hook/pre-revprop-change.tmpl /svn/pro_bak/hook/pre-revprop-change
#运行权限
chmod a+x /svn/pro_bak/hook/pre-revprop-change
#编辑/svn/pro_bak/hook/pre-revprop-change,将"exit 1"改为"exit0"或只留"exit 0"
vi /svn/pro_bak/hook/pre-revprop-change

2. 初始化镜像库

svnsync init file///svn/pro_bak 源url --source-username 源svn用户名 --source-password 123456 --sync-username sync --sync-password 123456 --no-auth-cache

or直接

#可能需要认证用户名和密码
svnsync init file///svn/pro_bak 源url

3. 执行远程同步命令

svnsync sync file///svn/pro_bak

4. pre-revprop-change解锁

当在初始化或者同步的时候遇到提示

从目标版本库获得锁失败,当前被"linux-fghj:07f6a180-fe46-11de-8346-ddb1d640fb86"持有

or

Failed to get lock on destination repos,currently held by "xxxxxxx"

svn中可以使用svn cleanup解除,svnsync执行下面代码解除锁定

#在版本库0删除属性 "svn:sync-lock"
svn propdel svn:sync-lock --revprop -r 0 file///svn/pro_bak/

5. 修改远程版本库地址

如果远程版本库地址发生改变(如域名地址或者IP地址发生变化),通过propset命令实现

#显示原来远程版本库url
svn propget svn:sync-from-url –-revprop -r 0 file///svn/pro_bak/
http://www.xxx.com/svn/rep
#设置新的远程地址 http://www.yyy.com/svn/rep
svn propset svn:sync-from-url –-revprop -r 0 http://www.yyy.com/svn/rep file///svn/pro_bak
#进行同步
svnsync sync file///svn/pro_bak

6. 通过脚本定时备份

创建同步脚本svn_sync.sh,添加下面内容

#!/bin/bash
svnsync sync --non-interactive file///svn/pro_bak

然后使用crontab定时执行

[root@localhost ~]# crontab -e

定时设置

#每天0点备份,并记录日志sync.log
#前两个0表示时间00:00,中间两个*表示日期,第5个星期几(0-6表示每天)
0 0 * * 0-6 /svn/svn_sync.sh >> /svn/sync.log 2>&1

7. 还可以进入远程版本库所在服务器添加钩子自动同步(提交代码的时候自动同步)

在远程版本库服务器中编辑提交使用的post-commit脚本(进入版本库hooks目录)

vim post-commit

追加内容

#如果备份镜像服务器url是svn://196.168.0.2/,可以在命令后面添加&(直接提交影响提交速度)
svnsync sync svn://196.168.0.2/svn/pro_bak --source-username 源svn用户名 --source-password 123456 --sync-username sync --sync-password 123456 --no-auth-cache

别忘了权限

chmod 777 post-commit

本文链接:

https://www.egowan.com/archives/7/

粤ICP备20049596号-1

粤公网安备 44030402003838号