由于公司发展的要求,需要把之前分散在好几个svn库中代码,统一迁移到一个新的svn库中。场景为在一台服务器中有两个独立的svn库(A、B),其中在A库中有a1、a2、a3、a4项目,B库中b1、b2项目,最后移植的结果是需要另外一台服务器中建立C库,目录结果是
project/
a1/
a2/
a3/
b1/
b2/
在A库中的项目a4不需要移植过去。这两台服务器操作系统都是freeBSD。
具体操作步骤如下:
1、创建一个新的svn库(具体怎么创建可以参见相关svn操作手册)
2、在新的svn库中构建目录结构,创建project目录
3、然后把A库中的svn数据dump出来,具体命令为 svnadmin dump 【A库的svn路劲】 > 【保存的文件】(这里命名为A.svn)
4、由于这dump的文件中包含项目a4,但是要求不需要把项目a4导入新的svn库中,所以,需要对dump文件进行删选。具体命令为:
cat A.svn | svndumpfilter include a1 a2 a3 > A-filter.svn
5、把A-filter.svn拷贝到目标服务器中,执行导入操作svnadmin load 【新创建的svn库路劲】 --parent-dir project < A-filter.svn
6、对B库重复步骤2到5的操作,其中,第4步不需要过滤操作。
在整个操作过程中,需要注意
1)、需要先在目标库中创建好目录结构
2)、在创建新库的时候,需要把conf/svnserve.conf中的配置项打开,比如
authz-db = authz
password-db = passwd
anon-access = none
auth-access = write
3)、在导入数据的时候要注意使用参数--parent-dir