如何在mercurial“hg log”中显示当前的工作版本?

时间:2011-07-21 18:28:31

标签: version-control mercurial logging

我希望我的“hg h”(hg日志别名的输出)显示我目前正在使用的修订版在历史记录/日志的上下文中。

在我的.hgrc上,我有以下内容:

[alias]
h = log --template "{rev} {node|short} {date|shortdate} | [{author|user}] {desc|strip|firstline} :: {tags}\n"

以下是示例输出:

$ hg h
1 f130b4194c90 2011-07-21 | [slashfoo] added a comment :: tip
0 f4b4ec3c8c95 2011-07-21 | [slashfoo] initial commit ::

但是如果我更新到版本0,输出仍然是相同的:

$ hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

$ hg h
1 f130b4194c90 2011-07-21 | [slashfoo] added a comment :: tip
0 f4b4ec3c8c95 2011-07-21 | [slashfoo] initial commit ::

所需的输出示例如下:

$ hg h
1 f130b4194c90 2011-07-21 | [slashfoo] added a comment :: tip
0 f4b4ec3c8c95 2011-07-21 | [slashfoo] initial commit :: [working]

注意:[working]不是标签,只是我的工作版本,我更新的版本。

另一个例子可能是:

$ hg h
1 f130b4194c90 2011-07-21 | | [slashfoo] added a comment :: tip
0 f4b4ec3c8c95 2011-07-21 |X| [slashfoo] initial commit ::

我使用hgbook关于“自定义Mercurial的输出”的条目来定制我的“hg h”输出http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html

我想做的事情的替代方案可能是:

  1. 使用graphlog扩展并执行hg h -G,以便@表示当前正在进行的修订
  2. 使用hg id了解我的修订
  3. 使用hg parents通过一些额外信息了解我的修订
  4. 但只有替代#1向我显示了上下文,但是hg log -G和别名比我想要的输出更“紧凑”。

    以下是替代#1

    输出的示例
    $ hg h -G
    o  1 f130b4194c90 2011-07-21 | [slashfoo] added a comment :: tip
    |
    @  0 f4b4ec3c8c95 2011-07-21 | [slashfoo] initial commit ::
    

    这个问题与How can I find my working revision in mercurial类似,但我想在上下文中以紧凑的方式(即没有-G)

3 个答案:

答案 0 :(得分:2)

hg log --rev $(hg id -i | sed 's/.$//')

答案 1 :(得分:1)

在类似bash的环境中,下面的bash-alias小怪物可以解决这个问题:

alias hgh='hg log -G --template "{rev} {node|short} {date|shortdate} | [{author|user}] {desc|strip|firstline} :: {tags}\n" | grep -v "^[|/\\ ]*$" | sed -e "s,^[o|/\\ +-]*,," -e "s,^@ *\(.*\),\1 [working]," | less'

它使用-G选项和grep以及sed去除所有图形内容,@标记除外,[working]标记被{{1}}替换行尾的标记。

不可否认,这是一个有效但难看的解决方案。使用纯Mercurial命令和选项会好得多,但看起来模板系统不能提供你想要的东西。

作为旁注,您可能希望查看我写的compass extension - 而不是您正在寻找的内容,但它也有助于在存储库中查看您当前的上下文。

答案 2 :(得分:0)

使用revision set选择所需的更改集。如果你添加

-r "limit(.::, 4) + last(::., 4)"

到您的别名的末尾,然后您将看到工作副本父修订版加上上下文之前和之后的三个更改集。

不幸的是,没有任何迹象表明工作副本父版本在输出中的位置 - 当你处于提示时它将位于顶部,当你在其他地方时,它将位于中间位置历史。