如何在不丢失修订号的情况下克隆到修订版?

时间:2011-12-20 09:44:20

标签: version-control mercurial tortoisehg

我有一个存储库,它有两个分支defaultBranchA。图表有点像这样:

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,所以我使用“Clone to revision”函数克隆它。并将修订号填写为:bbbbb

当我打开新存储库时,BranchA的信息不在其中。存储库的图形如下所示:

default rev6 (Node: bbbbb)
default rev5
default rev4
default rev3
default rev2
default rev1

我可以取回旧的修订号吗?分支机构信息在哪里?

2 个答案:

答案 0 :(得分:2)

当您提供hg clone命令的修订时,它只将此变更集及其所有祖先作为新头部提取到新存储库中。如果没有修订参数,将克隆所有更改集,并且还会保留编号。然后,您可以使用hg strip删除rev10。

答案 1 :(得分:2)

修订号是给定存储库的本地编号。它们只是告诉您存储库中更改集的顺序 - 如果您有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这样的工具中,您可以使用查看转到修订版来使用其哈希跳转到变更集。