由于项目需要把svn服务迁移到新服务器上,临时抱佛脚在网上查找了很多方法,官方推荐的方法是通过svnadmin dump命令来从旧服务器导出版本文件,通过svnadmin load命令导入到新服务器。在具体操作时还是遇到了很多问题,在此进行小结。
一、准备工作
1、在新服务器上安装Subversion,默认安装即可。
如果安装的是.msi文件,则系统PATH环境变量里会自动追 “C:\ProgramFiles\Subversion\bin"。
如果是通过.zip文件,就需要自己配置环境变量了。
2、创建SVN版本库
使用svnadmin create 命令。如:
svnadmin create E:\SVN\new
表示在E:\SVN路径下创建了名为new的版本库,可以把conf文件夹用旧库里的替换(因为导入
导出版本文件时,不涉及用户权限等信息,所以手动进行copy,节省配置时间)
二、导出旧服务器上的版本库文件
1、导出时一定记得关闭svn服务。
2、导出命令:
假设旧版本库为D:\SVN\old,目前这个版块库由5000个reversion:
如果想全部导出,这样写:
svnadmin dump D:\SVN\old > old.dump
也可以指定版本号顺便给svn瘦身,这样写:
svnadmin dump D:\SVN\old -r 2000:5000 > old.dump
//表示只导出2000-5000的版本,版本号2000之前的记录都舍弃
3、通过svnadmin dump命令,svn里所有的内容就生成了一个old.dump文件。
三、版本库文件导入到新服务器
1、在新的服务器上使用命令:
svnadmin load E:\SVN\new < old.dump
即可导入,其中old.dump文件是第二步中导出来的文件。
2、通知各个客户端修改配置,将服务器地址替换。
四、遇到的几个问题。
1、使用svnadmin load命令导入的时候发现load到某个reversion就停止了,还不报错。
原因可能是,因为dump文件太大,或者subversion版本不一致。这样会造成新版本库里文件缺
失。解决方法为使用增量备份,分多次导入。
导出时,命令如下:
svnadmin dump D:\SVN\old -r 0:2000 > old1.dump
svnadmin dump D:\SVN\old -r 2001:4000 --incremental > old2.dump
svnadmin dump D:\SVN\old -r 4001:5000 --incremental > old3.dump
上面除了第一行外,--incremental必须写,表示增量导出。
如果不写--incremental,导old1.dump后,再导入old2.dump时,会报类似路径已经存在的错误。
个人理解是,某个文件或者路径在old1.dump文件中已经被导出,如果不使用增量导出,那么
old2.dump中也会导出该文件或者路径。这样,在导入的时候会产生冲突。
导入时,命令如下:
svnadmin load E:\SVN\new < old1.dump
svnadmin load E:\SVN\new < old2.dump
svnadmin load E:\SVN\new < old3.dump
2.在导入eclipse项目的库时,提示svnadmin: E125005: Invalid property valuefound in
dumpstream; consider repairing the source or using--bypass-prop-validation while
loading. svnadmin: E125005: Cannot accept non-LFline endings in 'svn:log' property
具体原因参考http://blog.csdn.net/powerccna/article/details/9949739
这篇博客提供了一种方法,也就是repairing the source;
如果嫌麻烦可采用--bypass-prop-validation也就是忽略这个错误。
导入时,如下:
svnadmin load --bypass-prop-validation E:\SVN\new < old.dump