27

コンソールのテキスト行に続くコマンド出力

git log --pretty=format:"%h;%ai;%s" --shortstat
ed6e0ab;2014-01-07 16:32:39 +0530;Foo
 3 files changed, 14 insertions(+), 13 deletions(-)

cdfbb10;2014-01-07 14:59:48 +0530;Bar
 1 file changed, 21 insertions(+)

5fde3e1;2014-01-06 17:26:40 +0530;Merge Baz
772b277;2014-01-06 17:09:42 +0530;Qux
 7 files changed, 72 insertions(+), 7 deletions(-)

上記の形式をこのように表示することに興味があります

ed6e0ab;2014-01-07 16:32:39 +0530;Foo;3;14;13
cdfbb10;2014-01-07 14:59:48 +0530;Bar;1;21;0
5fde3e1;2014-01-06 17:26:40 +0530;Merge Baz;0;0;0
772b277;2014-01-06 17:09:42 +0530;Qux;7;72;7

これは、セミコロンで区切られた値を解析できる一部のレポートで使用されます。問題は、テキスト"\n 3 files changed, 14 insertions(+), 13 deletions(-)"(改行を含む) が3;14;13(改行なし) に変換されること"5fde3e1;2014-01-06 17:26:40 +0530;Merge Baz"です。その場合は欲しい;0;0;0

全体的な目標は、一定期間にわたるファイル変更統計を分析することです。git log のドキュメントを読みましたが、この形式でレンダリングするのに役立つ形式が見つかりませんでした。私が思いついたのは、上記のコマンドでした。

そのため、期待される形式を生成できるコマンドまたはシェル スクリプトは非常に役立ちます。

ありがとう!

4

7 に答える 7

5

git はプレーンな --format での統計情報をサポートしていません。これは恥ずべきことです :( しかし、それをスクリプト化するのは簡単です。

#!/bin/bash

format_log_entry ()
{
    read commit
    read date
    read summary
    local statnum=0
    local add=0
    local rem=0
    while true; do
        read statline
        if [ -z "$statline" ]; then break; fi
        ((statnum += 1))
        ((add += $(echo $statline | cut -d' ' -f1)))
        ((rem += $(echo $statline | cut -d' ' -f2)))
    done
    if [ -n "$commit" ]; then
        echo "$commit;$date;$summary;$statnum;$add;$rem"
    else
        exit 0
    fi
}

while true; do
    format_log_entry
done

私はそれがより良いスクリプト化できると確信していますが、ねえ-それは速くて汚いです;)

利用方法:

$ git log --pretty=format:"%h%n%ai%n%s" --numstat | ./script

指定した形式は防弾ではないことに注意してください。コミット サマリーにセミコロンが表示される場合があります。これは、そのような行のフィールド数を分割します。サマリーを行末に移動するか、何らかの形でエスケープすることができます。どのように実行しますか?

于 2014-01-15T17:26:39.397 に答える
4

これは を使用した 1 つのアプローチawkです。

awk 'BEGIN{FS="[,;]"; OFS=";"} /;/ {a=$0} /^ /{gsub(/[a-z(+-) ]/,"") gsub(",",";"); print a,$0}'

指定された入力に対して、次を返します。

ed6e0ab;2014-01-07 16:32:39 +0530;Foo;3;14;13
cdfbb10;2014-01-07 14:59:48 +0530;Bar;1;21
772b277;2014-01-06 17:09:42 +0530;Qux;7;72;7

そのような行にはまだ機能し5fde3e1;2014-01-06 17:26:40 +0530;Merge Bazていません3 files changed, 14 insertions(+), 13 deletions(-)

于 2014-01-15T12:46:18.487 に答える