如何使'hg log --verbose'在多行显示文件?

时间:2011-12-27 10:28:32

标签: mercurial windows-xp

默认情况下,变更集中更改的所有文件都在同一行,这使得它们很容易跳过一两个,并且难以阅读。

如何让每个文件单独显示?

5 个答案:

答案 0 :(得分:12)

查看有关已更改文件的信息的真实方法是使用hg status。这显示了在修订版100中修改的文件:

$ hg status -c 100

但是如果你也希望得到日​​志消息,那么hg log当然是一个自然的起点。不幸的是,没有内置开关会使每行显示一个文件。

但是,hg log的输出由template system控制,您可以为它编写自己的样式。默认样式为here,您可以通过更改

进行自定义以执行所需操作
file = ' {file}'

file = '{file}\n'

然后将新样式保存为my-default.style并添加

[ui]
style = ~/path/to/my-default.style

到你的配置文件。这为每行提供了一个文件,它甚至可以在文件名中有空格时使用。

我发现了一个问题:你在hg log输出中丢失了颜色。事实证明,Mercurial在这里作弊!它实际上并不使用我在生成日志输出时显示的默认模板。它根本不使用任何模板系统,它只是使用直接代码生成输出,因为这更快。问题是颜色扩展仅适用于硬编码模板。当您切换到自定义模板并从而调用模板引擎时,您将丢失颜色输出。

但是,您可以通过将ANSI escape codes直接插入模板(在类Unix系统上)来恢复颜色。改变

changeset = 'changeset:   {rev}:{node|short}\n{branches}...

changeset = '\033[33mchangeset:   {rev}:{node|short}\033[0m\n{branches}...

执行该操作并硬编码变更集的黄色标题行。同时调整changeset_verbosechangeset_quiet行,您将使用自己的模板进行彩色输出。

答案 1 :(得分:5)

hg template help文件的示例中包含此gem。

  

格式列表,例如文件:

     

$ hg log -r 0 --template "files:\n{files % ' {file}\n'}"

这适用于Windows而无需任何翻译。

答案 2 :(得分:2)

我认为没有内置的方法来实现这一点,但是一些sed(也可用于Windows:http://gnuwin32.sourceforge.net/packages/sed.htm)可以提供帮助:

hg log --template "Rev: {rev}:{node}\nDate: {date|isodate}\nFiles: {files}\n\n" -l 10 | sed -e '/^Files:/s/ /\n  /g'

输出:

Rev: 1:2538bd4661c755ccab9b68e1d5e91144f6f97d33
Date: 2011-12-20 15:47 +0100
Files:
  test1.txt

Rev: 2:853a6f3c505308c9babff5a5a2f1e09303f1689c
Date: 2011-12-20 15:44 +0100
Files:
  test2.txt
  test3.txt

sed -e '/^Files:/s/ /\n /g'的解释:

  1. /^Files:/搜索以“文件:”开头的行,并应用以下搜索并仅替换为这些行
  2. s/ /\n /g用换行符替换所有行,后跟空格。
  3. 当文件名包含空格时,此解决方案无效。

答案 3 :(得分:0)

  • hg log --style changelog

OR

  • hg log --template "Description: {desc}\n" - 支持的关键字如desc,文件等列在here

答案 4 :(得分:0)

要查看修订中更改的所有文件,请使用:

hg status --change REV