我有一个名为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
我不喜欢这个命令。如果主存储库是巨大的,我只想修复旧版本,它将浪费时间来克隆和推送更改。
我是否有其他方法可以从一个基线或标签正确克隆一个存储库?
感谢...
答案 0 :(得分:6)
由于Mercurial标记的设计,标记的修订版不包含该标记。换句话说,1.0并不“知道”它是1.0。
Mercurial recommends最后给出的解决方案。对性能问题的可能缓解是保持(根据需要拉动)您不修改的单个主服务器克隆。然后,(根据需要)在本地克隆并更新到所需版本。克隆将(假设相同的卷和现代文件系统)使用hard links,最小化所需的复制。