【问题标题】:Mercurial: How to switch to a named branch if a tag has the same name?Mercurial:如果标签具有相同的名称,如何切换到命名分支?
【发布时间】:2011-06-12 12:57:51
【问题描述】:

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

我认为让我想到这一点的原因是,如果我们要编写一些脚本来自动构建特定修订版,我们只想指定一个标签或一个分支来构建。如果有人碰巧在标签和分支中使用了相同的名称,那么我们会在脚本获取正确修订时遇到问题。是确保它们是唯一的唯一解决方案,例如通过在名称前添加分支或标签?

【问题讨论】:

  • +1 用于前瞻性思考。您所描述的正是发生在我身上:当我指的是分支时,我创建了一个标签,然后删除了该标签,然后我的构建/部署脚本(将分支作为参数)开始做错事。

标签: version-control mercurial branch repository dvcs


【解决方案1】:

我认为你可以这样做:

hg update -r "limit(heads(branch(name)),1)"

它使用 revsets 功能(请参阅较新的 Mercurial 中的 hg help revsets)。

但如果是我,我会在殴打创建标签的人后删除标签。

【讨论】:

  • 似乎不起作用。它更新到提示(位于默认分支上)。如果我更新到另一个没有冲突的分支,它就可以工作。
【解决方案2】:

您可以通过解析hg branches 的输出来获得分支的最新版本。

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

$ hg tags
tip                            3:afb4026bfe32
popular                        1:cea974d8cfc4
$ hg branches
default                        3:afb4026bfe32
popular                        2:aa7ede2bb3f6

在类似 bash 的 shell 中,您可以通过以下方式获得 branch popular 的尖端修订:

$ hg branches | grep popular | awk -F ':' '{print $2}'

使用hg tags 获取标签 修订版的工作方式类似。

现在您的脚本能够更新到有问题的分支/标签。

【讨论】:

  • 谢谢,我想这会起作用(只需将 -w 添加到 grep 即可完全匹配)。
  • 代替 bash 行,你也可以使用:$ hg log -b popular -l 1 --template '{node|short}\n' :-)
  • @ChristopheMuller,我发现这并不总是有效。您必须在当前修订的历史记录中拥有该分支。而这个答案在任何一种情况下都有效(尽管我使用 cut -d':' -f2 而不是 awk :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2022-07-06
  • 2021-08-19
  • 1970-01-01
相关资源
最近更新 更多