我正在尝试将我的 Subversion 存储库迁移到 Atlassian。Atlassian 要求导入的存储库转储具有与每个项目键的项目同名的根目录。假设我在 Atlassian 中的项目键是 FOOBAR,那么存储库转储应该包含所有修订的/FOOBAR。它还应该包含主干、分支和标签子目录。
为了重写 Assembla svn 转储,我这样做了:
cat foobar-assembla.dump | svn-dump-reloc "/" "FOOBAR" > foobar-atlassian.dump
然后我尝试测试它:
svnadmin create test
cat foobar-atlassian.dump | svnadmin load test
这产生了一条错误消息:
svnadmin: File not found: transaction '0-0', path 'FOOBAR/trunk'
* adding path : FOOBAR/trunk ...
有什么想法吗?
我认为这是因为转储文件不包含任何会创建 FOOBAR 目录本身的事务。
尝试在svnadmin load test
之前运行svn mkdir file://$PWD/test/FOOBAR
。
为了在应有的地方给予荣誉,我从 http://dotslashstar.blogspot.com.au/2011/06/svn-hack-insert-missing-trunk-root.html 那里得到了这个提示
以下内容对我有用。
在关闭所有转换选项的情况下使用文本编辑器:
- 将所有
Node-path: trunk
实例替换为Node-path: FOOBAR/trunk
。 - 在创建
FOOBAR/trunk
的修订版中,在紧挨着添加FOOBAR/trunk
的条目之前手动添加一个条目,该条目将创建FOOBAR
、FOOBAR/branches
和FOOBAR/tags
。
我知道这在某些情况下可能不起作用,例如当文件本身发生Node-path: trunk
时。但它在这种情况下有效,并且应该适用于大多数其他情况。