最近公司服务器需要做一次整体规划和服务切分,所以必不可免的需要去迁移一些服务,比如数据库、svn、maven等等都需要迁移。今天,记录一下这次迁移中对于svn迁移的具体流程和迁移后的操作。
一、迁移前准备
我们公司需要迁移的svn服务器IP分别为:
源服务器:192.168.10.5
新服务器:192.168.10.109
1、查看源服务器上的SVN版本,在源服务器执行:
svn --version

2、在新服务器上安装和源服务器svn版本一致的svn包,由图片可见,我们源服务器版本为v1.7.14,所以,我在新服务器上安装了相同版本的svn包(为了操作方便,尽量保持和源服务器的一致性,比如目录啊等等,)
3、建议前期让所有开发人员向源svn服务器提交好最新的项目版本,并修改源服务器所有svn用户为只读权限或者停止SVN服务器。
4、svn安装方法很简单,可以直接是用yum或者去官网下载package安装,安装完成之后,迁移前的前期准备工作就算结束了。
二、迁移SVN
方法我们讨论了两种,最后选择的是第二种方法,分别为:
1、类似于mysql导出sql文件,在新库中运行sql文件,SVN可以使用dump命令导出源服务器SVN所有的代码库,然后load导入到新服务器SVN。
2、使用svnsync在线直接同步源机器代码库到新服务器。
鉴于公司SVN上近50G左右的文件,如果使用第一种,着实太慢,故我们使用的svnsync方式进行操作,这里也同时记录一下两种方式的操作流程。
1、使用svnadmin dump迁移SVN库
1、执行命令dump源机器所有SVN代码库到磁盘目录:(时间可能很长)
svnadmin dump svn库目录 > xxxx.dump (dump文件)
2、使用scp或者其他文件传输工具,将xxxx.dump文件传输到新服务器。
scp -r xxxx.dump xxx@192.168.10.169:/data/svn/
3、新服务器SVN建立代码仓库
svnadmin create /data/svn/tack
4、执行导入,将dump文件导入到新代码库中
svnadmin load /data/svn/tack < xxxx.dump
5、启动新服务器SVN
svnserve -d -r /data/svn/tack
ps:默认为3690端口启动,启动其他端口使用:
svnserve --listen-port 8899 -d -r /data/svn/tack
2、使用scnsync迁移SVN库(推荐)
1、 新服务器SVN建立代码仓库
svnadmin create /data/svn/tack

2、修改仓库目录下/hooks/pre-revprop-change文件,先复制一份pre-revprop-change.tmpl并重命名 pre-revprop-change
cp pre-revprop-change.tmpl pre-revprop-change
赋予文件执行权限
chmod 777 pre-revprop-change
修改文件最后一行代码为 exit 0

3、同步初始化
svnsync init file:///data/svn/tack svn://192.168.10.5/jiadun
执行后需要分别输入新服务器的登录密码和源服务器具有仓库所有权限的SVN账号密码。
4、开始同步,执行后视库大小,时间不定,同步的时候是按版本同步,会打印正在同步的版本号,直达同步结束,我们公司大概80G同步了6个多小时。
svnsync sync file:///data/svn/tack
5、同步完成后,同一一样启动SVN服务即可。
三、注意事项
1、如何保证新服务器SVN账号密码和源服务器一致?

更新新服务器代码库conf下的配置文件,将源服务器上的authz和passwd等配置修改到新服务器重启即可。
2、切换到新SVN库后代码提交失败?
源仓库db目录下的UUID复制到新SVN服务器仓库下同样位置替换,重启SVN服务器。
其他文章:
SVN迁移之后,IDEA等开发工具如何配置?