【问题标题】:How do I move a portion of a subversion repository to a new one without losing the history?如何在不丢失历史记录的情况下将 subversion 存储库的一部分移动到新存储库?
【发布时间】:2012-03-29 14:56:28
【问题描述】:

我有一个 subversion 存储库,目前有代码、文档和可交付成果。这变得混乱且难以管理,因此我想将存储库分成三个。

如何在不丢失历史记录的情况下将原始存储库的子部分(将包含纯代码)移动到新的 DocumentationDeliverables 存储库中?例如:

<old_repos>\Docs
<old_repos>\Deliverables
<old_repos>\Src

...变成:

<docs_repos>
<deliverables_repos>
<src_repos>

我已经看到很多关于在存储库中移动文件夹的帖子,以及其他显示如何将整个存储库移动到另一个存储库的帖子,但没有任何内容建议如何仅移动子集。这可能吗?

【问题讨论】:

    标签: svn migration repository


    【解决方案1】:

    您可以使用svndumpfilter。那里的文档中有说明,尽管

    • 你不能(我上次尝试)使用--deltas 转储 - 它不支持。我认为--incremental 还可以
    • 编辑所有文件的路径通常意味着仔细编辑转储文件,这很痛苦,因为它是二进制文件和文本的混合体。我通常必须删除创建目录的前几个修订并修改其中一个以创建正确的新目录。

    这需要一些努力,但我已经成功完成了几次。

    【讨论】:

      【解决方案2】:

      未尝试且未亲自测试

      您将使用 svnadmin dump、svnadmin load 和 svndumpfilter(命令略带 Unix 风格)

      1 创建原始 repo 的完整转储:svnadmin dump . &gt; full.dump

      2-4 过滤转储并仅保留修订,分别与所需的子目录相关:cat full.dump | svndumpfilter include DIR-PATH --drop-empty-revs --renumber-revs --skip-missing-merge-sources --preserve-revprops &gt; DIR-PATH.dump

      5-7 对于每个新的空仓库:svnadmin load . --parent-dir trunk --ignore-uuid &lt; DIR-PATH.dmp

      在最坏的情况下,新的 repos 不会得到/trunk/*.* data-trees,而是/trunk/DIR-PATH/*.*,这很容易被一个大动作消除,毕竟删除空的 DIR-PATH

      PS - 我在写完我的文字后才发现:How to move a single folder from one Subversion repository to another repository?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-30
        • 2020-10-23
        • 1970-01-01
        • 1970-01-01
        • 2010-10-24
        • 2022-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多