我们正在将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,这样我们仍然可以查看这些项目的较旧版本没有断开链接.
我该怎么做呢?
我会使用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.
正如您所说,您仍然希望能够查看较旧的版本,唯一的解决方案是"重写"整个历史记录(前面提到的解决方案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