关于mercurial heads diagram和heads counting的查询

Query about mercurial heads diagram and heads counting

我需要了解以下哪一行中的头数发生了变化。我发现很难理解第 15 行发生了什么。 我知道当一个存储库在从另一个存储库中拉出或推送时没有相同的变更集,所以有 +1 头。

当我试图解决它时,我的图表看起来像这样:

第 12 行:从 clone2 推送到主存储库

第 15 行:从 Clone2 推送到 Clone1(因为 r3 与 r1 不相似)

第 17 行:从主存储库中拉取 r2 和 r1,因为 r1 和 r3 已经存在,所以我添加了 r2。

创建的头像总数:+3

主要 存储库:O--------r2

                   \----r1

克隆 1:O--------r1

             \---r3

             \---r2

克隆 2:O------r2--------r3

           \--r1--/

Mercurial 命令如下:

1: /home/user> hg 克隆 http://remoteserver/mainrepository 克隆 1

2: /home/user> hg 克隆 http://remoteserver/mainrepository 克隆 2

3: /home/user> cd clone1

4: /home/user/clone1> echo one > a.txt

5: /home/user/clone1> hg 添加 a.txt

6: /home/user/clone1> hg commit -m "Added a file"

7: /home/user/clone1> cd ../clone2

8: /home/user/clone2> echo two > b.txt

9: /home/user/clone2> hg 添加 b.txt

10: /home/user/clone2> hg commit -m "Added a file"

11: /home/user/clone2> hg pull ../clone1

12: /home/user/clone2> hg push -f

13: /home/user/clone2> hg merge

14: /home/user/clone2> hg commit -m "Merged"

15: /home/user/clone2> hg push -f ../clone1

16: /home/user/clone2> cd ../clone1

17: /home/user/clone1> hg pull

虽然 planemaker 在相关问题中的回答非常完整和有效,但我会在这种情况

中指出一些错误、遗漏和错误假设
  1. Clone2 在第 11 步获得 head+1
>hg pull ..\Clone1
pulling from ..\Clone1
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
  1. Main 在第 12 步获得 head+1
>hg push -f
pushing to Z:\Main
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files (+1 heads)

http://i.imgur.com/KKNU39d.png

  1. Clone2 在第 14 步获得 head-1
  2. Clone1 在第 15 步没有得到 head+1(推入合并集,Clone2 中的前一个头作为合并集的父级),在这一步 Clone1 是相等的(在 DAG-项) 到 Clone2
>hg push -f ..\Clone1
pushing to ..\Clone1
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 1 changes to 1 files

http://i.imgur.com/9bY0URS.png

  1. 步骤 16-17 什么都不做,因为 Clone1 DAG 比 [=] 更完整 30=]Main(它在 main-history 之上有来自 Clone2 的合并集)
>hg pull
pulling from Z:\Main
searching for changes
no changes found
  1. 为了在 Main 中拥有完整的历史记录,您必须从任何克隆(-f 不需要且无用)推送到它以将合并集作为新的单一存储库中的头
>hg push
pushing to Z:\Main
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 0 changes to 0 files (-1 heads)