如何svn转储特定文件夹并将其加载到特定位置

时间:2014-09-03 15:45:42

标签: svn tortoisesvn svnadmin

所以这是故事,我有以下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,但这无济于事。我需要提示来执行那个确切的任务,建议的替代方案对我没有帮助,谢谢。

1 个答案:

答案 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),因为内容将不符合元数据。这将使转储文件无效。

现在您可以加载转储文件。