Version control 如何克隆到修订版而不丢失修订号?

Version control 如何克隆到修订版而不丢失修订号?,version-control,mercurial,tortoisehg,Version Control,Mercurial,Tortoisehg,我有一个存储库,它有两个分支,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 rev

我有一个存储库,它有两个分支,
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
default rev6 (Node: bbbbb)
default rev5
default rev4
default rev3
default rev2
default rev1
然后我发现我想将存储库克隆到修订版9,所以我使用“克隆到修订版”功能进行了克隆。并将修订号填充为:
bbbbb

打开新存储库时,
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
default rev6 (Node: bbbbb)
default rev5
default rev4
default rev3
default rev2
default rev1

我能取回我的旧版本号吗?分支信息在哪里?

当您提供对
hg clone
命令的修订时,它只将此变更集及其所有祖先作为新头拉入新存储库。如果没有修订参数,则将克隆所有变更集,并保留编号。然后,您可以使用
hgstrip

将rev10从给定存储库中删除。它们只是告诉您存储库中变更集的顺序——如果您有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个字符通常足以确保。这是您在与同事交谈时(“您能拉41453d55b481并再次测试吗?”)或在编写发行说明时(“该错误已在41453d55b481中修复”)要引用的12个字符的哈希值


在像Ortoisehg这样的工具中,您可以使用View→ 转到修订以使用哈希跳转到变更集。

但是如何通过全局哈希找到版本?有两个字符串看起来像uniqe GUID,一个长版本和一个短版本,这是全局唯一的变更集?例如:ee8c73c77fd0和ee8c73c77fd0af80d85985ebf05a6286769ca60b,较长的是全局唯一的变更集哈希吗?顺便说一句,我正在使用Ortoisehg作为Hg的GUI。我已经用关于变更集哈希的信息更新了答案,我希望这会有所帮助!40个字符的字符串是GUID,12个字符的字符串只是一个前缀,因此它不像完整哈希那样唯一。