Version control Mercurial:如果标记具有相同的名称,如何切换到命名分支?

Version control Mercurial:如果标记具有相同的名称,如何切换到命名分支?,version-control,mercurial,branch,repository,dvcs,Version Control,Mercurial,Branch,Repository,Dvcs,我现在只是在玩Mercurial,这可能永远不会成为问题,但我只是创建了一个存储库并添加了一些更改。我在一个点上标记了它,然后在另一个点上创建了一个命名分支。标记和分支都具有相同的名称。如果我执行hg update name操作,它将切换到标记版本。除了在分支上使用修订号之外,还有其他方法切换到分支吗 我想让我想到这一点的是,如果我们要编写一些脚本来自动构建一个特定的修订版,我们只需要指定一个标记或一个分支来构建它。如果有人碰巧在标记和分支中使用了相同的名称,那么我们将在脚本获得正确修订时遇到问

我现在只是在玩Mercurial,这可能永远不会成为问题,但我只是创建了一个存储库并添加了一些更改。我在一个点上标记了它,然后在另一个点上创建了一个命名分支。标记和分支都具有相同的名称。如果我执行
hg update name
操作,它将切换到标记版本。除了在分支上使用修订号之外,还有其他方法切换到分支吗


我想让我想到这一点的是,如果我们要编写一些脚本来自动构建一个特定的修订版,我们只需要指定一个标记或一个分支来构建它。如果有人碰巧在标记和分支中使用了相同的名称,那么我们将在脚本获得正确修订时遇到问题。唯一的解决方案是确保它们是唯一的,例如,通过预挂起分支或对名称进行标记?

我认为您可以使用以下方法:

hg update -r "limit(heads(branch(name)),1)"
它使用revsets功能(请参阅更新的Mercurial中的hg help revsets)


但是如果是我,我会在打了创建标记的人的头和脖子之后删除标记。

通过解析
hg branchs
的输出,您可以得到分支的提示修订

考虑这种情况(一个分支和一个标记,都命名为
popular
):

在类似bash的shell中,您可以使用以下工具获得branch
popular
的提示修订版:

$ hg branches | grep popular | awk -F ':' '{print $2}'
使用
hg标记
,获得标记修订的效果类似


现在,您的脚本可以更新到有问题的分支/标记。

似乎不起作用。它将更新到提示(位于默认分支上)。如果我更新到另一个没有冲突的分支,它会工作的。谢谢,我想这会工作的(只需要在grep中添加-w以获得精确的匹配)。代替bash行,你也可以使用:
$hg log-b popular-l 1-template'{node | short}\n'
:-)@christomuller,我发现这并不总是有效的。您必须在当前版本的历史记录中包含该分支。然而这个答案在两种情况下都有效(尽管我使用了
cut-d':'-f2
而不是
awk
:)+1进行前瞻性思考。你所描述的正是发生在我身上的:当我指的是分支时,我创建了一个标记,然后删除了该标记,然后我的构建/部署脚本(将分支作为参数)开始做错误的事情。
$ hg branches | grep popular | awk -F ':' '{print $2}'