没有父母的mercurial修订是什么意思?

Wil*_*lka 8 mercurial

我现在有一个处于奇怪状态的Mercurial存储库.这就是TortoiseHG的样子:

Hg图

我不认为这是可能的.修订版54的父级为"-1(000000000000)"(即没有).显然我对Mercurial还有一些不了解的事情,任何人都可以让我知道这意味着什么 - 以及进入这种状态必然会发生什么.据我所知,它只是推送和拉出它的东西 - 并没有人使用任何古怪的扩展.

修订版54和55只是添加标签,但如果我'更新-C'到版本54,我最终只能使用.hgtags文件.

我从修订版53中克隆了一下来解决这个问题.但我宁愿理解这里发生的事情,所以我可以避免它再次发生.

Von*_*onC 7

当您查看变更集定义时,您会看到:

每个变更集都有零个,一个或两个父变更集:

  • 如果提交是合并,它有两个父更改集.
  • 如果变更集是存储库中的根,则它没有父级.
    存储库中可能有多个根(通常只有一个),每个根代表一个分支的开头.

"更新"回到已经有子项的变更集,更改文件然后提交会创建一个新的子变更集,从而启动一个新的分支.分支可以命名.

也许这就是你做的:

  • 更新回53(那时已经有一个孩子'54'了)
  • 改变文件
  • 提交,从而从54开始新的分支,没有父母
    (那将使用相同的父进行第二次提交)

要么:

  • 53 --close-branch选项,
  • 可能新的提交(不切换回另一个分支)可能会开始一个新的提交

Ry4an(一位真正的Mercurial专家;))编写并评论:

--close-branch除了从列表中隐藏分支之外什么都不做,并且在下次提交该分支时撤消它.它不会创建多个根.

VonC在他的诊断中是正确的,多头.
但是,' update'和' commit'的组合不会让你进入那种状态.
为了得到多个根,人们通常会hg pull从回购中做一个' '并用来--force覆盖" unrelated repositories"警告.


("无父",表示父ID设置为00000,请参阅"幕后":

alt text http://hgbook.red-bean.com/read/figs/revlog.png)

  • VonC,他的诊断是正确的,多头,但没有"更新"和"提交"的组合会让你进入那个状态.为了最终得到多个根,通常会从repo做一个'hg pull'并使用--force来覆盖"无关的存储库"警告. (3认同)

Nia*_* C. 5

另一种查看方式是hg update null在提交rev之后是否这样做。53.例如,考虑以下顺序:

hg init foo
# create some files
hg addremove
hg commit -m "Revision 0"
# edit, edit, edit
hg commit -m "Revision 1"
hg update null
hg tag -m "Create tag v1.0.0.0" "v1.0.0.0"
Run Code Online (Sandbox Code Playgroud)

此时,hg log版本2的父级将显示为-1:0000000000。由于hg update null清除了工作目录,因此其中只有一个文件.hgtags(就像您看到的一样)。

发行前是否还有其他标签。53?如果我的猜想是正确的,那么它们将不会出现在您的版本中。54 .hgtags