是否可以通过svndumpfilter更改存储库中的目录名称?

时间:2009-09-28 10:55:51

标签: svn svndumpfilter

是否可以重命名svn存储库中的目录。

不创建将重命名此目录的新修订版。

我想从第一个版本开始更改此目录的名称。

据我所知,svndumpfilter实用程序可以用于此目的。

这是对的吗?

有没有人可以给我一些小例子怎么做?

4 个答案:

答案 0 :(得分:7)

您应该 svnadmin dump 您的存储库,处理转储文件并 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

答案 1 :(得分:5)

我当然建议使用sed,因为它不知道文件格式,您可能很容易使SVN转储文件无法使用。

此外,如果您想要替换的不仅仅是路径,还需要更新或简单地删除SHA1和MD5校验和。

修改SVN转储实际上并不像最初看起来那么简单。

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

https://github.com/nlmarco/svndumptransformer

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

该程序仅修改文本内容(如果文件 - 例如图像 - 被标记为具有mime类型&#34; application / octet-stream&#34;则不修改它)。由于它确实读取并理解了SVN转储格式,因此它不会修改属于SVN转储的结构数据 - 与上面的sed命令不同。

对我来说,这个程序目前在重命名产品时运行良好 - 导致所有路径以及项目配置文件(=&gt; gradle)和几十个Java类被重命名。

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

顺便说一下。我知道这个问题很老了,但我希望我的答案可以帮助其他遇到这个问题的人。

答案 2 :(得分:0)

https://metacpan.org/pod/release/SALVA/SVN-DumpReloc-0.02/bin/svn-dump-reloc看起来很有趣,但没有(如它所说)检查丢失或重复的目录。要写一些自定义的东西......

答案 3 :(得分:0)

如果您的最终目标是将所有内容导入git,但是您想先清理所有内容,那么svn-all-fast-export(不幸的是,不是唯一的也称为svn2git)创建了到目前为止,对我来说是最好的体验(之前尝试过svn2git,有无svndumpfiltersvndumptransformer)。

文档位于https://techbase.kde.org/Projects/MoveToGit/UsingSvn2Git,介绍了将KDE项目的Subversion存储库(最初是从CVS迁移到)迁移到git中的用途。

该工具位于https://github.com/svn-all-fast-export/svn2git,其中包括用于常见任务的示例配置文件。用于相当复杂的KDE迁移过程(具有数十年的结构更改)的更复杂的配置文件位于https://cgit.kde.org/kde-ruleset.git/

我注意到的唯一缺点是,显然,您不能将两条路径合并到一个主分支中。但这很容易通过最终分支重命名来规避。