2017-06-01 10 views
1

影響を受ける(パス)著者、日付、コメント、およびファイルを含むJSON形式のフォルダのGitHub履歴を出力しようとしています。私はすべてを成し遂げることができますが、次のコマンドでファイル:日付、名前コメント、およびファイルを含むJSONとしてのGitHub履歴

git log --pretty=format:'{%n "commit": "%H" %n "author": "%aN <%aE>",%n "date": "%ad", %n "message": "%f" %n },' [email protected] | perl -pe 'BEGIN{print "["}; END{print "]\n"}' | perl -pe 's/},]/}]/' >log.json 

は、ファイル名が--name-のみlogコマンドで使用することができ取得するには、私は本当にとしてJSONでそれを得ることができません配列または "ファイル"。私は今の私のはここです:

git log --name-only --pretty=format:'{%n "commit": "%H" %n "author": "%aN <%aE>",%n "date": "%ad", %n "message": "%f" %n },' [email protected] | perl -pe 'BEGIN{print "["}; END{print "]\n"}' | perl -pe 's/},]/}]/' >log.json 

これが生成します。

{ 
    "commit": "GUID" 
    "author": "My name <[email protected]", 
    "date": "Mon May 29 15:42:58 2017 +0300", 
    "message": "commit comment" 
}, 
/folder/subfolder/file.extention 
/folder/file.extention 

を私がコミットでJSON配列として指定されたファイルをしたいものの:

{ 
    "commit": "GUID" 
    "author": "My name <[email protected]", 
    "date": "Mon May 29 15:42:58 2017 +0300", 
    "message": "commit comment" 
    "files": [ 
    "/folder/subfolder/file.extention" 
    "/folder/file.extention" ] 
}, 
+0

[この](https://stackoverflow.com/questions/38106607/git-log-json-with-changed-files)質問をご覧くださいと[要点](https://gist.github.com/dmegorov/b64dcea2eed31e02c916fc6ed9111f4f)私は答えを –

+0

に改訂@DmitryEgorov。なんらかの理由でそれはうまくいかず、実行されるとファイル以外のすべてが表示されます。私はあなたがv3のpretty-format仕様で見つけられなかった%fを使用していることに気付きました。 – checho

+0

さて、私たちはチャットセッションでそれをデバッグすることができましたが、おそらく私が答えで提案したアプローチを試してみることをお勧めします。 –

答えて

2

ここでの主なトリックにあります生成された行とファイルリストは別々ですが、--pretty=format:パラメータです。私はすべての--pretty=format:行をインデントすることをお勧めします。ファイルは^(\S.*)正規表現と簡単に一致させることができます。

2番目のやり方は、ファイルリストの最後の項目から,を削除し、閉じ括弧を追加することです。最後の項目の後に空の文字列が続きます。この状態を検出するには、出力全体を1つの文字列(-0777)として読み取り、,\n\n正規表現とマッチさせます。

同じ-0777特徴は、私たちは、開口[それぞれ^$を照合することによって容易]を開閉を挿入することを可能にします。

最終的に我々は、以下のコマンドで終わる:

git log --name-only --pretty=format:' {%n "commit": "%H",%n "author": "%aN <%aE>",%n "date": "%ad", %n "message": "%f", %n "files": [' [email protected] \ 
    | perl -pe 's/^(\S.*)/  "$1",/' \ 
    | perl -0777 -pe 's/^/[\n/; s/,\n\n/\n ]},\n/; s/,$/\n ]}\n]/' 
+0

ちょうど私が探していたニース、フォーマットを少し変更しました 'git log --name-only --pretty = format: '{%n"コミット ":"%H "、%n"著者 ":" "%aN <%aE>"、%n "日付": "%ad"、%n "メッセージ": "%f"、%n "ファイル":['$ @ \ | perl -pe 's/^(\ S。*)/ "$ 1"、/' \ | perl -0777-pe 's |^| [\ n |; s |、\ n \ n | \ n]}、\ n | g; s |、$ | \ n]} \ n] | '' –

関連する問題