dump" git log --notes"壳管?

时间:2017-04-21 17:13:18

标签: git bash pipeline

我似乎无法让git log生成机器消费笔记。

git log将打开less作为寻呼机并显示备注。

git --no-pager log [--notes|--show-notes]不会显示笔记。

git --no-pager log --notes | less会显示备注。

git --no-pager log --notes | less | cat不会。

git log --notes > gitlog.txt有效,但我试图避免管理文件。

cat <(git log --notes)不会显示但正在使用临时文件

less -f <(git log --notes --oneline)会显示。

git log 1>&2 | cat 2>&1 | cat只是打开更少。

git log 2>&1 | cat无法正常工作

git log 2>&1 | cat 1>&2 | cat无法正常工作

帮助我如此困惑,是什么黑魔法导致我想要删除的部分数据,但显然只是在显示时间?

P.S。如果你对所有无用的猫的烦恼,想象一下perl / sed / grep / awk过滤器,最终我试图剥离一些新行,以便注释的值附加{{ {1}}格式。

1 个答案:

答案 0 :(得分:1)

使用git 2.12.2,我完全无法重现问题中描述的行为(re:未打印的笔记)。

也就是说,以下内容执行请求的操作,创建临时文件(在任何bash可以在编译时检测到/dev/fd/proc/self/fd支持的系统上) ,并生成单行输出,并在每行中附加注释:

#!/bin/bash

in_note=0
notes=
last_line=

while IFS= read -r line; do
  if (( in_note == 0 )) && [[ $line = "Notes:" ]]; then  ## at the start of a note
    in_note=1; continue
  fi
  if (( in_note == 0 )); then                            ## outside any note
    [[ $last_line ]] && printf '%s\n' "$last_line"
    last_line=$line
    continue
  fi
  if [[ $line = "" ]]; then                              ## at the end of a note
    in_note=0
    printf '%s|%s\n' "$last_line" "$notes"
    last_line=
    continue
  fi
  # all notes are prefixed by four spaces, so the below doesn't need extra spacing
  notes+="$line"                                         ## inside of a note
done < <(git log --oneline --notes)
[[ $last_line ]] && printf '%s\n' "$last_line"