hg clone src#tag dest的问题

时间:2010-12-09 07:54:02

标签: mercurial

我有一个名为master的存储库,用于保存产品版本。它有几个标签(例如1.0,2.0,3.0)作为基线。当我想为一个版本创建热修复时,例如1.0。我使用命令如下:

hg clone master#1.0 hotfix_1.0.1
cd hotfix_1.0.1
hg tip

changeset:   14:b2492c2611a1
tag:         tip
user:        codingboy <codingboy@gmail.com>
date:        Thu Dec 09 14:03:23 2010 +0800
summary:     fix bug4

我发现提示版本是我需要的,但没有标记为1.0。它会导致我在hotfix_1.0.1中的更改​​无法推送到master。错误是

(abort) unknown 1.0 revision.

我检查主存储库。日志显示在下面

changeset:   15:3497c46cbc7f
tag:         tip
user:        codingboy <codingboy@gmail.com>
date:        Thu Dec 09 14:03:27 2010 +0800
summary:     Added tag 1.0 for changeset b2492c2611a1

changeset:   14:b2492c2611a1
tag:         1.0
user:        codingboy <codingboy@gmail.com>
date:        Thu Dec 09 14:03:23 2010 +0800
summary:     fix bug4
所以看来克隆的存储库丢失了#15。我的理解是hg clone src#tag dest应克隆我需要的标签。但是这个操作不能克隆变种集#14的子标签。所以我所做的就是使用命令

hg clone master hotfix_1.0.1 -u 1.0

我不喜欢这个命令。如果主存储库是巨大的,我只想修复旧版本,它将浪费时间来克隆和推送更改。

我是否有其他方法可以从一个基线或标签正确克隆一个存储库?

感谢...

1 个答案:

答案 0 :(得分:6)

由于Mercurial标记的设计,标记的修订版不包含该标记。换句话说,1.0并不“知道”它是1.0。

Mercurial recommends最后给出的解决方案。对性能问题的可能缓解是保持(根据需要拉动)您不修改的单个主服务器克隆。然后,(根据需要)在本地克隆并更新到所需版本。克隆将(假设相同的卷和现代文件系统)使用hard links,最小化所需的复制。