2

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

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

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

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

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

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

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

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

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

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

4

3 回答 3

2

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

于 2012-09-01T17:07:08.800 回答
2

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

于 2012-09-01T15:22:39.233 回答
1

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

于 2012-09-01T16:11:28.367 回答