如何在 Bitbucket 中取消标记

nig*_*d3r 8 tags mercurial release bitbucket

虽然 Bitbucket 的 UI 允许标记 Mercurial 存储库的给定提交,但我找不到一种方法(基于 Web 或命令行)来删除标记,该标记可能会被错误添加(实际上,没有确认)提示添加)。当用于控制发布时,这种错误可能是一个主要问题。

mar*_*o.m 2

Mercurial 对所有命令都有内置的帮助机制。在这种情况下,hg help tag 显示:

options:

 -f --force        force tag
Run Code Online (Sandbox Code Playgroud)

让我们添加一个标签,然后移动它:

$ hg init foo
$ cd foo/
$ touch a
$ hg add a
$ hg commit -m 'add a'
$ hg tag 0.1.0
Run Code Online (Sandbox Code Playgroud)

历史是怎样的?

$ hg log -G
@  changeset:   1:9352d8865ee5
|  tag:         tip
|  summary:     Added tag 0.1.0 for changeset a4cab63b7c86
|
o  changeset:   0:a4cab63b7c86
   tag:         0.1.0
   summary:     add a
Run Code Online (Sandbox Code Playgroud)

啊,我们改变主意了。我们缺少一个文件。让我们添加它(然后添加一些内容到 hg 历史记录中):

$ touch b
$ hg add b
$ hg commit -m 'add b'
Run Code Online (Sandbox Code Playgroud)

我们想将0.1.0标签移至尖端。咱们试试吧:

$ hg tag 0.1.0
abort: tag '0.1.0' already exists (use -f to force)
Run Code Online (Sandbox Code Playgroud)

挺清楚的。让我们再试一次:

hg tag --force 0.1.0
Run Code Online (Sandbox Code Playgroud)

历史是什么?

hg log -G
@  changeset:   3:04b62f2a9b16
|  tag:         tip
|  summary:     Added tag 0.1.0 for changeset 3d8bb8a977e6
|
o  changeset:   2:3d8bb8a977e6
|  tag:         0.1.0
|  summary:     add b
|
o  changeset:   1:9352d8865ee5
|  summary:     Added tag 0.1.0 for changeset a4cab63b7c86
|
o  changeset:   0:a4cab63b7c86
   summary:     add a
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,标签已移动到新位置。

出于好奇,标签是如何存储的?在一个简单的文本文件中:

$ cat .hgtags
a4cab63b7c868638e51a45d93443b1a0eb56e1e4 0.1.0
a4cab63b7c868638e51a45d93443b1a0eb56e1e4 0.1.0
3d8bb8a977e6be693a30c30d7d7675d04623690f 0.1.0
Run Code Online (Sandbox Code Playgroud)

如果.hgtags文件有多个具有相同标签的条目,则最后一个获胜。合并分支时经常会看到这种情况。

留给读者的是:显然这些变化是局部的。您必须推送到 bitbucket 才能将它们公开。

编辑

要回答附加问题:有没有办法删除标签或为同一提交重命名标签?

最安全的方法不是重命名标签,而是为同一个提交添加新的标签名称(使用hg tag -r REV)。换句话说:一次提交可以关联任意多个标签。

也可以删除标签,只需从 中删除相应的行即可.hgtags。正确处理这一点很微妙,因为每个分支都有该文件的一个副本,并且它可能会作为合并的结果返回。