拆分大型VisualSVN仓库遇svnadmin加载失败,求解决方法
解决SVN仓库拆分时加载dump失败的问题
问题原因
你遇到的加载错误是因为过滤后的dump文件中仍残留了对已被排除路径(如trunk/proj2/file)的操作记录,这些路径在新仓库中不存在,导致加载时触发文件未找到的错误。这通常是因为svndumpfilter在过滤时,未彻底清理同时涉及目标路径和无关路径的修订记录。
解决方案
步骤1:重新生成并清理过滤后的dump文件
执行过滤命令时,添加参数清理无效修订,并确保仅保留proj1相关路径:
svndumpfilter include trunk/proj1 --drop-empty-revs --renumber-revs < common.dump > proj1_filtered.dump
--drop-empty-revs:移除过滤后无有效内容的修订--renumber-revs:对修订重新编号,避免出现断号
步骤2:调整dump文件中的路径结构
将原仓库中trunk/proj1的路径替换为新仓库的根trunk(匹配你的目标结构):
如果你使用Windows PowerShell,执行:
(Get-Content proj1_filtered.dump) -replace 'trunk/proj1', 'trunk' | Set-Content proj1_final.dump
如果你使用CMD或Linux终端,可使用sed命令:
sed 's/trunk\/proj1/trunk/g' proj1_filtered.dump > proj1_final.dump
步骤3:重新加载dump到新仓库
先创建空仓库,再加载处理后的dump文件:
svnadmin create proj1 svnadmin load --ignore-uuid proj1 < proj1_final.dump
进阶排查(若仍失败)
如果加载仍报错,手动检查proj1_final.dump文件:
- 用文本编辑器打开dump文件,搜索错误提示中的路径(如
trunk/proj2) - 找到对应修订块中涉及该路径的行(如
Node-path: trunk/proj2/file、Node-action: edit等),直接删除这些行 - 确保dump文件格式完整(每个修订块的结构不被破坏),再重新加载
替代方案:直接导出特定路径的dump
如果上述方法仍有问题,可直接从原仓库导出proj1路径的dump,避免交叉路径干扰:
svnadmin dump D:\Repositories\common --include trunk/proj1 > proj1_dump.dump
之后再执行步骤2的路径替换,即可加载到新仓库。
内容的提问来源于stack exchange,提问作者Stewart
相关产品推荐
相关产品推荐

