Git 拆分现有存储库&;将最新提交应用到另一个存储库
不久前,我将我的SVN存储库转换为Mercurial存储库。它似乎被正确地转换了,我已经对这个项目做了很多修改。过了一段时间(在历史中挖掘时),我意识到转换没有正确完成,即旧的提交没有按时间排序,因此我从SVN存储库中获得了所有修订,但顺序不正确(最重要的是,我在转换后进行了提交) 我想解决这个问题。我能想到的唯一解决方法是将存储库一分为二Git 拆分现有存储库&;将最新提交应用到另一个存储库,git,mercurial,repository,dvcs,Git,Mercurial,Repository,Dvcs,不久前,我将我的SVN存储库转换为Mercurial存储库。它似乎被正确地转换了,我已经对这个项目做了很多修改。过了一段时间(在历史中挖掘时),我意识到转换没有正确完成,即旧的提交没有按时间排序,因此我从SVN存储库中获得了所有修订,但顺序不正确(最重要的是,我在转换后进行了提交) 我想解决这个问题。我能想到的唯一解决方法是将存储库一分为二 一个包含从旧SVN存储库转换而来的修订(我们称之为A1) 一个只包含新提交(我们称之为B1) 我想再次转换我的SVN存储库(这次正确),然后重新应用自存
- 一个包含从旧SVN存储库转换而来的修订(我们称之为
)A1
- 一个只包含新提交(我们称之为
)B1
B1
part)
总而言之,我需要做的(或者,我认为我需要做的)是:
A1
),另一部分是包含正确提交的(由我在存储库转换后进行的-B1
)A2
B1
中的更改从第2点应用到新转换的存储库-A2
A2
)。我只是需要你的帮助。(将现有存储库拆分为A1
和B1
)&3(将提交从B1
应用到A2
)
这在Mercurial中可行吗?如果在Mercurial中不可行-是否可以使用Git实现它(据我所知,可以轻松地将SVN和Mercurial存储库转换为Git存储库)。我猜新的变更集是相当线性的。如果是,您可以使用MQ轻松完成这项工作。您只需将所有新变更集转换为MQ变更集(
qimport
),然后在新转换的存储库顶部应用这些变更集。您应该能够使用strip
命令(该命令是的一部分)剥离所有新变更集。这将创建一个包含所有新变更集的捆绑包(该命令将输出捆绑包命令的位置)。您应该能够获取此捆绑包并将其拆开(使用unbundle
命令)进入替换的A2
存储库。如果您想基于现有存储库的子集创建新存储库,也可以提供帮助。感谢您建议深入了解MQ-我到目前为止还没有广泛使用它。感谢您建议strip
。我会看一看。我以前用过convert来去除二进制文件(并将它们从历史记录中删除)。我知道使用--rev
开关可以将Mercurial存储库转换为另一个版本数量有限的Mercurial存储库。1.我如何将此类回购的承诺重新应用于另一个回购?2.如何只提取最新提交的一堆文件(如此最新,而不是最旧的)?-splicemap
是否有帮助?