重新仔细 阅读SVN Book中的Filtering Repository History ,特别注意警告
您忘记了,该转储文件包含文件内转储节点中包含的所有相对路径,并且--parent-dir
仅更改转储节点中提到的起始安装点,而不是相对位置
您的每个转储文件都将创建一个有效的存储库,但将完全保留原始存储库中的路径。这意味着即使您将拥有一个专门用于 calc 项目的存储库,该存储库仍然会有一个名为 calc 的顶级目录。如果您希望您的主干、标签和分支目录位于存储库的根目录中,您可能希望编辑转储文件,调整Node-path
和Node-copyfrom-path
标头,以便它们不再具有第一个 calc/ 路径组件
根据我自己的经验,我更喜欢始终使用 过滤转储svndumpfilter include
,即使转储是使用 svnrdump 创建的,仅用于 repo-tree 的一部分:它产生较少 (0) 错误或svnadmin load
. 例如,将远程移动REPO/trunk/lib
到本地存储库上的同一路径(默认存储库树已经存在)对我来说意味着
>svnrdump dump URL/trunk/lib > full.dmp
>svndumpfilter include --pattern "*lib*" --drop-empty-revs --renumber-revs < full.dmp > filtered3.dmp
(include --pattern
只是因为平原include lib
产生了更差的结果,但它可能是与手有关的唯一问题)
这个过滤后的转储可以很容易地加载
>svnadmin load Repo --parent-dir / < filtered3.dmp
<<< Started new transaction, based on original revision 1
* adding path : trunk/lib ... done.
* adding path : trunk/lib/lib01.txt ... done.
------- Committed new rev 2 (loaded from original rev 1) >>>
而“愚蠢”的转储
>svnrdump dump URL/trunk/lib > dump.dmp
尝试加载时出错
>svnadmin load repo2 < dump.dmp
<<< Started new transaction, based on original revision 1
* adding path : trunk ...svnadmin: E160020: File already exists: filesystem 'bcf62090-928b-9f49-8008-455204e6d81f', transaction '1-1', path '/trunk'