1

「git log --pretty=tformat」を使用して xml ファイル ログを作成しようとしています。ただし、コミットごとにファイルのリストを取得するのに問題があります。

例:私はこのコマンドを使用します

$echo '<?xml version="1.0"?>' > out.xml
$echo '<git>' >> out.xml
$git log   --pretty=tformat:'    <commit>%n        <h1>%s</h1>%n    </commit>'  --name-only  >> out.xml
$echo '</git>'>> out.xml

出力:

    <?xml version="1.0"?>
<git>
    <commit>
        <h1>Commit 1</h1>
    </commit>
    <commit>
        <h1>Commit 2</h1>
    </commit>
    <commit>
        <h1>Commit 3</h1>
    </commit>
</git>

ファイルのリストで commit タグの横にタグを追加したいので、最終的な出力は次のようになります

    <?xml version="1.0"?>
    <git>
        <commit>
            <h1>Commit 1</h1>
            <list>file1</list>
        </commit>
        <commit>
            <h1>Commit 2</h1>
            <list>file2</list>
        </commit>
        <commit>
            <h1>Commit 3</h1>
            <list>file3</list>
        </commit>
    </git>  

--name-only を試してみましたが、ファイルはリストされますが、出力をフォーマットできません。

どんな助けでも大歓迎です。

4

2 に答える 2

4

これはあなたが探しているものではないかもしれませんが、スクリプトは簡単です。以下は、非効率的ですが機能する実装の 1 つです。注意して実行してください。履歴全体に対して動作します。2 行目を に変更してrevlist=$(git rev-list -10 HEAD)、最後の 10 件のコミットのみで機能することを確認します。また、上記の例に従って、ファイルの下部に古いコミットが必要であると想定しています。時系列順にしたい場合は、--reverseフラグを追加します。git rev-list

#!/bin/sh
revlist=$(git rev-list HEAD)
(
    echo '<?xml version="1.0"?>'
    echo '<git>'
    for rev in $revlist
    do
            files=$(git log -1 --pretty="format:" --name-only $rev)
            echo '    <commit>\n        <h1>\c'
            echo "$(git log -1 --pretty="%s" $rev)\c"
            echo '</h1>'
            for file in $files
            do
                    echo "        <list>$file</list>"
            done
            echo '    </commit>'
    done
    echo '</git>'
) > out.xml
于 2012-06-19T03:57:42.037 に答える