SVN需求:搬迁至异地上云环境,迁移过程将影响用户的时间减小至最小。
windows
SVN常见的几种迁移方案:服务器
第一种:整个SVN库目录打包迁移,原库大小17G,打包加迁移时间预估时间约5小时以上,中断不符合要求。ide
第二种:svnadmin 自带的dump导出load导入方式迁移 :全部版本导出大小超过了磁盘剩余空间(不小于40G),中断不符合要求。svn
第三种:经过svnsync钩子脚本同步方式进行第一次全量同步,迁移时增量同步(预计最快时间十分钟左右)。测试
利用svnsync同步过程:ui
1. 原SVN服务器与目标SVN服务器url
两边开设用于同步的账号(最好账号密码一致)spa
2.目标SVN服务器上:orm
利用SVN自带的钩子脚本更改以下:server
路径: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