Git changelog groupé par jour et par user

Code actuel pour générer des journaux de modifications:

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

Le plus proche que je pourrais get avec les options de vanille est

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

Comment émuler la sortie svn2cl aussi près que possible?

Exemple de sortie:

 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 * ... 

Deux questions demeurent:

  • Inclure une list lisible par l'homme des paths avant le message de validation
  • Impression de messages longs à l'printing longue

Une autre solution a donné la bonne direction. Le résultat à ce jour:

 #!/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) 

Les heures de minuit étaient nécessaires. Il semble que pour une raison quelconque, il utilise l'heure actuelle au lieu du début de la journée par défaut.

Deux questions demeurent:

  • Inclure une list lisible par l'homme des paths avant le message de validation
  • Impression de messages longs à l'printing longue

Exemple de sortie:

 2013-02-19 username * [f97bb5f] commit message * [f0e419d] looooooooooooooooooooooooooooong commit message * [070e50f] commit message 2013-02-19 other_user * ... 2013-02-18 username * ... 

Pour que cela fonctionne sur OS X, j'ai apporté quelques modifications mineures à la solution de 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) } 

Je l'ai aussi enveloppé dans une fonction, parce que je peux ensuite l'save dans un file arbitraire.