如何从一个非常大的仓库中获取项目的 svn 转储

Posted

技术标签:

【中文标题】如何从一个非常大的仓库中获取项目的 svn 转储【英文标题】:how to take svndump of a proejct from a very large repo 【发布时间】:2014-07-16 05:26:50 【问题描述】:

我们有带有项目特定分支和标签的存储库。这里只是我的存储库的快照:

    项目代码 =====>>分支机构 ---- R1 ---- R2 ---- R3

      =====>> tags 
    

--- R1_tag --- R2_tag

项目数据库 =======>> 分行 ---- R1 ---- R2 ---- R3

          ======>>tags  

--- R1_tag --- R2_tag

现在我只想转储项目代码中的一个分支,然后将此转储加载到同一服务器上的其他存储库。 我尝试了以下操作,但 导致空修订 被加载到其他 repo 中。

svnadmin dump /path/to/repo | svndumpfilter include /proj > dump-file
svnadmin create /new/proj/repo
svnadmin load --ignore-uuid /new/proj/repo < dump-file

并且我无法按顺序运行以上命令,因为 Repo 太大,创建转储可能至少需要 10 个小时。此外,忽略 UUID 是为了删除与当前存储库的链接或任何其他原因? 请帮助使用特定命令。

【问题讨论】:

【参考方案1】:

svndumpfilter 可以选择删除空修订,--drop-empty-revs

如果您没有使用--ignore-uuid 的特定理由,请尝试不使用它。如果它有效,你就不需要它。

您可以在没有中间转储文件的情况下简化转储-过滤-加载操作,如下所示:

svnadmin create /new/proj/repo
svnadmin dump /path/to/repo | svndumpfilter include /proj --drop-empty-revs | svnadmin load /new/proj/repo

【讨论】:

我确实尝试过,但“svnadmin dump /path/to/repo”从 rev#1 开始,但我需要的项目位于 rev#50,000 之后。所以这是正常的还是我在这里做错了什么。我也尝试了“--drop -empty revs”,但在加载时修订集仍然是空的,并且没有对修订执行任何操作 我对此进行了测试,它正确排除了空修订。还有另一个标志,--drop-all-empty-revs,但我不确定区别。我不能在晚上之前再次测试,在此期间你可以试一试。

以上是关于如何从一个非常大的仓库中获取项目的 svn 转储的主要内容,如果未能解决你的问题,请参考以下文章

SVN:最小化将项目移动到自己的仓库所需的转储

聊聊如何从 SVN 迁移源码到 Git 仓库

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

从 SVN 转储中删除空修订的问题

数据仓库相关术语 对你运用Hive或者ETL有非常大的理解

如何更新 svn 转储