将 Subversion 存储库的一部分迁移到新服务器并重新路径

Posted

技术标签:

【中文标题】将 Subversion 存储库的一部分迁移到新服务器并重新路径【英文标题】:Migrating part of Subversion repository to new server and repathing 【发布时间】:2011-03-23 02:38:36 【问题描述】:

我正在尝试将部分 Subversion 存储库迁移到新的 Subversion 服务器。

http://server1/svn/repo1/path1/path2/path3 -> http://server2/svn/repo2/path3

我通过以下方式创建了一个完整的转储:

svnadmin dump repo1 > repo1.dump

通过以下方式过滤转储:

svndumpfilter include /path1/path2 --drop-empty-revs < repo1.dump > repo1_filtered.dump

通过 Cygwin sed,我正在替换 /path1/path2:

sed -e 's,^Node-path: WM/BI,Node-path: ,' < repo1_filtered.dump > repo1_fixed.dump

在尝试将转储导入新的/空存储库时,我收到以下错误:

<<< Started new transaction, based on original revision 32
 * adding path :  ...svnadmin: File already exists: filesystem 'bi\db', transaction '0-2', path ''

我认为问题在于 svndumpfilter 包含路径 /path1/path2。真的,我只想要/path1/path2 的孩子。运行 sed 后,在 repo1_fixed.dump 的开头附近,我发现:

2010-03-10T15:56*:59.595747Z
PROPS-END

Node-path:
Node-action: add
Node-kind: dir
Prop-content-length: 10
Content-length: 10

PROPS-END

我的猜测是空节点路径是问题的真正原因。

关于我应该如何进行的任何建议?

【问题讨论】:

【参考方案1】:

我很容易地重现了你的问题,而且你对你的分析是真实的。问题是创建基础文件夹的修订版。

如果您从转储中删除此事务,它会正确导入

 sed -e "s,^Node-path: rep1/rep3,Node-path: ," < temp_filtered.dump > temp_hacke.txt

我是手动完成的,这相当简单:只需查找具有空节点路径的行:并从上一个“修订号:”删除到下一个“PROPS-END”。一些 python/awk/perl 可以做到(我没有尝试)。

如果您在此文件夹中没有特殊内容(例如随时间变化的属性),则应该只出现一次。

另一种解决方案是将存储库导入单个文件夹而不是子树(在这种情况下,只需将 sed 行更改为 ,Node-path : newPath)

请注意,我不知道有什么工具可以为您做到这一点。

【讨论】:

以上是关于将 Subversion 存储库的一部分迁移到新服务器并重新路径的主要内容,如果未能解决你的问题,请参考以下文章

svn 迁移但转储存储库的一部分

如何克隆 SVN 存储库的一部分?

移动了存储库。我是否使用SVN交换机,SVN重定位或其他所有内容

列出具有特定属性和值的 subversion 存储库中的所有路径

svndumpfilter - 不支持的转储文件版本

如何通过 Web 视图浏览 Subversion 存储库的旧版本?