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

如何跨存储库迁移svn:externals属性中的所有URL?

如何解决《如何跨存储库迁移svn:externals属性中的所有URL?》经验,为你挑选了2个好方法。

我们正在将SVN存储库从一台计算机移动到另一台计算机,并且将为新的存储库提供一个新的域名.问题是,在存储库中,有许多svn:externals引用存储库中的其他项目.例如,我们有projectA,它在svn:externals属性中有:

external/libraryA svn://oldserver.net/repo/libraryA
external/libraryB svn://oldserver.net/repo/libraryB

...等等.所有URL都引用了这个特定的域名,因此可以很容易地解析它.已经吸取了教训,我将这些URL迁移为"svn:// localhost /",但我需要找到一种方法来浏览存储库历史记录并重写所有旧URL,这样我们仍然可以查看这些项目的较旧版本没有断开链接.

我该怎么做呢?



1> ldav1s..:

我会使用SvnDumpTool.它正是您正在寻找的:

svndumptool transform-prop svn:externals "(\S*) (|-r ?\d* ?)http://oldserver.net(/\S*)" "\2\3 \1" source.dumpfile source-fixed-externals.dumpfile

这将修复subversion 1.5格式的每个外部,并使用相对URL.

所以svn:externals喜欢:

external/libraryA svn://oldserver.net/repo/libraryA

成为:

 /repo/libraryA external/libraryA

使用服务器根相对URL.



2> yvandermeer..:

正如您所说,您仍然希望能够查看较旧的版本,唯一的解决方案是"重写"整个历史记录(前面提到的解决方案D).

要做到这一点,你应该:

1)使用svnadmin转储转储整个存储库的内容:

$ svnadmin dump /path/to/repos > original-dumpfile
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.

2)编辑转储文件,以更改svn:externals URL.这是最困难的部分:假设存储库也包含二进制数据,在纯文本编辑器中打开转储文件很可能会破坏转储文件.我使用所谓的"十六进制编辑器"有很好的经验,例如Freeware Hex Editor XVI32

3)创建一个新的存储库并将修改后的dumpfile加载到其中:

$ svnadmin create newrepos
$ svnadmin load newrepos < modified-dumpfile

有关更多信息,您可能还对以下链接感兴趣:http:
//svnbook.red-bean.com/en/1.1/ch05s03.html

注意:Subversion 1.5实际上添加了对svn:externals属性中相对URL的支持,这可以在将来精确地防止这类问题:http:
//subversion.tigris.org/svn_1.5_releasenotes.html#externals

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