svn(svnsync)实时同步备份及问题解答

  • Post author:
  • Post category:其他


公司有一台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个问题的,欢迎告知我!





版权声明:本文为aaawyh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。