所以这是故事,我有以下svn回购 -
Fruit
- Banana
- trunk
- Mango
Vegetables
- Potato
- trunk
- Mango
- trunk
事实证明,我们一直在为芒果项目使用错误的回购(蔬菜),而且我们在Fruit回购中有一个现有的Mango文件夹。所以我的任务是将文件夹Vegetables \ Mango \ trunk放入Fruit \ Mango。这是我的尝试 -
// I dump the vegetables repo
svnadmin dump C:\Repos\Vegetables > Vegetables.dump
// I then filter the dump to only include Mango/trunk
svndumpfilter --drop-empty-revs --renumber-revs include Mango/trunk < Vegetables.dump > Mango-trunk.dump
// Finally, I load the filtered dump file into the Fruit/Mango
svnadmin load C:\Repos\Fruit --parent-dir Mango < Mango-trunk.dump
由此产生的Fruit repo如下 -
Fruit
- Banana
- trunk
- Mango
- Mango
- trunk
这显然是假设的,但它反映了我现在遇到的问题。我无法想象如何在没有父目录的情况下迁移中继文件夹单独。我甚至试图根据我对文件系统的不正确假设来对过滤后的转储进行dumpfilter,但这无济于事。我需要提示来执行那个确切的任务,建议的替代方案对我没有帮助,谢谢。
答案 0 :(得分:4)
SVN手册有example如何将顶级目录移动到自己的存储库中,您应该能够适应您的情况。
基本过程是在使用svnadmin load
加载转储文件之前手动编辑转储文件。首先,从转储文件中的Mango/
和Node-path
标头中删除前导Node-copyfrom-path
。然后,删除创建Mango
目录的转储文件部分。它看起来像这样:
Node-path: Mango
Node-action: add
Node-kind: dir
Content-length: 0
但请注意以下事项:
警告强>
如果您计划手动编辑转储文件以删除顶级目录,请确保您的编辑器未设置为自动将行尾字符转换为本机格式(例如,
\r\n
为\n
),因为内容将不符合元数据。这将使转储文件无效。
现在您可以加载转储文件。