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
转载于:https://blog.51cto.com/iceeggplant/1595591