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