代码之家  ›  专栏  ›  技术社区  ›  Teck-freak

压缩mercurial存储库-推荐的方式?

  •  2
  • Teck-freak  · 技术社区  · 6 年前

    假设我有一个“Main”存储库,Max和co分别处理一个克隆。Max有一些尚未推送到“Main”的本地提交(“f”和“g”)。这就是它现在的样子(管道被推/拉):

    A--B1--B2--C--D1--D2--D3--E (Main)
    |          |  |           |
    A--B1--B2--C--D1--D2--D3--E--f--g (Max)
    

    “B1”和“B2”以及“D1”、“D2”和“D3”是只有在一起才有意义的更改。我们希望将“B1”和“B2”组合到单个变更集“B”,并将“D1”、“D2”和“D3”组合到单个变更集“D”。新结构应如下所示:

    A--B--C--D--E (Main)
    |     |     |
    A--B--C--D--E--f--g (Max)
    

    我(主要)的问题是:推荐的做法是什么?


    现在让我们让事情变得更糟: 我们有一个分支,它被合并到要折叠的更改集中。看起来是这样的:

    A--B1--B2--C--D1--D2------D4--E (Main)
    |          |  \-------D3-/    |
    |          |                  |
    A--B1--B2--C--D1--D2------D4--E--f--g (Max)
                  \-------D3-/
    

    新的历史应该如下所示:

    A--B--C--D--E(主)
    |     |     |
    A--B--C--D--E--f--g(最大值)
    

    你会怎么做? 提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Rudi    6 年前

    这取决于你想为此付出多少努力。虽然我不知道Mercurial本身有什么解决方案(我只知道不能处理合并的历史编辑功能),但Git确实具有您需要的功能:

    如果我愿意 真正地 我会做这样的手术

    • 试着让管理层相信这不值得
    • 努力让管理层相信这不值得
    • 备份!以下步骤涉及破坏性操作,因此认为这不是可选的。 您已被警告 .
    • 将带有hg git的回购导出到git存储库中
    • 使用将完整(git)历史导出到快速导入流中 git fastexport --no-data --all > history.fi
    • 通过编辑创建伪历史记录 history.fi ,删除不需要的修订
    • 使用“git fast import-f<将调整后的历史记录导入git repo”;历史金融机构`
    • 全面检查新创建的历史记录是否符合您的要求
    • 克隆 Max 进入本地工作存储库
    • 删除commmit的继承者 A 在本地工作存储库中
    • 从git中提取更新的历史记录(再次使用 hg-git )进入本地工作存储库
    • 检查Mercurial历史记录是否符合您的期望(新旧回购之间的提交差异、元数据(时间戳、提交人名称……)
    • 删除commmit的继承者 A. 在里面 每一个 回购(主要、最大和 每一个 开发人员克隆)
    • hg push -r E Main 部分历史回溯到 Main 工作存储库之外
    • hg push -r g Max 完整历史回溯到 马克斯 工作存储库之外