前段时间我已将SVN存储库转换为Mercurial存储库。它似乎被正确转换,我已经对项目进行了很多改动。过了一会儿(在挖掘历史的时候)我意识到转换没有正确完成 - 即旧的提交没有按时间排序,所以我有SVN存储库的所有修订但没有按正确的顺序(并且在我在转换后做了我的提交。)
我想解决这个问题。解决这个问题的唯一方法我可以想到将存储库分成两个
A1
)B1
)我想再次转换我的SVN存储库(这次正确),然后重新应用我自第一次转换存储库后所做的所有更改(B1
部分)。
总结一下,我需要做的事情(或者我认为我需要做的事情)是:
将现有的repo分成两部分 - 一部分是通过从SVN存储库(A1
)转换而创建的,另一部分包含正确的提交(由我在存储库转换后生成 - {{1 }})。
将SVN存储库转换为Mercurial(或Git,如果由于某种原因,所有其他步骤在Mercurial中都不可行)。因此,在转换后,我将B1
。
将A2
的更改从第2点应用到新转换的存储库 - B1
我想我知道如何进行转换(第2点)以获得正确有序的提交(A2
)。我只需要帮助1.(将现有存储库拆分为A2
& A1
)& 3(将提交从B1
应用到B1
)。
Mercurial可行吗?如果在Mercurial中不可行 - 是否可以使用Git实现它(据我所知,可以轻松地将SVN和Mercurial存储库转换为Git存储库)。
答案 0 :(得分:2)
我猜新的变更集是相当线性的。如果是,您可以使用MQ轻松完成此操作。您只需要将所有新的变更集转换为MQ变更集(qimport
),然后将这些变量集应用于刚刚转换的存储库。
答案 1 :(得分:2)
如果您想基于现有存储库的子集创建新存储库,convert
extension也可以提供帮助。
答案 2 :(得分:1)
您应该能够使用strip
命令(它是mq extension的一部分)来删除所有新的变更集。这将创建所有新变更集的捆绑(该命令将输出捆绑命令的位置)。您应该可以使用此捆绑包并将其(使用unbundle
命令)解压缩到替换A2
存储库中。