2009-09-28 80 views

回答

7

你应该svnadmin的转储你的资料库,处理转储文件和svnadmin的负载在一个空的回购协议处理的文件。没有需要svndumpfilter

svnadmin dump /repos/path > old.dump 

转储文件可以用Sed或其他工具(确保二进制数据不会被破坏)进行处理并更换目录名。例如:

sed -b -e "s#^\(Node.*path\): dir1/dir_old#\1: dir1/dir_new#" old.dump > new.dump 

一旦你处理完转储文件:

svnadmin create /newrepos/path 
svnadmin load /newrepos/path < new.dump 
+2

不像svn dump那样使用像sed这样的简单工具来处理复杂的数据结构。没有人保证你的字符串':dir1'永远不会出现在别的地方。 – reto 2011-10-19 17:36:44

+2

在这种情况下,加载处理后的文件时会出现“Checksum mismatch”错误。请参阅转储文件格式:http://svn.apache.org/repos/asf/subversion/trunk/notes/dump-load-format.txt – fglez 2011-10-21 07:47:07

+0

这太棒了。有用。它是唯一的简单方法如何在svn dump中移动文件夹! – qub1n 2014-04-29 12:22:04

3

我肯定建议使用SED,因为它是不知道的文件格式,你可能很容易使SVN转储文件无法使用。

此外,如果您想要更换一点而不仅仅是一个路径,则需要更新或者直接删除SHA1和MD5校验码。

修改SVN转储并不像开始时那样微不足道。

昨天我有同样的问题,我为此写了一个小程序。我在这里公布给大家使用:

https://github.com/nlmarco/svndumptransformer

它是免费软件,并欢迎您来修改它,如果你想/需要更多的功能。

该程序仅修改文本内容(如果文件 - 例如图像 - 被标记为具有MIME类型“application/octet-stream”,则不会被修改)。而且由于它真的读取和理解SVN转储格式,因此它不会修改属于SVN转储的结构数据 - 与上面的sed命令不同。

对我来说,这个程序目前在重命名产品方面效果很好 - 导致所有路径以及项目配置文件(=> gradle)和几十个Java类被重命名。

我希望这个程序对其他人也有用。

Btw。我知道这个问题很老,但我希望我的答案现在可以帮助其他遇到这个问题的人。

相关问题