サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

git log の出力を XML で [git log output to XML]

はじめに

 サポンテの現在の職場では、Subversion と Git の両方が使われています。svn コマンドには XML 出力のオプションがあり、git コマンドでも同様の出力を得たいという要件が発生しました。

 調べてみると、git log にそんなオプションは無いようです。そのかわり「--pretty オプションがあるから、好きにしたら良いよ!」という英語のサイトが見つかりました。たしかに...。そりゃそうだ。

XML 出力

 svn コマンドが出力する XML のフォーマットに合わせた出力を得るために無理やり一行で書くなら、次のようになるでしょうか。

echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"; echo "<log>"; git log --date=format:'%Y/%m/%d %H:%M:%S' --pretty=format:"<logentry revision=\"%h\"><author>%cn</author><date>%cd</date><msg>%s</msg></logentry>"; echo "</log>"

出力結果

 以下のような出力が得られます。

<?xml version="1.0" encoding="UTF-8" ?>
<log>
<logentry revision="5a87af1"><author>サポンテ</author><date>2024/03/17 14:46:50</date><msg>二回目のコミット。</msg></logentry>
<logentry revision="00ee9d9"><author>サポンテ</author><date>2024/03/17 14:28:12</date><msg>最初のコミット。</msg></logentry>
</log>

git log の部分だけ解説

  • %h ... 短いコミットの ID。長いコミット ID にしたい場合は %H を指定。
  • %cn ... コミット者。
  • %cd ... コミット日時。
  • %s ... コミットの題名。本文も入れたいなら %s%n%n%b
  • %n ... 改行。

 日付はそのままだと日本式にならないので --date=format:'%Y/%m/%d %H:%M:%S' を追加しました。