日付とユーザーごとにグループ化されたGit変更ログ

日付とユーザーごとにグループ化されたGit変更ログ

現在の変更ログを生成するコードは次のとおりです。

svn2cl --linelen 78 --reparagraph --include-rev --group-by-day

私が得ることができる最も近いバニラオプションは

git shortlog --format='* [%h] %s' -w78,8,10

svn2cl出力をできるだけ近くにシミュレートするにはどうすればよいですか?

出力例:

2013-02-19  username

        * [r30695] path1: commit message
        * [r30691] path2, path3, path4: looooooooooooooooooooooooooooong
          commit message
        * [r30690] path1, path3: commit message

2013-02-19  other_user
        * ...

2013-02-18  username
        * ...

2つの問題が残っています。

  • メッセージをコミットする前に人が読めるパスのリストが含まれています。
  • 長いコミットメッセージをきれいに印刷する

答え1

別のソリューション正しい方向が与えられた。これまでの結果:

#!/usr/bin/env bash
while read -r -u 9 date name
do
    echo "$date  $name"
    echo
    GIT_PAGER=cat git log --no-merges --committer="$name" --since="$date 00:00:00 +0000" --until="$(date --date="$date + 1 day" +%Y-%m-%d) 00:00:00 +0000" --format='        * [%h] %s'
    echo
done 9< <(git log --no-merges --format=$'%cd %cn' --date=short | sort --unique --reverse)

真夜中の時間が必要です。何らかの理由で、基本的に1日の開始時刻ではなく現在時刻が設定されているようです。

2つの問題が残っています。

  • メッセージをコミットする前に人が読めるパスのリストが含まれています。
  • 長いコミットメッセージをきれいに印刷する

出力例:

2013-02-19  username

        * [f97bb5f] commit message
        * [f0e419d] looooooooooooooooooooooooooooong commit message
        * [070e50f] commit message

2013-02-19  other_user
        * ...

2013-02-18  username
        * ...

答え2

OS Xで動作するように、l0b0のソリューションを少し修正しました。

git-grouped-log () {
  while read -r -u 9 since name
  do
    until=$(date -j -v+1d -f '%Y-%m-%d' $since +%Y-%m-%d)

    echo "$since $name"
    echo

    GIT_PAGER=cat git log             \
      --no-merges                     \
      --committer="$name"             \
      --since="$since 00:00:00 +0000" \
      --until="$until 00:00:00 +0000" \
      --format='  * [%h] %s'

    echo
  done 9< <(git log --no-merges --format=$'%cd %cn' --date=short | sort --unique --reverse)
}

また、任意のファイルに保存できるため、関数でラップします。

関連情報