公司有一台svn服务器,最近想用另一台svn服务器做个实时备份。从网上查了不少资料,也遇到过各种吐血的问题,在这里记录一下。
1.两台机器(一台源库,一台目标备份库)。
2.通过目标机器上的VisualSvnserver 上直接创建一个新的仓库:test
3.然后在目标目录机器上我的是在E:/Repositories/test/hocks 目录中新建
pre-revprop-change.bat 全部内容只有一行:exit0
4.执行 初始化 (
这个操作在源库所在服务器的VisualSvnserver安装目录下的bin目录下cmd执行,要不然会提示svnsync不是内部或者外部命令
)
cd C:\Program Files (x86)\VisualSVN Server\bin
svnsync init https://192.168.11.164/svn/test file:///C:/Repositories/repos
其中 https://192.168.11.164/svn/test 为目标源svn库地址,file:///C:/Repositories/repos为源svn库地址
执行后,会出现选择项让你选择,输入t(接受)即可。
回车后,会出现一个Administrator的用户名。然后让你输入密码。这个不用理会,直接回车即可。
然后将向你询问登录目标库和源库的用户名和密码,建议为两个库设置相同的用户名及相同的密码(
此处为svn用户名和密码
)。
正确后,显示
Copied properties for revision0.
如不正确:
注意!这个地方可能会出现一个错误(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。然后登陆,就可以解决问题了。
5.执行同步 (
这个操作在源库所在服务器的VisualSvnserver安装目录下的bin目录下cmd执行,要不然会提示svnsync不是内部或者外部命令
)
svnsync sync https://192.168.11.164/svn/test (目标库)
正确执行后,显示
Committed revision 1.
Copied properties for revision 1.
…….
注意!因为本身我源库的svn里有不少的项目,特别大,所以执行的时间比较长,而且中间会出现上面ssl的错误。正常的话继续执行同步就行。但是我是重复同 步了好多次, 始终有一个文件太大,每次都失败,所以我又搜了不少的文档,用了另外的一种方法执行同步。下面就介绍一下这种方法
1.将之前已经初始过的目标库test目录下的hooks(钩子)文件夹,db/revprops/0/0 文件和db/uuid 这三个进行备份
2.将源库的C:/Repositories/repos 文件夹压缩后解压到目标库test目录下,同时将上面的三个文件替换源库的文件
3.执行svnsync sync https://192.168.11.164/svn/test (在源库执行)
4.如果提示版本号对应不上,那么执行下面的命令
svn propset –revprop -r0
svn:sync-last-merged-rev
5515 C:/Repositories/repos 其中5515为你拷贝时的版本号
5.执行svnsync sync https://192.168.11.164/svn/test ,成功!
6.在源库服务器上源库的hooks中创建
post-commit.bat 文件
输入
svnsync sync –non-interactive https://192.168.11.164/svn/test–sync-username svn用户名 –sync-password svn密码 (前面建议过,最好两台服务器svn账户密码一样,这样操作起来方便)
这样在本地向源库服务器svn提交数据时,就会自动同步到目标库!
此处我还遇到两个问题:
1.执行这个bat文件时,每次都询问是否接受证书,解决方法是在先去掉bat文件中 -non-interactive 执行,然后询问的时候选择p,加入缓存,这样下次就不会再询问了。执行完之后再把-non-interactive 加上
2.这个问题是最坑爹的。我在源库里是可以执行同步 的。但是在本地提交代码的时候会出现证书无法检验!查了很多文档都没有解决。最后我是在源库服务器上增加了一个定时任务去执行这个bat文件,这样就不是实时同步了,而是定时同步,不过效果差不多
大家如果有解决第2个问题的,欢迎告知我!