hg clone src#tag dest的问题

fee*_*ood 4 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
Run Code Online (Sandbox Code Playgroud)

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

(abort) unknown 1.0 revision.
Run Code Online (Sandbox Code Playgroud)

我检查主存储库.日志显示如下

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
Run Code Online (Sandbox Code Playgroud)

所以看来克隆的存储库丢失了#15.我的理解是hg clone src#tag dest应克隆我需要的标签.但是这个操作不能克隆变种集#14的子标签.所以我所做的就是使用命令

hg clone master hotfix_1.0.1 -u 1.0
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢...

Mat*_*hen 6

由于Mercurial标记的设计,标记的修订版不包含该标记.换句话说,1.0不会"知道"它是1.0.

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