VisualSVN Server SVN仓库迁移

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文件到对应新仓库下:

VisualSVN Server SVN仓库迁移_第1张图片

注意命令行操作路径。

之前也尝试过直接拷贝整个仓库目录文件,也可以正常迁移,这种方式简单粗暴。 

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未同步。

 

你可能感兴趣的:(svn)