Mercurial 如何制作';hg log——冗长';在多行上显示文件?

Mercurial 如何制作';hg log——冗长';在多行上显示文件?,mercurial,windows-xp,Mercurial,Windows Xp,默认情况下,在变更集中更改的所有文件都在同一行,这使得它们很容易跳过一两个,并且很难读取 如何使每个文件单独显示在一行中?我认为没有内置的方法来实现这一点,但是一点sed(也适用于Windows:)可以帮助: hg log --template "Rev: {rev}:{node}\nDate: {date|isodate}\nFiles: {files}\n\n" -l 10 | sed -e '/^Files:/s/ /\n /g' 输出: Rev: 1:2538bd4661c755cc

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


如何使每个文件单独显示在一行中?

我认为没有内置的方法来实现这一点,但是一点sed(也适用于Windows:)可以帮助:

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'/^文件的解释:/s/\n/g'

  • /^Files:///code>搜索以“Files:”开头的行,并将以下搜索和替换仅应用于这些行
  • s//\n/g
    将所有行替换为换行符,后跟空格

  • 当文件名包含空格时,此解决方案不起作用。

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

    $ hg status -c 100
    
    但是,如果您也想要日志消息,那么
    hglog
    当然是一个自然的起点。不幸的是,没有内置的开关可以使它每行显示一个文件

    但是,
    hglog
    的输出由一个控件控制,您可以为它编写自己的样式。默认样式为,您可以通过更改自定义以执行所需操作

    file = ' {file}'
    

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

    [ui]
    style = ~/path/to/my-default.style
    
    到您的配置文件。这将为每行提供一个文件,甚至在文件名中有空格时也可以使用

    我意识到一个问题:在
    hg日志输出中丢失颜色。原来Mercurial在这里作弊!它实际上并没有使用我在生成日志输出时向您展示的默认模板。它根本不使用任何模板系统,它只是使用直接代码生成输出,因为这样更快。问题是,颜色扩展仅适用于硬编码模板。当切换到自定义模板并因此调用模板引擎时,将丢失颜色输出

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

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

    该技巧和硬编码是否为变更集设置黄色标题行。调整
    changeset\u verbose
    changeset\u quiet
    行,您将使用自己的模板获得彩色输出。

    • hg日志--样式更改日志

    • hg log--template“Description:{desc}\n”
      列出了支持的关键字,如desc、files等
      • 该文件的示例中包含此gem

        格式列表,例如文件:

        $hg log-r 0--模板“文件:\n{files%'{file}\n'}”


        这在Windows上运行,无需任何翻译。

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

        hg status --change REV
        

        就我的一生而言,我无法让它发挥作用。我已经设置了style=“path to my file\my style.default”行,Hg只是不断地说“abort:style not found:“path to my file\my style.default”…?你可能知道吗?你是否在文件名周围使用了双引号?如
        style=“the path”中所示“
        ?令人惊讶的是,Mercurial配置文件中没有引用配置值,因此它应该是
        style=path
        。A-ah,您应该知道-没有双引号。是的,我的错误。。。现在可以了。我没想到。马丁,你是Mercurial的信息宝库!:)
        changeset = '\033[33mchangeset:   {rev}:{node|short}\033[0m\n{branches}...
        
        hg status --change REV