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

Posted

技术标签:

【中文标题】如何svn转储特定文件夹并将其加载到特定位置【英文标题】:How to svn dump a specific folder and load it into a specific location 【发布时间】:2014-09-03 15:45:42 【问题描述】:

故事就是这样,我有以下 svn repos -

Fruit
 - Banana
   - trunk
 - Mango

Vegetables
 - Potato
   - trunk
 - Mango
   - trunk

事实证明,我们一直在为我们的 Mango 项目使用错误的 repo(蔬菜),并且我们在 Fruit repo 中有一个现有的 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

这显然是假设的,但它反映了我现在遇到的问题。我不知道如何在没有父目录的情况下迁移主干文件夹单独。我什至尝试根据我对文件系统的错误假设来对过滤后的转储进行转储过滤,但这无济于事。我需要执行该确切任务的提示,建议的替代方案对我没有帮助,谢谢。

【问题讨论】:

【参考方案1】:

SVN 手册中有一个 example 说明如何将***目录移动到其自己的存储库中,您应该能够适应您的情况。

基本过程是在使用svnadmin load 加载转储文件之前手动编辑转储文件。首先,从转储文件中的Node-pathNode-copyfrom-path 标头中删除前导Mango/。然后,删除创建Mango 目录的转储文件部分。它看起来像这样:

Node-path: Mango
Node-action: add
Node-kind: dir
Content-length: 0

但请注意以下几点:

警告

如果您确实计划手动编辑转储文件以删除***目录,请确保您的编辑器未设置为自动将行尾字符转换为本机格式(例如,\r\n 到 @987654329 @),因为内容将不同意元数据。这将使转储文件无用。

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

【讨论】:

以上是关于如何svn转储特定文件夹并将其加载到特定位置的主要内容,如果未能解决你的问题,请参考以下文章

在GDB中如何从文件中填充内存

如何加载 JSON 文件并将其转换为特定类型的对象?

当我在存储库中丢失一些修订时,如何转储所有 svn 数据?

如何将 SVN 转储文件导入 SourceForge?

如何从 XML 数据中提取特定数据

Redis 数据库导出/导入 [关闭]