拆分现有存储库&将最新提交应用于另一个存储库

时间:2012-09-01 07:17:54

标签: git mercurial repository dvcs

前段时间我已将SVN存储库转换为Mercurial存储库。它似乎被正确转换,我已经对项目进行了很多改动。过了一会儿(在挖掘历史的时候)我意识到转换没有正确完成 - 即旧的提交没有按时间排序,所以我有SVN存储库的所有修订但没有按正确的顺序(并且在我在转换后做了我的提交。)

我想解决这个问题。解决这个问题的唯一方法我可以想到将存储库分成两个

  • 包含从旧SVN存储库转换的修订版(我们称之为A1
  • 和一个只包含新提交(我们称之为B1

我想再次转换我的SVN存储库(这次正确),然后重新应用我自第一次转换存储库后所做的所有更改(B1部分)。

总结一下,我需要做的事情(或者我认为我需要做的事情)是:

  1. 将现有的repo分成两部分 - 一部分是通过从SVN存储库(A1)转换而创建的,另一部分包含正确的提交(由我在存储库转换后生成 - {{1 }})。

  2. 将SVN存储库转换为Mercurial(或Git,如果由于某种原因,所有其他步骤在Mercurial中都不可行)。因此,在转换后,我将B1

  3. A2的更改从第2点应用到新转换的存储库 - B1

  4. 我想我知道如何进行转换(第2点)以获得正确有序的提交(A2)。我只需要帮助1.(将现有存储库拆分为A2& A1)& 3(将提交从B1应用到B1)。

    Mercurial可行吗?如果在Mercurial中不可行 - 是否可以使用Git实现它(据我所知,可以轻松地将SVN和Mercurial存储库转换为Git存储库)。

3 个答案:

答案 0 :(得分:2)

我猜新的变更集是相当线性的。如果是,您可以使用MQ轻松完成此操作。您只需要将所有新的变更集转换为MQ变更集(qimport),然后将这些变量集应用于刚刚转换的存储库。

答案 1 :(得分:2)

如果您想基于现有存储库的子集创建新存储库,convert extension也可以提供帮助。

答案 2 :(得分:1)

您应该能够使用strip命令(它是mq extension的一部分)来删除所有新的变更集。这将创建所有新变更集的捆绑(该命令将输出捆绑命令的位置)。您应该可以使用此捆绑包并将其(使用unbundle命令)解压缩到替换A2存储库中。