SVN版本库的迁移

1:
经过SVN搭建,权限配置和强制写日志的工作之后,今天的任务是把原来其它分散的各个版本库统一迁移到新的版本库,集中统一管理。要求不改变原有的版本库的内容和版本号。

2:
要实现版本库的无缝迁移,必须通过以下3个步骤:
①导出旧的版本库
②导入新的版本库
③通知客户端切换版本库分支

首先来看第一步:导出旧的版本库。我们知道SVN提供了check out命令和export命令签出,导出版本库中的内容。对于版本库内容比较少的情况这种方法可以采用。但是如果版本库中内容比较多,那么这种方法就显得 很笨重了,而且还涉及到版本号改变的问题。所以首先摈弃这种做法。

我们知道Oracle提供了export/import命令来将数据库导出成一个二进制文件,然后导入。同样的SVN也提供了一对命令:dump和 load。不同的是这两个命令导出的是文本内容(肉眼可以读懂)。而且还有一次性导出和增量导出,单版本导出与多版本导出等多种选择操作,就是这个了。

其次我们来看“通知客户端切换版本库分支”。在我们完成服务器端的版本迁移之后,必须通知客户端运行切换分支的命令,否则客户端的提交还是提交到旧的版本库去。SVN也为我们准备了这样的命令:svn switch。

3:
首先我们来看一下SVN的dump和load命令

①svnadmin dump命令语法
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]

svnadmin dump命令用于导出整个Repository或Repository下的某个范围的修订版本。REPOS_PATH是版本库的路径,[-r LOWER[:UPPER]]用于指定导出的修订版本范围,由参数-r和两个用:号隔开阿拉伯数字组成。例如:-r 0:50表示导出才版本0到版本50之间的所有修订版,-r是revision的缩写。

而另一个关键参数是--incremental。它使用增量方式来导出版本,即每次都只导出自上一个版本以来的修改。这样的好处是第一:可以把一个大的文 件切分成若干个小的文件。第二:在版本库已经存在的情况下,我们只需要每次导出修改的部分,不需要每次都导出整个版本库的内容。甚至可以通过hook脚本 每天晚上自动将当天的修改dump出来做备份用。

②svnadmin load命令语法
svnadmin load REPOS_PATH

svnadmin load命令用于从标准输入流/其它流中导入版本库,REPOS_PATH是要导入的目标版本库。

③dump和load的输出/入重定向
svnadmin dump myrepos > dumpfile

svnadmin load newrepos < dumpfile

默认情况下dump和load命令分别输出到默认输出设备(屏幕)和从默认输入设备(键盘)导入。但我们也可以把输出流/输入流重定向。例如上面的第一个 命令,使用重定向符>把屏幕的输出定向当前目录下的dumpfile,而第二个命令从当前目录下的dumpfile文件导入。

上面的命令使用起来已经很方便了,那么还有没有更加方便的用法呢?当然有!就是使用管道命令把两个命令合二为一。
svnadmin dump myrepos  | svnadmin load newrepos

猜你喜欢

转载自l454822901.iteye.com/blog/1604058