plan-A:
以下命令需要直接在服务器上操作:
1、转存test_repo仓库
svnadmin dump test_repo > test_repo.dump
2、筛选指定子目录
svndumpfilter --drop-all-empty-revs include test_dir <test_repo.dump> test_repo_test_dir.dump
--drop-all-empty-revs 从最终的转储文件中删除所有的空版本号(与本目录无关的版号)
3、加载到新库
-
新建仓库 new_repo
-
svnadmin load new_repo < test_repo_test_dir.dump
-
新库最终目录结构:
new_repo
test_dir
a
b
...
plan-B:
无需在服务器上操作,但需要账号认证和对应库权限:
1、转存指定目录
svnrdump dump http://192.168.20.254/newsvn/test_repo/test_dir > test_repo_test_dir.dump
也可使用file协议:
svnrdump dump file:///svn/svn-repo/test_repo/test_dir > test_repo_test_dir.dump
2、筛选指定子目录
svndumpfilter --drop-all-empty-revs include test_dir <test_repo_test_dir.dump> test_repo_test_dir_clean.dump
3、加载到新库
-
新建仓库 new_repo
-
svnrdump load http://192.168.20.254/newsvn/new_repo < test_repo_test_dir_clean.dump。也可以使用svnadmin load命令
-
新库最终目录结构:
new_repo
test_dir
a
b
...
实际操作效果:
操作方式 | 账号认证 | 操作范围 | 转存文件大小 | |
svnadmin dump | 登录服务器操作 | 不需要 | 整个库 | 大 |
svnrdump dump | 本地操作 | 需要 | 可针对子目录 | 相对较小 |
以ops_develop仓库为例(副本大小1.6G):
svnadmin 转存文件大小为3.2G
svnrdump转存文件大小为3.0G。针对ops_develop/svnMg目录转存文件大小为21M
svnadmin dump test-log -r 0:9 > 0-9.dump
svnadmin dump test-log -r 10:20 --incremental > 10-20.dump
改新库uuid与老库一致,执行
svn relocate https://xxx/newsvn/test_repo/svnMg http://yyy/newsvn/new_repo/svnMg
可以继续使用老的工作副本工作