当前位置:  开发笔记 > 运维 > 正文

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

如何解决《是否可以通过svndumpfilter更改存储库中的目录名称?》经验,为你挑选了2个好方法。

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

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

我想从第一个修订版开始更改此目录的名称.

据我所知,svndumpfilter实用程序可以用于此.

这是对的吗?

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



1> fglez..:

您应该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'永远不会出现在其他地方.
在这种情况下,加载处理过的文件时会出现"校验和不匹配"错误.请参阅转储文件格式:http://svn.apache.org/repos/asf/subversion/trunk/notes/dump-load-format.txt

2> Marco..:

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

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

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

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

https://github.com/nlmarco/svndumptransformer

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

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

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

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

顺便说一句.我知道这个问题已经很老了,但我希望我的答案可以帮助那些遇到这个问题的人.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有