SVN 仓库目录管理
一个SVN目录仓库用的时间长了之后,就会发现有的目录可以单独列出来开个单个的仓库了,这时候希望把它们拿出来,并保留改动日志。这个时候就可以用`svndumpfilter`命令来处理这个问题。
第一步,把整个svn库dump出来
sudo svnadmin dump repo1 > repo1_backup.svn
第二步,从dump中提取需要的目录,另外独立成库
sudo svndumpfilter include folder1 folder2 folder3 < repo1_backup.svn > repo1_goup1_backup.svn
第三步,从dump中删除不需要的目录
sudo svndumpfilter exclude folder1 folder2 folder3 < repo1_backup.svn > repo1_backup_filter.svn
经过上面三步处理后,则repo1库分为2个部分:repo1_group1_backup.svn中包含的是原repo1库中的 folder1, folder2, folder3 目录内容;而repo1_backup_filter.svn则是repo1中不包含folder1, folder2, folder3三个目录的内容。接下来要做的就是分别还原这两个dump仓库即可。
还原 repo1_group1_backup.svn
# create svn repo first 1) svnadmin create repo1_group1 2) sudo chown -R daemon ./repo1_group1 3) sudo chmod -R 777 ./repo1_group1 # restore svn repo sudo svnadmin load repo1_group1 < repo1_group1_backup.svn
# restore svn repo into a sub folder
sudo svnadmin load --parent-dir trunk/repo_v1 repo1_group1 < repo1_group1_backup.svn
还原 repo1_backup_filter.svn
# create svn repo first 1) svnadmin create repo1_new 2) sudo chown -R daemon ./repo1_new 3) sudo chmod -R 777 ./repo1_new # restore svn repo svnadmin load repo1_new < repo1_backup_filter.svn
到此,svn仓库就分开了! 对于客户端来说,`Relocate`下svn的新地址就可以了。值得注意的是,用这种方式来管理svn目录时,被管理的目录不能有重命名和移动!否则svndumpfilter会报错而失败!