【发布时间】:2012-01-28 10:33:49
【问题描述】:
默认情况下,变更集中所有更改的文件都在同一行,这使得它们很容易跳过一两个,并且难以阅读。
如何让每个文件单独显示一行?
【问题讨论】:
标签: mercurial windows-xp
默认情况下,变更集中所有更改的文件都在同一行,这使得它们很容易跳过一两个,并且难以阅读。
如何让每个文件单独显示一行?
【问题讨论】:
标签: mercurial windows-xp
查看更改文件信息的真正方法是使用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_verbose 和changeset_quiet 行,您将使用自己的模板获得彩色输出。
【讨论】:
style = "the path"?令人惊讶的是,Mercurial 配置文件中没有引用配置值,所以它应该是 style = the path。
hg template help 文件的示例中有这个 gem。
格式化列表,例如文件:
$ hg log -r 0 --template "files:\n{files % ' {file}\n'}"
这适用于 Windows,无需任何翻译。
【讨论】:
我相信没有内置的方法可以实现这一点,但是一点 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'的解释:
/^Files:/ 搜索以 "Files:" 开头的行,并将以下搜索和替换仅应用于这些行s/ /\n /g 用换行符替换所有行,后跟空格。当文件名包含空格时,此解决方案将不起作用。
【讨论】:
要查看修订中更改的所有文件,请使用:
hg status --change REV
【讨论】:
【讨论】: