我似乎无法让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}}格式。
答案 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"