本次演示环境:
os:Centos7.9,svn版本:svn, version 1.10.7 (r1886195)
源svn:svn://172.30.30.222/demo
目标svn:svn://172.30.30.221/demo
1、svn服务配置
源和目标服务器都需要修改conf/svnserve.conf,必须要打开如下配置:
[root@svn-222 demo]# grep -v ^# conf/svnserve.conf | grep -v "^$"
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /data/svn/demo
尤其是anon-access =这个地方,一定要打开,否则他只会同步版本号而不同步文件
用户配置:源服务器用户只需要只读用户,目标服务器需要有读写权限。源和目标的用户可以不相同
sync同步必须要用到pre-revprop-change,默认是没有这个文件,但提供了模版文件
[root@svn-221 hooks]# pwd
/data/svn-backup/demo/hooks
[root@svn-221 hooks]# ls
post-commit.tmpl post-revprop-change.tmpl pre-commit.tmpl pre-revprop-change.tmpl start-commit.tmpl
post-lock.tmpl post-unlock.tmpl pre-lock.tmpl pre-unlock.tmpl
[root@svn-221 hooks]# cp pre-revprop-change.tmpl pre-revprop-change
将pre-revprop-change最后一行的 ‘exit 1’ 修改为 ‘exit 0’ 即可
3、初始化目标库
[root@svn-221 ~]# svnsync init file:///data/svn-backup/demo svn://172.30.30.222:/demo --source-username sync --source-password 123456 --sync-username sync --sync-password 123456
# 出现下面的信息说明初始化成功
Copied properties for revision 0.
[root@svn-221 ~]#
注意这里的svnsync sync 用法:
svnsync init 目标svn 源svn –source-username 源用户 –source-password 源密码 –sync-username 目标用户 –sync-password 目标密码
其中目标svn可以是svn的url地址,也可以是本地路径,比如我这里使用的是demo库的本地路径,也可以写成svn://172.30.30.221:/demo
4、同步
可以在目标库执行,也可以在源服务器执行,这里以目标库执行为例
[root@svn-221 ~]# svnsync sync file:///data/svn-backup/demo
Transmitting file data .
Committed revision 1.
Copied properties for revision 1.
Transmitting file data .
Committed revision 2.
Copied properties for revision 2.
Transmitting file data .
Committed revision 3.
Copied properties for revision 3.
[root@svn-221 ~]#
# 出现类似上面的信息说明同步正常
也可以使用svn的url地址
5、自动触发同步
需求场景:当源服务器有更新时自动将更新同步到目标服务器
5.1、修改目标服务器的pre-revprop-change
文件位置可以看上面的第二步
# 在文件的最后一行之前添加下面的判断,意思是允许sync这个用户的更新,sync用户是目标服务器的用户
if [ "$USER" = "sync" ]; then
exit 0
fi
# 这段代码一定要加在最后一行 'exit 0' 之前
5.2、修改源服务器的post-commit
post-commit这个文件默认也是没有,位置也是在hooks目录,可以使用post-commit.tmpl模版来创建
在post-commit最后添加一行
svnsync sync svn://172.30.30.221:/demo --source-username sync --source-password 123456 --sync-username sync --sync-password 123456 --no-auth-cache