是否可以重命名 svn 存储库中的目录。
不创建将重命名此目录的新修订版。
我想从第一个修订版开始更改此目录的名称。
据我了解 svndumpfilter 实用程序可用于此。
这是正确的吗?
有谁可以给我一个小例子怎么做?
是否可以重命名 svn 存储库中的目录。
不创建将重命名此目录的新修订版。
我想从第一个修订版开始更改此目录的名称。
据我了解 svndumpfilter 实用程序可用于此。
这是正确的吗?
有谁可以给我一个小例子怎么做?
您应该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
我当然建议不要使用 sed,因为它不知道文件格式,并且您可能很容易使 SVN 转储文件无法使用。
此外,如果您想要替换的不仅仅是路径,您还需要更新或简单地删除 SHA1 和 MD5 校验和。
修改 SVN 转储实际上并不像起初看起来那么简单。
昨天我也遇到了同样的问题,为此我写了一个小程序。我在这里发布给大家使用:
https://github.com/nlmarco/svndumptransformer
它是免费软件,如果您想要/需要更多功能,欢迎您对其进行修改。
该程序仅修改文本内容(如果文件——例如图像——被标记为具有 mime 类型“application/octet-stream”,则不会被修改)。并且由于它真正读取并理解 SVN 转储格式,因此它不会修改属于 SVN 转储的结构数据 - 与上面的 sed 命令不同。
对我来说,这个程序目前在重命名产品时运行良好 - 导致所有路径以及项目配置文件(=> gradle)和几十个 Java 类被重命名。
我希望这个程序对其他人也有用。
顺便提一句。我知道这个问题已经很老了,但我希望我的回答可以帮助现在遇到这个问题的其他人。
https://metacpan.org/pod/release/SALVA/SVN-DumpReloc-0.02/bin/svn-dump-reloc看起来很有趣,但不(正如它所说)检查丢失或重复的目录。打算写一些自定义的东西……</p>
如果您的最终目标是将所有内容导入git
,但您想先清理内容,那么svn-all-fast-export
(不幸的是,不是唯一一个也称为svn2git
)确实为我创造了最好的体验,到目前为止(尝试过svn2git
使用和不使用svndumpfilter
以及svndumptransformer
之前)。
文档位于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/。
我注意到的唯一缺点是,显然,您不能将两条路径合并到一个主分支中。但这很容易通过最终分支重命名来规避。