【问题标题】:Query about mercurial heads diagram and heads counting水银头图和头数查询
【发布时间】:2015-06-29 16:56:31
【问题描述】:

我需要了解以下哪几行中正面的数量发生了变化。我发现很难理解第 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--/

可变命令如下:

1: /home/user> hg clone http://remoteserver/mainrepository clone1

2: /home/user> hg clone http://remoteserver/mainrepository clone2

3: /home/user> cd clone1

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

5: /home/user/clone1> hg add a.txt

6: /home/user/clone1> hg commit -m "添加了一个文件"

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

8: /home/user/clone2> 回显二 > b.txt

9: /home/user/clone2> hg add b.txt

10: /home/user/clone2> hg commit -m "添加了一个文件"

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

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

13: /home/user/clone2> hg 合并

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

【问题讨论】:

标签: version-control mercurial


【解决方案1】:

虽然行星制造者在相关问题中的回答完全完整且有效,但我会注意到 这种 情况下的一些错误、遗漏和错误假设

  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(mergeset 被推送,Clone2 中以前的 head 作为 mergeset 的父级),在这一步 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 Main 更完整(它从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)

【讨论】:

  • 感谢非常详细的帮助,但我想知道为什么在第 12 行主存储库中没有 +2,因为 clone2 在合并之前推送了他的 r1 和 r0.. 再次非常感谢。
  • @TomerLevi - 请看我在第 2 页下方的第一个屏幕截图。 +1 只是因为 Main 将有 2 个头而不是 1(由于有孩子,旧头不会是头)。检查树,我准备了屏幕截图,只是无法使用新的愚蠢图像上传器插入答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多