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

Posted

技术标签:

【中文标题】是否可以通过 svndumpfilter 更改存储库中的目录名称?【英文标题】:Is it possible to change dir name in repository by svndumpfilter? 【发布时间】:2009-09-28 10:55:50 【问题描述】:

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

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

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

据我了解 svndumpfilter 实用程序可用于此。

对吗?

谁能给我一个小例子怎么做?

【问题讨论】:

【参考方案1】:

您应该 svnadmin 转储 您的存储库,处理转储文件并 svnadmin 加载 处理后的文件在一个空的 repo 中。不需要 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

【讨论】:

不要使用 sed 之类的简单工具处理 svn 转储之类的复杂数据结构。没有人可以保证字符串 ': dir1' 永远不会出现在其他地方。 在这种情况下,加载处理后的文件时会出现“校验和不匹配”错误。查看转储文件格式:svn.apache.org/repos/asf/subversion/trunk/notes/… 太棒了。有用。这是在 svn dump 中移动文件夹的唯一简单方法! 不幸的是,根据我的经验,这通常不会起作用,除非替换文本与原始文本具有相同数量的字符并且您从转储文件中删除校验和.顺便说一句,svndumptransformer(Marco 的回答)在相当复杂的编辑中为我工作(文件名、cmets 和文件内容都必须编辑)。 鉴于几年前这里提到的其他人的成功,我想知道转储文件格式是否曾经是这种方法可以工作,但我发现它通常不再那么容易了。跨度> 【参考方案2】:

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

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

修改 SVN 转储实际上并不像一开始看起来那么简单。

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

https://github.com/nlmarco/svndumptransformer

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

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

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

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

顺便说一句。我知道这个问题已经很老了,但我希望我的回答可以帮助现在遇到这个问题的其他人。

【讨论】:

谢谢!在对 2.4GB 转储文件进行相当复杂的编辑时,这对我有用(文件名、目录名、cmets 和文件内容都必须编辑)。拥有正则表达式支持以避免误报替换本来会很好,但就我而言,我只有几个,所以我能够手动修复它们。【参考方案3】:

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

【讨论】:

【参考方案4】:

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

文档位于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/。

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

【讨论】:

以上是关于是否可以通过 svndumpfilter 更改存储库中的目录名称?的主要内容,如果未能解决你的问题,请参考以下文章

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

SVNDumpFilter 也包括分支?

svndumpfilter --drop-empty-revs 保持填充修订

手动更改后重新计算 SVN 转储中的校验和

svndumpfilter2 vs svndumpfilter3

svndumpfilter 2 + Windows 如何