【问题标题】:How to make 'hg log --verbose' show files on multiple lines?如何使“hg log --verbose”在多行上显示文件?
【发布时间】:2012-01-28 10:33:49
【问题描述】:

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

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

【问题讨论】:

    标签: mercurial windows-xp


    【解决方案1】:

    查看更改文件信息的真正方法是使用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 行,您将使用自己的模板获得彩色输出。

    【讨论】:

    • 为了我的一生,我无法让它工作。我已经设置了 line 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 = the path
    • A-啊,你说 - 没有双引号。是的,我的错误......它现在有效。我没想到会这样。
    • Martin,说到 Mercurial,你是一个信息宝库! :)
    【解决方案2】:

    hg template help 文件的示例中有这个 gem。

    格式化列表,例如文件:

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

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

    【讨论】:

      【解决方案3】:

      我相信没有内置的方法可以实现这一点,但是一点 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:/ 搜索以 "Files:" 开头的行,并将以下搜索和替换仅应用于这些行
      2. s/ /\n /g 用换行符替换所有行,后跟空格。

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

      【讨论】:

        【解决方案4】:

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

        hg status --change REV
        

        【讨论】:

          【解决方案5】:
          • hg log --style changelog

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

          【讨论】:

            猜你喜欢
            • 2011-05-07
            • 2014-11-29
            • 1970-01-01
            • 1970-01-01
            • 2010-11-16
            • 2021-07-12
            • 2011-06-11
            • 2021-07-29
            • 1970-01-01
            相关资源
            最近更新 更多