代码之家  ›  专栏  ›  技术社区  ›  John John Pichler

删除变更集或缩小多变的存储库

  •  8
  • John John Pichler  · 技术社区  · 14 年前

    2 回复  |  直到 11 年前
        1
  •  13
  •   Cole Tobin Matt    11 年前

    从根本上说,您不能这样做。Mercurial有一个硬性的规则,即只有当一个变更集的每个祖先变更集也存在于一个存储库中时,变更集才能存在于该存储库中。

    但是,您可以创建一个新的存储库,其变更集对应于另一个存储库中稍后变更集的子集。然而,它们不会是相同的变更集,因为它们将有不同的散列nodeid,并且来自原始repo的任何克隆都不会与新的(不相关的存储库)一起工作。

    hg -R /path/to/bigrepo export 10:tip > latestchanges.patch
    hg init newsmallrepo
    hg -R newsmallrepo import < latestchanges.patch
    

    这将只将编号为10的变更集以及之后的变更集复制到新存储库中具有不同散列的新变更集中。合并也不会很好。

        2
  •  11
  •   Mark Tolonen    11 年前

    convert 扩展(包括Mercurial)。一个简单的例子如下:

    hg convert <src> <dest> --config convert.hg.startrev=<rev>
    

    这将生成一个新的、不相关的存储库,以指定的修订开始,删除以前的历史记录。它也将处理合并。所有用户都需要克隆存储库的新版本,因为变更集散列将全部更改。

    通过将以下内容添加到 mercurial.ini :

    [extensions]
    convert =
    

    跑步 hg help convert 选择。