说在最前:同步之前一定要先备份好所有数据。经过尝试,将svn的持久化文件(下文中的 /home/svn/repos)拷贝到其他服务器上,可以直接启动并使用。
从服务器
1.安装从svn从服务,已经安装则略过。
- yum install subversion(centos系统)
2.建立版本库目录
- mkdir -p /home/svn/repos
- svnadmin create /home/svn/repos
3.配置hook
- cd /home/svn/repos/hooks
- cp pre-revprop-change.tmpl pre_revprop-change
- 编辑 pre_revprop-change,删除pre_revprop-change中所有未注释部分,在最后添加exit 0
- chmod +x pre_revprop-change
4.配置svnserve.conf
- [general]下增加以下配置
anoe-access = none ###禁止匿名用户访问
anon-access = none ###禁止未鉴权用户访问 (我的理解是用户密码正确,但是没有路径权限的用户)
auth-access = write ###打开鉴权用户所有权限
注:有三种权限,none,read,write。
password-db = passwd ###使用默认的密码文件
authz-db = authz ### 使用默认的鉴权文件
5.启动svn
/usr/bin/svnserve -d -r /home/svn/repos
注: 后面加 [--listen-port 3691] 指定端口,默认3690
主服务器
1.执行同步初始化
- svnsync init 目标库 源库 (注意顺序)
例如: svnsync init svn://192.168.10.2:3691/ svn://192.168.10.1:3691/
2.执行同步
- svnsync sync 目标库
例如: svnsync sync svn://192.168.10.2:3691/
注:如果库比较大,应该转到后台操作,防止ssh工具断开导致同步失败
nohup svnsync sync svn://192.168.10.2:3691/ &
3.配置hook,主svn每次提交时,后台自动提交到从svn。
- cd /home/svn/repos/hooks
- cp post-commit.tmpl post-commit
- 编辑post-commit,删除所有未注释部分,最后一行添加
svnsync sync --non-interactive svn://192.168.10.2:3691/ --source-username 'user' --source-password 'passwd' --sync-username 'user' --sync-password 'passwd'
注:--source-username 源用户 ,--sync-username 目标用户 。密码同理
- 执行 chmod +x post-commit
注:如果从svn异常,主svn提交时虽然会报错,但是也会提交成功