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 changset创建(或修改)的标记的名称?_Mercurial_Tags - Fatal编程技术网

如何获取Mercurial changset创建(或修改)的标记的名称?

如何获取Mercurial changset创建(或修改)的标记的名称?,mercurial,tags,Mercurial,Tags,我正在开发一个应用程序,它从Mercurial存储库中建立了一个变更集数据库。通过运行hg log并解析输出,每隔一段时间读取任何新的变更集。当变更集在存储库中更新时,我们需要向数据库中的变更集添加标记信息 如果有人通过运行以下命令标记变更集: hg tag -r 1 mytag 第一个版本是使用mytag标记存储库,并创建一个新的变更集 如果我现在跑步: hg log -v -l 1 要获取最新变更集的详细信息,摘要字段显示“为变更集B669D03EAF1添加了标记mytag”。我可以解

我正在开发一个应用程序,它从Mercurial存储库中建立了一个变更集数据库。通过运行hg log并解析输出,每隔一段时间读取任何新的变更集。当变更集在存储库中更新时,我们需要向数据库中的变更集添加标记信息

如果有人通过运行以下命令标记变更集:

hg tag -r 1 mytag
第一个版本是使用mytag标记存储库,并创建一个新的变更集

如果我现在跑步:

hg log -v -l 1 
要获取最新变更集的详细信息,摘要字段显示“为变更集B669D03EAF1添加了标记mytag”。我可以解析它并获得标记的名称和标记的变更集的哈希

但是,如果变更集带有注释标记,例如

hg tag -r 1 mytag -m "my comment"
hg log输出中的summary字段被“my comment”覆盖,并且似乎没有任何方法可以找出此变更集添加了哪个标记

我已经查看了hg log--template变量,但是似乎只有与当前变更集上的标记相关的变量,而不是由当前变更集添加或修改的标记

我开始使用hg annotate.hgtags。此命令的输出将每个标记映射到创建的修订版,但是.hgtags文件不包括添加到远程存储库的标记,即使在拉取和更新之后也是如此


或者,我可以通过定期查询hg tags的输出来维护标记列表,并在这些更改时更新更改集,但我希望会有更高效(或更简单)的更改集直接从修订版中获取标签名称的方法。

hg-tags
是检查repo中标签的自然方式

hg标签-v
将帮助您区分本地标签和全局标签

如果您仍然想使用
hg log
变体,您可以使用fresh Mercurial

hg日志--模板“{if(tags,{rev}{tags}\n')}”

输出几乎与hg标签相同,但可以限制为缩短列表

另外,如果添加的新标签总是只针对比现有标签更多的新变更集,那么您可以使用

hg log-r提示--模板“{latesttag}\n”

更改后的输出将意味着“新标签出现在存储库中”

最后一个音符

您可以(在某种程度上)检测“谁”和“何时”创建编辑的标记。它将不仅仅是单个命令+命令之上的一些逻辑,而是(用于测试的HGGit存储库)


对于变更集中的任何(本地创建的或从相关回购中提取的)标记,可以从变更集N+1的日志中提取作者身份

为每个看起来不正确的变更集创建标记。你能详细说明一下导致你这么做的原因吗?为什么不使用changesetid作为主键呢?我没有为每个变更集创建标记。我们的应用程序(一个持续集成应用程序)在存储库中显示一个变更集表。我需要为每个变更集行显示任何标记。目前,我们每30秒轮询一次存储库,并使用hg日志检索最新的变更集。由于我们需要支持的存储库非常大,所以我们只能从性能方面获得最新的变更集。有些变更集是用于标记的。该标记可能位于数据库中已存在的先前变更集上。我需要能够获得由当前变更集更新的标签的名称以及已被标记的变更集的修订号。如何将其存储在数据库中并不重要,但是我们有一个以changesetid作为主键的变更集表和另一个以changesetid作为外键的changesettags表。每次轮询存储库并更新changesettags的完整表时,使用hg标记检索标记的完整列表可能是唯一的解决方案。不过,我希望找到一种直接从修订版中获取标记名的方法,因为这将更加高效,并且适合我们用于从我们支持的其他存储库类型(如Git)检索标记的工作流。感谢您的输入。使用hg标签可能是唯一的解决方案。然而,正如我在问题的最后所说的,我希望找到一种直接从修订版中获取标记名的方法,因为这样会更有效。它也适用于我们用于从我们支持的其他存储库类型(如Git)检索标记的工作流。@sparkplug-添加到应答的替代方案替代方案仍然不能解决我的问题,但似乎通过hg log或其他方式获取变更集添加的标记名称并不是一种故障安全的方法。我不能假设这是最新的标签。我现在使用hg标记检索当前标记列表,并在将当前标记列表与存储的列表进行比较后更新数据库。现在唯一的问题是,每次我调用hg log时可能会有多个变更集,所以不可能知道是哪个变更集创建了标记,也不可能知道标记的实际创建时间以及是谁创建的。谢谢你的帮助。我将把这个标记为答案,因为似乎没有更好的解决方案。谢谢你提供的额外信息。我确实在使用.hgtags来确定给定的变更集是否是标记变更集。但是请注意,如果将--rev选项与hg标记一起使用,则标记更改集不一定是标记的更改集加1。
> hg tags
tip                              598:792955be68dd
0.4.0                            594:a3c3b8077cbe
0.3.4                            572:586b7aa96466
0.3.3                            473:9d44dafbb31c
0.3.2                            443:a9c0b93488d4
0.3.1                            436:556c3c586c4a
0.3.0                            433:fa3edeec7ed1
0.2.6                            377:46d390f404da
0.2.5                            364:bc72dd89c2c9
0.2.4                            358:b53421918a89
0.2.3                            348:5d39b98e5083
0.2.2                            322:a222399a59d7
0.2.1                            278:21ead8190d9c
0.2.0                            269:77d6c9eb02fb
0.1.0                            253:505d7cdca198

> hg log --template "{rev}: {author|person} {date|isodate}\n" .hgtags
595: Augie Fackler 2013-03-24 16:39 -0500
573: Augie Fackler 2012-11-01 09:11 -0500
474: Augie Fackler 2012-08-05 21:11 -0500
444: Augie Fackler 2012-01-27 11:52 -0600
437: Augie Fackler 2011-09-13 18:16 -0500
434: Augie Fackler 2011-09-09 16:17 -0500
378: Augie Fackler 2011-03-01 08:24 -0600
365: Augie Fackler 2010-11-02 08:37 -0500
359: Augie Fackler 2010-08-25 15:45 -0500
349: Augie Fackler 2010-07-05 11:56 -0500
323: Augie Fackler 2010-05-22 22:12 -0500
279: Augie Fackler 2009-12-26 13:46 -0600
270: Augie Fackler 2009-12-26 12:42 -0600
254: Augie Fackler 2009-10-17 20:12 -0400