2017-04-21 6 views
0

私はgit logに機械消費のためのメモを生成するように見えません。"git log --notes"をシェルパイプにダンプしますか?

git logは、lessをポケットベルとして開き、ノートが表示されます。

git --no-pager log [--notes|--show-notes]は表示されません。

git --no-pager log --notes | lessが表示されます。

git --no-pager log --notes | less | cat wont。

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フィルタを想像してみてください。最終的に私はノートの値がgit log --oneline形式の行を追加するようにいくつかの改行を取り除こうとしています。

+0

別々の 'git notes'ルックアップを考えましたか? –

+0

奇妙な、このコマンドは私のために働く: 'git --no-pager log --notes'。また、 '--notes'がデフォルトで存在すると信じています。' git --no-pager log'コマンドはどうでしょうか? GIT_PAGER = cat git log --notes' – odradek

+1

BTW、 'cat <(git log --notes)' **は実際には一時ファイルを作成しません。最近のOSでは '/ dev/fd/12'のように評価されます。これは単にファイルディスクリプタテーブルのエントリを参照するものです。 –

答えて

1

git 2.12.2では、質問に記載されている動作を再現することができません(ノートは印刷されません)。


によると、以下が要求された操作を実行し、は(bashはコンパイル時に/dev/fd又は/proc/self/fdサポートを検出できる任意のシステム上で)一時ファイルを作成しない、メモと1ライン出力を生成します

#!/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" 
関連する問題