【问题标题】:sed: parse git --line-porcelain outputsed: 解析 git --line-porcelain 输出
【发布时间】:2013-01-14 16:48:04
【问题描述】:

这与this question 有关,但我认为需要单独提出一个问题。

git blame --line-porcelain 的输出是这样的

27ce485030bf872158ceb011e6bd775d2ead5eeb 9 36 1
author Joao Tavora
author-time 1358179206
committer Joao Tavora
committer-time 1358179206
summary initial commit
boundary
filename test.el
    (defun AB (space task next.task)
242020d0de6363d48d32465299d07239f0a9940f 19 37 1
author Joao Tavora
author-time 1358179709
committer Joao Tavora
committer-time 1358179709
summary reinstate declare
previous 11da1748d905aa9520ee3d6d9ac6a8712db0040f test.el
filename test.el
      (declare (ignore space))
cbfa1ec071dd30a27be82dd041ccc9c384e5ff60 11 38 2
author Joao Tavora
author-time 1358179273
committer Joao Tavora
committer-time 1358179273
summary use thingy
previous 69af7ace6e2b6c006c86e4fd91bf3c15ff8cec07 test.el
filename test.el
      (if (and (some.task.p (task (IP.TASK-thingy task)))

我将如何使用 sed(或 grep 或 awk)解析来过滤掉提交 sha 和提交时间?在上面的示例中,它应该产生:

27ce485030bf872158ceb011e6bd775d2ead5eeb 1358179206
242020d0de6363d48d32465299d07239f0a9940f 1358179709
cbfa1ec071dd30a27be82dd041ccc9c384e5ff60 1358179273 

我宁愿不依赖于 ruby​​,虽然 perl 单行可能没问题。

【问题讨论】:

    标签: git sed blame


    【解决方案1】:

    这可能对你有用(GNU sed):

    sed -r '/^[0-9a-f]{40}\b/!d;:a;/\ncommitter-time\b/bb;$!{N;ba};:b;s/\s+.*(\s.*)/\1/' file
    

    【讨论】:

    • 太棒了!我很快就会接受,只是想知道是否有人可以获得通用解决方案,即当我的代码包含看起来像提交的内容时不会中断的解决方案:-)
    • 如何将此 sed 命令更改为连接作者邮件而不是提交哈希?
    【解决方案2】:

    这可能是完全错误的事情,但试试这个:

    git shortlog --format="%H %ct" -- <filename>
    

    您可能还想用tail -n +2 在命令后用管道切断前几行。当然,这不会显示逐行更改,但我不确定您到底想要什么。

    【讨论】:

    • 我真的很想解析--line-porcelain 的输出,这完全给出了别的东西。
    【解决方案3】:

    我发现了

    git blame -l -e -t -- file-to-blame | awk '{print $1 " " $3}'
    

    几乎解决了我的问题,但我认为这样做是为了作者时间。而且我真的很想学习解析--line-porcelain 输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多