gpt4 book ai didi

Mercurial merge 存储库作为分支

转载 作者:行者123 更新时间:2023-12-05 01:08:54 25 4
gpt4 key购买 nike

我有两个 Mercurial 存储库,用于同一项目的不同主要修订版。后一个版本对项目的功能,尤其是 UI 进行了巨大的更改,但它仍然会有很多与早期版本相同的代码。 (简而言之,我将这些版本称为 4.65.0 以及存储库 project-4.x project-5.x 基本上是我的 future ; m 处理。)[1]

当我们更仔细地考虑我们存储库的结构,特别是考虑如何处理相关代码时,很明显我们想简单地将存储库拉在一起并使用命名分支来进行每个正在进行的工作(人们可以从中分支或书签并根据需要 merge )。为此,我们决定基本上需要拉动 project-5.x 存储库进入 project-4.x 存储库。据我所知, merge 存储库应该相当简单:

$ hg pull -f project-5.x   # in project-4.x
$ hg merge

到现在为止还挺好。我关心的是处理分支问题。[2]这些将作为两个完全不相关的链出现(这很好),但我希望分支结构看起来像这样:
---4.6-----   }
\ } original project-4.x
5.0----- }
/
------- } original project-5.x

问题是,我不完全确定该怎么做。

编辑:见下文;我设计的答案奏效了。

脚注
  • 如果你想知道为什么这只是现在才出现......好吧,该项目仅从开始 4.6 开始就得到了版本控制。 .是的,这有点疯狂。而且我以前从未负责过这样的主要版本更改,所以我最初决定完全制作一个新的 repo,我现在当然后悔了。活到老,学到老。
  • 我已经阅读过有关该主题的答案(但这让我不确定如何准确地做到这一点):
  • Mercurial - merging branches
  • How do I merge two Mercurial repos into a single one
  • How can I import a mercurial repo (including history) into another mercurial repo as a subdirectory, without using subrepos?
  • 最佳答案

    我最初认为我需要某种方法才能将其拉入分支,但在进一步咀嚼后,我得出的最佳方法大致如下:

  • 创建所需的新分支结构(即创建 4.65.0 分支)。
  • 删除旧的 default分支进入4.6基础存储库中的分支。
  • 拉动 project-5.x 存储库进入 project-4.x 存储库。
  • merge default (或者在这个存储库的情况下, experimental )基线,在 merge 期间被拉入 5.0分支,关闭 experimental沿途分行。
  • 限制对旧存储库的中央推/拉位置的写访问;由于历史原因,我们仍然拥有它,但人们不能不小心插入它。

  • 准备(步骤 1–2)
    $ cd <project-4.x directory>
    $ hg branch 4.6
    $ hg ci -m "New 4.0 baseline"
    $ hg branch 5.0
    $ hg ci -m "New 5.0 baseline"
    $ hg up default
    $ hg ci --close-branch -m "Close default branch going forward.
    $ hg up 4.6
    $ hg merge default
    $ hg ci -m "branch merge default -> 4.6"

    此时,存储库已设置:它具有新的基线分支并删除了旧的 default我们想摆脱的分支。

    在此之后,我进行了更改以使存储库结构看起来更符合 中 5.0 分支所需的方式。 project-4.x 存储库(因为大规模重组是版本更改工作的一部分)。

    存储库 merge (步骤 3–4)

    下一步实际上是将存储库 merge 在一起,并将旧存储库中的内容推送到所需的分支。
    $ hg pull -f <path to project-5.x repository>   # still in project-4.x repository
    $ hg merge -m "Merge in project-5.x repository"
    $ hg up experimental # experimental is the name of the "default" branch
    $ hg ci --close-branch -m "Close experimental branch"
    $ hg up 5.0
    $ hg merge experimental
    $ hg ci -m "Merge old experimental into new 5.0 baseline"

    这进行得很顺利,没有任何 merge 冲突(除了我需要解决 .hgignore 文件中的一些小差异)。

    关于Mercurial merge 存储库作为分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16429972/

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