目录
一、准备环境
1、两台机器操作系统为window系统,网络要能通信。均安装了VisualSVN-Server服务端:一台源库,一台目标备份库(我本人源库ip地址192.168.6.222,目标备份库ip地址192.168.6.253)
2、源库和备份库的访问路径设置为ip访问,访问方式为http(默认为https访问,需增加配置,否则报错。文章末尾有说明)。
配置方式如下:
(1)打开安装好的VisualSVN Server Manager,右击选择Properties。
(2)在nerwork配置中改ip为本机ip,端口自定义配置,并且不勾选HTTPS选项
(3)在svn服务的安装目录下,进入conf文件夹,编辑httpd.conf,将服务名字(ServerName)也改为ip+端口,并保存
(4)重启svn服务
二、备份步骤
1、按照源库上已有的仓库在目标机器上通过VisualSvn Server建立新的仓库,最好名字一样,这样不会乱,除了名字其他全部默认下一步就可以。(例如我的是源库上有一个GBPT,则在目标库上建立一个GBPT)
2、在目标机器上找到文件目录下新建的仓库,进入hooks目录。(我的是D:\Repositories\GBPT\hooks)。在目录下新建pre-revprop-change.bat 文件,全部内容只有一行:exit 0
3、到源库机器上(我的是192.168.6.222),打开命令行窗口,进入svn服务的安装路径(我的是F:\Program Files (x86)\Subversion\bin,如果添加了svn的环境变量,则可直接运行下边命令,不用管目录,否则会提示不是内部命令)
svnsync init http://192.168.6.253:8443/svn/GBPT file:///G:/svn/repository/GBPT
其中 http://192.168.6.253:8443/svn/GBPT 为目标源svn库地址(可从VisualSvn Server中复制得到,如下图),file:///G:/svn/repository/GBPT 为源svn库地址(注意:从文件夹地址栏复制出来是反斜杠,需要修改,否则会报错)
执行后,会出现选择项让你选择,输入p(接受)即可。
回车后,会出现一个Administrator的用户名。然后让你输入密码。这个不用理会,直接回车即可。
然后将向你询问登录目标库和源库的用户名和密码,建议为两个库设置相同的用户名及相同的密码
正确后,显示Copied properties for revision0.(也可能是中文的)
执行后可以再次执行一下,如果提示已同步,那么说明初始化已经完成了。
4、执行同步 (这个操作在源库所在服务器的VisualSvnserver安装目录下的bin目录下cmd执行,要不然会提示svnsync不是内部或者外部命令)。正确执行后,首次是全量备份,如果源服务器中仓库的数据较大,同步时间会较长,耐心等待同步完成。
svnsync sync http://192.168.6.253:8443/svn/GBPT
5、在源库服务器上作同步的仓库hooks中创建post-commit.bat 文件,里边输入
svnsync sync http://192.168.6.253:8443/svn/GBPT --sync-username svn用户名 --sync-password svn密码
这样在本地向源库服务器svn提交数据时,就会自动同步到目标库!
三、可能出现的问题
1、svn用https模式访问,这样会导致报错
这个地方可能会出现一个错误(SSL handshake failed: SSL error:Key usage violation in certificate has been detected.)意思是说握手失败,证书无法检验
解决方案:
我用的是win7 64位的系统。
A.首先修改注册表。输入regedit命令,进入注册表
B.找到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\VisualSVN\VisualSVN Server目录,新建一个"CreateGnuTLSCompatibleCertificate"=dword:00000001
C.打开VisualSVN Server Manager,在操作(Action)下点击Properties->Certificate-> Change certificate,然后下一步下一步就可以了
D.如果还是不行的话,就改变一下登陆的方式,勾选https,再勾选http。然后登陆,就可以解决问题了。
2、从目标版本库获得锁失败
这个问题的原因是在于svnsync的执行过程,因为整个过程是源库读操作,目标库写操作。在执行时,该svnsync程序将锁定被写的目标库,操作完毕之后再解锁。但是由于意外终止了执行过程,于是只进行了锁定却没有进行解锁,导致下次失败。
解决办法:删除版本库属性从0版本开始删除
svn propdel svn:sync-lock --revprop -r 0 http://192.168.6.253:8443/svn/GBPT
执行完后,在重新执行同步命令