2010-03-21 38 views
97

有没有更好的方法提取当前版本散列水银比打印当前Mercurial修订散列?

hg log -l1|grep changeset|cut -d: -f3

我的web应用程序部署脚本的一部分“标记”了上传的应用程序tarball及其独特的修订哈希。

+1

请注意,'hg log -l 1'为您提供最新的变更集,不一定是您当前更新的变更集!-f标志限制hg日志输出到他当前工作目录的祖先,所以'hg log -f -l1'更接近你想要的。 – waterproof 2015-01-13 19:55:51

回答

165

尝试:

hg id -i 

例子:

$ hg id -i 
adc56745e928 
+17

如果你想要下面的解决方案,如果你想完整的哈希使用:'hg --debug id -i'如果你想要模板支持使用'hg parent --template'{node}''不要使用'hg log - l 1',它是最新的存储库变更集,而不是当前的工作副本变更集。 – 2012-06-11 17:33:13

+7

不推荐在脚本中使用--debug,那么输出不太精心控制w/r/t向后兼容性。使用模板。如果你想用瓦特/日志来做,那么使用'.'点作为修订。 – 2012-06-12 18:07:25

+0

谢谢Ry4an我不知道“-r”。引用当前的工作副本修订版。这似乎是更好的举动,然后从“日志”切换到“父母”。 – 2012-06-13 15:52:47

7
hg log -l 1 --template '{node|short}\n' 

the docs,段落 “模板的基础知识” 和以下。

+2

我几乎想要这个,但是用了很长的哈希。将'lid'混淆到'log -l 1 --template'{node} \ n''实现了这一点 - 打印完整版本ID。 – 2011-04-21 14:13:39

+6

这将打印最近拉出的变更集。我们的工作目录可以更新为较旧的变更集。要打印我们更新的变更集,请使用“hg id”。唯一的问题是,“hg id”不支持模板,也没有打印长散列的选项(除非有人知道如何去做)。 – Eiver 2011-11-28 11:13:42

+1

正如Eiver所说的那样,这不会在您的工作副本中打印实际的修订版本,而只是存储库中的最新版本。因为使用这个解决方案可能会引入跟踪错误,所以我投下了这个方案。 – 2012-06-11 17:30:58

35
hg --debug id -i 

这将输出长哈希值,与是否有未提交的更改有加。

+0

这似乎是3.1.2中的默认值 – nickd 2015-04-30 17:03:14

+1

由于Ry4an的[评论]下调投票(http://stackoverflow.com/questions/2485651/print-current-mercurial-revision-hash#comment14377031_2485923)。 – 2015-11-26 14:19:41

16

您可以使用--template与父命令,我用它来获取长哈希:

hg parent --template '{node}' 
+0

hg手册页说'hg parents'是[DEPRECATED](https://www.selenic.com/mercurial/hg.1.html#parents),虽然也许你写这个答案时可能不是这种情况。如果有未提交的合并,则有[两个父修订](https://www.mercurial-scm.org/wiki/UnderstandingMercurial#line-157)。 – 2015-11-26 16:11:41

+0

有人可以告诉我们为什么父母不推荐使用,我们应该使用什么? – Vincent 2016-09-23 19:44:54

12

总结的答案,他们的反应,似乎这是 打印的最佳方式独特(未短形式)的当前版本标识符 :

hg log -l 1 --template '{node}\n' -r . 
+0

注意如果有[未提交合并](https://www.mercurial-scm.org/wiki/UnderstandingMercurial#line-157),'.'(点)只显示[第一个父母](https:/ /www.selenic.com/hg/help/revisions)工作组的两位家长。 – 2015-11-26 16:20:03

+0

你需要'-l 1'吗?似乎没有它的工作。 – aaaidan 2016-01-14 00:48:05

2

最具体的非过时的命令WHI由于--template存在CH可以,如果需要的是简洁,仅打印修订信息(被这个问题所暗示的):

hg log -l 1 -b . -T '{rev}:{node|short}\n'

或者哈希的独特的长形式:

hg log -l 1 -r . -T '{node}\n'

-b .branch(.)(分支名称点)means the current working directory branch-r .表示当前工作目录修订版,即documented,其中hg help revsets a nd hg help revisions

请注意,如果存在uncommitted merge,则.(点)仅显示工作组的两个父母的first parent

0

正如别人指出的,不要使用log -l

使用hg log -r .可以获取详细信息,而不是使用hg id,它们的输出受限且不支持模板。您还可以创建一个像here = log -r .这样的小别名,并使用hg here。如果你只想使用散列使用hg log -r . --template '{node}\n'