svn – 将部分Subversion存储库迁移到新服务器并进行重新处理

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

http:// server1 / svn / repo1 / path1 / path2 / path3 – > HTTP://服务器2 / 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

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

有关如何进行的任何建议?

最佳答案 我相当容易地复制了你的问题,你对你的分析是正确的.问题是创建基本文件夹的修订版.

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

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

我手动完成,这很简单:只需查找具有空节点路径的行:并从之前的“版本号:”删除到下一个“PROPS-END”.一些python / awk / perl可以做到(我没试过).

如果你在这个文件夹中没有特殊的东西(比如属性随着时间的推移而变化),你应该只有一个出现.

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

请注意,我不知道有哪种工具可以帮到您.

点赞