Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial 如何移动标签?_Mercurial_Vcs Tags - Fatal编程技术网

Mercurial 如何移动标签?

Mercurial 如何移动标签?,mercurial,vcs-tags,Mercurial,Vcs Tags,我想开始在Mercurial中使用标记。我计划有一个“稳定”标签,它总是指向最后一次好的修订 据我所知,我可以通过hg tag stable标记当前变更集 移动标签的正确方法是什么?当我尝试运行hg tag stable时,它再次告诉我: 中止:标记“稳定”已存在(使用-f强制) 如果我强迫它,我会得到一个没有决议或评论的结果。i、 例如,它复制了旧标签。我甚至不知道为什么标签一开始就要放在那里不止一次;我只想将其更新为指向单个变更集。我没有看到这样的标记移动操作,但它本质上是复制某些内容并删除

我想开始在Mercurial中使用标记。我计划有一个“稳定”标签,它总是指向最后一次好的修订

据我所知,我可以通过
hg tag stable
标记当前变更集

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

中止:标记“稳定”已存在(使用-f强制)

如果我强迫它,我会得到一个没有决议或评论的结果。i、 例如,它复制了旧标签。我甚至不知道为什么标签一开始就要放在那里不止一次;我只想将其更新为指向单个变更集。

我没有看到这样的标记移动操作,但它本质上是复制某些内容并删除原始内容,因此:

hg tag --remove stable
hg tag -r newrevisionhash  stable
或者在标签上附加某种后缀,比如版本号。它还允许您跟踪您的发布

观点1:我一直认为Mercurial更多的是保存历史,而在git下你可以改变一些东西,在Mercurial中你必须覆盖它

意见2:标记稳定版本的另一种替代方法是将它们保存在一个分支中。我工作的地方
default
只保存稳定的代码。所有其他工作都在独立的分支中完成

用于更新标记的脏单行线:

current=`hg log -l1 --template '{node}'`; hg tag --remove stable; hg tag -r $current stable
似乎这种暴行甚至可以在
.hgrc
中添加为易变的别名:

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

我捕获了当前tip的值,因为标记移除/添加本身就是提交,所以它们会“移动”tip(看不出标记
tip
——这只是为了精确起见)。当然,有可能使它更漂亮,但这些对我来说很有用。

你应该使用命名分支,而不是移动标签。它们的功能几乎像一个移动的标签

你在上面写评论

所有的工作都在其他分支上完成,但当它们准备好后,我们将它们合并到“默认”中,然后执行集成测试。有一段时间,如果合并失败,“默认值”可能是fubar。因此,我希望在默认情况下保持一个稳定的标记,并且只在集成测试完成/验证后移动它

要解决这个问题,您需要一个额外的命名分支-称它为
stable
。然后以自己的速度将
default
上经过测试和批准的变更集合并到
stable
中。无论
default
是否有仍在测试中的变更集,当变更集X通过测试时,您都会这样做

$ hg update stable
$ hg merge X

将X提升为稳定的变更集。X的后代(在
默认值
上)保持不变,即它们尚未标记为稳定。

正如@gustimtoolate和@Martin Geisler已经指出的,您可以使用命名分支来容纳所有良好的修订(这也是我们在公司使用hg的方式)。另一种方法是使用,它充当附加到一个修订版上的可移动标签。

看起来像这样。奇怪。提交错误时,你链接到邮件列表上的自动帖子。当前状态为“已解决无效”,并且有一条注释解释了原因。(psst,嘿,你能为vcs标签创建一个wiki吗?@Will:我添加了一个小广告。我不是这方面的专家,也不是不同风投之间的差异,但我希望这就足够了。关于选项2,我们基本上就是这么做的。所有的工作都在其他分支上完成,但当它们准备好时,我们将它们合并到默认值中,然后执行集成测试。有一段时间,如果合并失败,“默认值”可能是fubar。因此,我希望在默认值上保留一个稳定的标记,并且只在集成测试完成/验证后移动它。版本号不起作用。那将是一个重要的PITA。我希望每个人在开始处理新问题之前更新到“稳定”;不能让他们不断查找最新版本号。版本号可以补充它,但我需要一个总是指最新的。对此,一定有某种常见的做法。总是移除标签是更好的选择,还是仅仅在那里放置几十个相同的标签?事实上,“移除”并没有移除任何东西。它只是在
.hgtags
中添加一个虚拟记录,然后当您添加一个新记录时,它会一如既往地复制虚拟标记。它不再列在例如
日志
输出中,因此它会做一些事情。就像我说的——也许跟踪每件事只是“变化无常的方式”。我不认为这会给我带来麻烦。关于版本号:我见过一个项目,其中部署日期的后缀是标记名(如果进展顺利的话)——有点多余,但对开发人员来说很方便。Mercurial的wiki说明了3种删除标记的方法,第三种方法可能会让您感兴趣:删除.hgtags中对标记名的所有引用(但这可能会混淆多头部标记冲突解决算法)()。我不认为删除
.htags
中的所有引用实际上会杀死标记。当我运行
hg tags
时,它仍然会出现。我想我会继续强制执行它,因为这似乎是最简单和最干净的解决方案。不过,我真的不喜欢使用错误版本的标记的可能性。我正在考虑这个问题。我认为这解决了跟踪发布的问题,但没有给开发人员一个目标,因为他们现在正在“稳定”分支上构建。他们需要合并回默认值或类似的版本。