当前位置: 首页 > 工具软件 > svnsync > 使用案例 >

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

颛孙和颂
2023-12-01

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

 

   

 类似资料: