yuanqiao 发表于 2018-6-22 08:31:56

windows下SVN版本库迁移小结

  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 13713svn://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
页: [1]
查看完整版本: windows下SVN版本库迁移小结