Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 拆分现有存储库&;将最新提交应用到另一个存储库_Git_Mercurial_Repository_Dvcs - Fatal编程技术网

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

Git 拆分现有存储库&;将最新提交应用到另一个存储库,git,mercurial,repository,dvcs,Git,Mercurial,Repository,Dvcs,不久前,我将我的SVN存储库转换为Mercurial存储库。它似乎被正确地转换了,我已经对这个项目做了很多修改。过了一段时间(在历史中挖掘时),我意识到转换没有正确完成,即旧的提交没有按时间排序,因此我从SVN存储库中获得了所有修订,但顺序不正确(最重要的是,我在转换后进行了提交) 我想解决这个问题。我能想到的唯一解决方法是将存储库一分为二 一个包含从旧SVN存储库转换而来的修订(我们称之为A1) 一个只包含新提交(我们称之为B1) 我想再次转换我的SVN存储库(这次正确),然后重新应用自存

不久前,我将我的SVN存储库转换为Mercurial存储库。它似乎被正确地转换了,我已经对这个项目做了很多修改。过了一段时间(在历史中挖掘时),我意识到转换没有正确完成,即旧的提交没有按时间排序,因此我从SVN存储库中获得了所有修订,但顺序不正确(最重要的是,我在转换后进行了提交)

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

  • 一个包含从旧SVN存储库转换而来的修订(我们称之为
    A1
  • 一个只包含新提交(我们称之为
    B1
我想再次转换我的SVN存储库(这次正确),然后重新应用自存储库第一次转换以来我所做的所有更改(
B1
part)

总而言之,我需要做的(或者,我认为我需要做的)是:

  • 将现有回购拆分为两部分-一部分是通过从SVN存储库转换创建的(
    A1
    ),另一部分是包含正确提交的(由我在存储库转换后进行的-
    B1

  • 将SVN存储库转换为Mercurial(或者Git,如果出于某种原因,所有其他步骤在Mercurial中都不可行的话)。因此,在转换之后,我将有
    A2

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

  • 我想我知道如何进行转换(第2点)以获得正确排序的提交(
    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
    是否有帮助?