gpt4 book ai didi

merge - mercurial中 merge 子存储库的多个分支的 merge 历史

转载 作者:行者123 更新时间:2023-12-02 00:59:08 43 4
gpt4 key购买 nike

我从一个 Mercurial 存储库开始,它有多个我试图 merge 到其中的子存储库,就好像它们一直是主存储库的一部分一样。它们从一开始就不应该是子存储库。

我整理了一个将旧历史转换为单个存储库的过程:

  1. 获取一个子存储库并使用 --filemap 对其进行 hg 转换,将所有内容移动到一个子目录中,该子目录的名称与它应该最终所在的目录名称相同,如下所述:Join multiple subrepos into one and preserve history in Mercurial
  2. 使用 Clay Lenhart 的回答从每个存储库中获取修订列表:Is it possible to manually change/reorder the revision numbers (provided topology remains the same)?
  3. 按日期对所有要 merge 的存储库中的所有修订进行排序。
  4. 将每个修订一个一个地拉入一个新的存储库。
  5. 使用 python 脚本对生成的存储库进行 hg 转换,如下所述:https://www.mercurial-scm.org/wiki/ConvertExtension#Customization , 去除对 .hgsub 和 .hgsubstate 文件中子存储库的引用
  6. 手动 merge 分支。

我留下的问题是历史无法使用,即我无法返回并更新到特定版本,因为每个分支只有自己的数据。假设我的主仓库是 A,我的子仓库是 B 和 C:如果我更新到分支 A 的历史,它没有来自分支 B 或分支 C 的文件,如果我更新到分支 B 的历史,它没有来自分支 A 或分支 C 的文件。

我想要的是某种方式将整个历史 merge 在一起,因此它主要是一个分支,并且来自所有分支的文件出现在每次提交中。有没有一种方法可以转换它,以便 merge 所有分支的历史记录,而不仅仅是最后的单个 merge ?

最佳答案

虽然我没有适合您的固定流程,但我可以告诉您哪里出了问题,这就是步骤 3-6 中的内容。你想要做的是:

  1. 列出所有子项目中的所有修订,使用 superproject/master repo 来控制哪些修订按什么顺序组合在一起。 (作为第 4 步的一部分,您可以即时执行此操作。)

  2. 根据在步骤 3 中获得的顺序,从下一个/多个存储库引入(拉取)下一个修订版。如果 super 项目说下一个提交使用子项目 A 的修订版 41 和修订版 A 的修订版 97子项目 B 和子项目 C 的修订版 11,这三个是要引入的。然后将它们折叠成一个不引用任何子项目的修订版(例如,如果合适,使用 hg histedit)。

没有第 5 步,也没有第 6 步,因为此时没有要 merge 的内容: merge 发生在第 4 步。

关于merge - mercurial中 merge 子存储库的多个分支的 merge 历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51902238/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com