windows系统上SVN服务端仓库迁移:
1、仓库迁移(命令行)
导出仓库:
svnrdump dump https://192.168.2.22/svn/PayCode > PayCode.dump
指定版本:
svnrdump dump -r 3621 https://192.168.2.22/svn/PayCode > PayCode.dump
svnrdump dump -r 3600:3621 https://192.168.2.22/svn/PayCode > PayCode.dump
指定账号密码:
svnrdump dump https://192.168.2.22/svn/PayCode > PayCode.dump --username xxx --password xxx
创建新仓库:
svnadmin create PayCode
导入仓库:
svnadmin load PayCode < PayCode.dump
1.1、 仓库权限迁移:
目前需要手动拷贝VisualSVN-SvnAuthz.ini文件到对应新仓库下:
注意命令行操作路径。
之前也尝试过直接拷贝整个仓库目录文件,也可以正常迁移,这种方式简单粗暴。
2、账号密码、分组迁移
直接覆盖 Repositories 目录下 htpasswd、groups.conf 两个文件即可。
批量迁移bat脚本:
@echo off
if not exist svn-reps.txt (
echo svn-reps.txt file not exist
goto end
)
for /f %%i in ('type svn-reps.txt') do (
echo https://192.168.2.22/svn/%%i
svnrdump dump https://192.168.2.22/svn/%%i > %%i.dump
if errorlevel 0 (
echo ok1 %%i
svnadmin create %%i
if errorlevel 0 (
svnadmin load %%i < %%i.dump
if errorlevel 0 (
echo ok3 %%i
) else echo error3 %%i
) else echo error2 %%i
) else echo error1 %%i
)
:end
echo Press any key to continue
pause
批量备份VisualSVN-SvnAuthz.ini权限文件bat脚本:
@echo off
set copyToDir=C:\Users\Administrator\Desktop\repsqxbak
for /d %%i in (*) do (
echo %%i
md %copyToDir%\%%i\conf
copy %%i\conf\VisualSVN-SvnAuthz.ini %copyToDir%\%%i\conf
)
:end
echo Press any key to continue
pause
直接把脚本放到Repositories目录下执行即可,执行完之后需要手动删除所有的*.dump 文件。
svn-reps.txt 为老仓库导出的所有仓库名称。
老仓库权限文件备份后,可以直接手动批量覆盖到新仓库。
20200801
客户端SVN仓库地址切换:
svn relocate https://192.168.2.222/svn/PayCode/
仓库uuid不一致问题处理:
服务端重新设置仓库uuid,和老仓库uuid保持一致:
svnlook uuid E:\Repositories\PayCode
svnadmin setuuid E:\Repositories\PayCode a6835852-ec45-0344-aa83-3cc38ed4f3dd
特别注意:
如果服务器上同时安装了SVN客户端TortoiseSVN,环境变量中的命令可能不是服务端VisualSVN Server的,可以使用全路径执行命令或者命令行定位到VisualSVN Server\bin目录下执行命令!
批量备份仓库uuid脚本:
@echo off
if not exist svn-reps.txt (
echo svn-reps.txt file not exist
goto end
)
rem 旧仓库目录
set repsPath=E:\Repositories
rem 新仓库目录
set repsNewPath=E:\Repositories
for /f %%i in ('type svn-reps.txt') do (
for /f %%u in ('svnlook uuid %repsPath%\%%i') do (
rem 直接保存设置uuid完整命令!
echo svnadmin setuuid %repsNewPath%\%%i %%u >>svn-reps-uuid.txt
if errorlevel 0 (
echo OK %%i %%u
) else (
echo ER %%i %%u
)
)
)
:end
echo Press any key to continue
pause
批量设置uuid脚本(基于上一个uuid备份脚本,备份的就是设置uuid的完整命令):
@echo off
if not exist svn-reps-uuid.txt (
echo svn-reps-uuid.txt file not exist
goto end
)
for /f "delims=""" %%i in ('type svn-reps-uuid.txt') do (
echo %%i
%%i
if errorlevel 0 (
echo OK %%i
) else (
echo ER %%i
)
)
:end
echo Press any key to continue
pause
20200803
这两天帮公司迁移SVN仓库,好几年的项目代码都在上面,仓库文件夹总大小200G左右。正真迁移的数据量远大于200G,所以要准备好足够大的硬盘。
VisualSVN Server 估计还是好几年前的版本,新版的浏览器客户端比较好看,功能也更多了。
迁移过程还是比较顺利的,按上面写的脚本来就行。迁移过程中,最大的问题还是个别仓库太大,导致远程拉备份dump文件要花费大量时间。后面迁移可能要注意下,优先迁移最近活跃的仓库,有的仓库几年没更新,早一天晚一天迁移影响不大。如果仓库太大,可以考虑按版本迁移,先把最近的版本迁移过来,不影响正常使用。
还有就是可以先拉仓库备份,拉完之后再进行还原操作,如果你的服务器配置很高,还原很快的话那就无所谓了。
仓库太多,服务器带宽够高的话,可以多开几个脚本进程,同时拉多个仓库的备份。
备份的dump文件可能远比实际仓库文件夹大很多!
我在新服务器还原dump时并未出现uuid不一致问题,使用的版本是:VisualSVN-Server-4.2.2-x64.msi,出现uuid不一致可能是因为工具版本问题。
仓库迁移完之后,如果不想立马更换仓库地址,可以在老服务器临时配个nginx,加个反向代理。我这边因为个别仓库太大,迁移了周日一整天,还有三个大仓库没拉好,无奈只能先走代理,迁移完的走新仓库,没迁移好的还走老仓库。
后面单个仓库尽量不能搞太大,否则迁移备份太麻烦!!!
迁移过程中还发现两个神器:spacesniffer 和 wiztree, 可以方便查看文件夹大小分布。
20200804
Hooks未同步。