如何移动标签?

mpe*_*pen 7 mercurial vcs-tags

我想开始在Mercurial中使用标签.我计划有一个"稳定"的标签,总是指向最后一个好的修改版.

据我了解,我可以通过标记当前的变更集hg tag stable.

移动标签的正确方法是什么?当我再试hg tag stable一次时,它会告诉我:

abort:标签'stable'已经存在(使用-f强制)

如果我强迫它,我会得到这个没有解决方案或评论的错误.即,它复制旧标签.我甚至不知道为什么标签首先需要在那里不止一次; 我只想更新它以指向单个变更集.

gue*_*ate 12

我没有看到这样的标签'移动'操作,但它本质上是复制一些东西并删除原始的,所以:

hg tag --remove stable
hg tag -r newrevisionhash  stable
Run Code Online (Sandbox Code Playgroud)

或者为您的代码添加某种后缀,例如版本号.它还允许您跟踪您的版本.

意见1:我总是认为mercurial更多是关于保存历史,而在git下你可以改变一些东西,在mercurial中你必须改写它.

意见2:标记稳定版本的另一种选择是将它们保留在一个分支中.我工作的地方default只有稳定的代码.所有其他工作都是在孤立的分支机构完成

要更新标签的脏单行:

current=`hg log -l1 --template '{node}'`; hg tag --remove stable; hg tag -r $current stable
Run Code Online (Sandbox Code Playgroud)

似乎这种暴行甚至可以作为mercurial别名添加到.hgrc:

[alias]
movetag=!(current=`hg log -l1 --template '{node}'`; $HG tag --remove stable; $HG tag -r $current stable)
Run Code Online (Sandbox Code Playgroud)

我捕获当前提示的值,因为标签删除/添加本身是提交,因此它们"移动"提示(不能看到标记有任何错误tip- 它仅用于精确度).肯定有可能使它更漂亮,但那些对我有用.


Mar*_*ler 7

您应该使用命名分支,而不是使用移动的标记.它们的功能几乎就像移动标签.

你在上面的评论中写道

所有工作都在其他分支上完成,但是当它们准备就绪时我们将它们合并为"默认",然后执行集成测试.如果合并不好,有一段时间"默认"可能会变得很复杂.因此,我希望在默认情况下保持稳定的标记,并且仅在完成/验证集成测试后移动它.

要解决这个问题,你需要一个额外的命名分支 - 调用它stable.然后合并的测试和批准的变更defaultstable你自己的步伐.如果default还有仍在测试的变更集,那么当变更集X通过测试时,你就可以了

$ hg update stable
$ hg merge X
Run Code Online (Sandbox Code Playgroud)

将X推广为稳定的变革集.X(on default)的后代保持不变,即它们尚未标记稳定.