【问题标题】:Problem of hg clone src#tag desthg clone src#tag dest的问题
【发布时间】:2011-05-22 17:09:31
【问题描述】:

我有一个名为 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

所以看起来克隆的存储库丢失了 changset#15。我的理解是 hg clone src#tag dest 应该克隆我需要的标签。但是这个操作不能克隆做标记的 changeset#14 的子节点。所以我所做的就是使用命令

hg clone master hotfix_1.0.1 -u 1.0

我不喜欢这个命令。如果主存储库很大,而我只想修复旧版本,那么克隆和推送更改会浪费时间。

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

谢谢...

【问题讨论】:

  • 可能与我的question 重复。我在我的一个 cmets 中说过,一个预克隆和预拉钩子来更改 rev 参数以包含标签变更集(如果它是唯一的孩子)将是最好的解决方案,但我从来没有机会真正做到这一点.

标签: mercurial


【解决方案1】:

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

Mercurial recommends 最后给出的解决方案。性能问题的一种可能的缓解方法是保留(根据需要拉取)您不修改的单个 master 克隆。然后,(根据需要)在本地克隆并更新到所需的版本。克隆将(假设相同的卷和现代文件系统)使用hard links,最大限度地减少所需的复制。

【讨论】:

    猜你喜欢
    • 2011-01-24
    • 2011-05-27
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多