我有一个存储库,它有两个分支:default和BranchA。这张图有点像这样:
default rev10 (Node: aaaaa)
default rev9 (Node: bbbbb)
default rev8
------------------BranchA rev7
------------------BranchA rev6
------------------BranchA rev5
default rev4
default rev3
default rev2
default rev1然后,我发现我想要将存储库克隆到修订版9,所以我使用“克隆到修订版”功能克隆了它。并将修订号填充为:bbbbb。
当我打开新的存储库时,BranchA的信息不在其中。存储库的图形如下:
default rev6 (Node: bbbbb)
default rev5
default rev4
default rev3
default rev2
default rev1我能拿回我的旧修订号吗?分支机构信息在哪里?
发布于 2011-12-20 17:53:18
当您提供对hg clone命令的修订时,它只将此变更集及其所有祖先作为新的头提取到新的存储库中。如果没有修订参数,所有变更集都将被克隆,编号也会被保留。然后,您可以使用hg strip来摆脱rev10。
发布于 2011-12-20 18:04:52
修订号对于给定的存储库是本地的。它们只是简单地告诉你变更集在存储库中的顺序-如果你有6个变更集,那么它们的编号必须是0-5。Mercurial不能“发明”额外的修订号来保持原始修订号的完整性。
修订号是本地的原因是Mercurial的分布式特性。假设我们都有上面的第二个存储库和6个变更集。如果我创建了一个新的变更集,那么它在我的存储库中将是7号。Mercurial只挑选下一个整数。
如果你还创建了一个变更集,那么你也会得到7号。现在,如果我从你那里拉出,那么你的7号就是我的8号--修订号会改变。这就是为什么在与他人通信时应该只使用全局唯一的变更集哈希。它们在推送/拉入后保持不变。
变更集散列实际上是40个十六进制字符:它们是160位的SHA-1散列值。Mercurial通常只显示前12个字符,除非添加--debug。您可以使用任何大小的前缀来指定变更集,因此
$ hg log -r 41453d55b481ddfcc1dacb445179649e24ca861d # full
$ hg log -r 41453d55b481 # normal
$ hg log -r 41453d # smaller也会做同样的事情。前缀只需要在存储库中是唯一的,12个字符通常就足以确保这一点。这是您在与同事交谈时需要参考的12个字符的散列值(“您能拉出41453d55b481并再次测试吗?”)或者在编写发行说明时(“错误已在41453d55b481中修复”)。
在像TortoiseHg这样的工具中,您可以使用View→Goto revision来跳转到使用其散列的变更集。
https://stackoverflow.com/questions/8573480
复制相似问题