SVN需求:搬迁至异地上云环境,迁移过程将影响用户的时间减少至最小。

 

SVN常见的几种迁移方案:

第一种:整个SVN库目录打包迁移,原库大小17G,打包加迁移时间预估时间约5小时以上,中断不符合要求。

第二种:svnadmin 自带的dump导出load导入方式迁移 :所有版本导出大小超过了磁盘剩余空间(不小于40G),中断不符合要求。

第三种:通过svnsync钩子脚本同步方式进行第一次全量同步,迁移时增量同步(预计最快时间十分钟左右)。

利用svnsync同步过程:

1. 原SVN服务器与目标SVN服务器

两边开设用于同步的帐号(最好帐号密码一致)

 

2.目标SVN服务器上:

利用SVN自带的钩子脚本更改如下:

路径:D:\svn_repository\hooks\pre-revprop-change.tmpl 

将最后三行删除改成exit 0     如下:

 REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"

#if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi

#echo "Changing revision properties other than svn:log is prohibited" >&2
exit 0


新建pre-revprop-change.bat文件,将pre-revprop-change的最后两行拷过来即可或者直接输入exit 0。

exit 0

重启SVN服务。


接下来进行同步前的初始化,格式 svnsync init  目标库路径  源库路径

svnsync init svn://127.0.0.1/ svn://61.174.30.194/

如报错:Repository has not been enabled to accept revision propchanges;ask the administrator to create a pre-revprop-change hook .
pre-revprop-change.bat检查此脚本文件是否存在,如存在检查文件格式是否正确。我这边在windows server2008下通过文本文档创建了pre-revprop-change.bat文件后实际上通过属性查看它并不是一个可执行文件,而是一个txt文件类型。在此问题排查上浪费了很多时间,一直初始化不成功。从自己win7机器上新建可执行文件格式pre-revprop-change.bat再传至服务端测试OK。

开始同步: 

svnsync sync svn://127.0.0.1/


3.SVN迁移后更改域名指向测试svn update时报错:

Repository UUID '60f49f27-8aaa-164f-9098-701db8904462' doesn't match expected

原因为:

原来Repository创建者的UUID是前者,而现在所操作的是后者的UUID。因此,目前的解决办法是:使用相关命令更新Repository的UUID。

查看原SVN的UUID:

D:\svnrepository>svnlook uuid D:\svnrepository 

1024ede3-db12-4f4b-a8b4-28f755881912

查看新SVN的UUID:

C:\Users\Administrator>svnlook uuid D:\svn_repository       

60f49f27-8aaa-164f-9098-701db8904462

将新SVN的UUID更改成跟原SVN一样:

C:\Users\Administrator>svnadmin setuuid D:\svn_repository 1024ede3-db12-4f4b-a8b 4-28f755881912


再次svn update测试OK。


同步后查看两端的版本号是否一致svnlook youngest D:\svnrepository 


svnsync: Destination HEAD (13713) is not the last merged revision (13711); have

you committed to the destination without using svnsync?

由于目标库在测试时新增了版本库,所以导致原库同步过来出错。

解决方案:

C:\Users\Administrator>svn propset --revprop -r0 svn:sync-last-merged-revision 13713 svn://127.0.0.1/ 

property 'svn:sync-last-merged-revision' set on repository revision 0

C:\Users\Administrator>svn propset --revprop -r0 svn:sync-last-merged-rev 13713  svn://127.0.0.1/ 

property 'svn:sync-last-merged-rev' set on repository revision 0

C:\Users\Administrator>svnsync sync svn://127.0.0.1/

再次查看,源库与目标库版本已经一致:

C:\Users\Administrator>svn proplist -v --revprop -r0 svn://127.0.0.1/

Unversioned properties on revision 0:

  svn:sync-from-uuid

    1024ede3-db12-4f4b-a8b4-28f755881912

  svn:sync-last-merged-rev

    13713

  svn:sync-last-merged-revision

    13713

  svn:date

    2009-08-19T02:21:19.281250Z

  svn:sync-from-url

    svn://61.x.x.x