Comment puis-je créer un ordre de journalisation basé sur l’horodatage de l’auteur?

J’utilise une commande git-log assez complexe impliquant --date-order pour avoir un aperçu de l’état de mon repository; mais malheureusement, --date-order semble utiliser la date du committer , pas la date de l’ auteur . Cela signifie que chaque fois que je met mes twigs à jour en les rebasant en amont, je perds l’ordre chronologique utile dans mon git-log des commits relatifs dans mes twigs de sujet (chaque twig devient une longue ligne unique). , parce que tous ses commits ont été rebasés sur des horodatages séquentiels et presque identiques.

Si je pouvais obtenir que git-log ordonne les commits par l’horodatage de l’ auteur au lieu de l’horodatage du committer , cela serait résolu. Est-ce que quelqu’un sait comment faire ça?


Pour ceux qui visitent ceci à partir des résultats de Google, vous voudrez peut-être examiner la solution de josephdpurcell (et l’article de blog en profondeur !) Ci-dessous. C’est tout à fait excellent si vous recherchez une sortie standard de style git-log , multi-lignes, avec des messages détaillés sur chaque validation.

Malheureusement, j’ai maintenant besoin de modifier cette question, car je suis un idiot et je n’ai pas fourni d’informations plus précises sur mon cas d’utilisation: j’utilise git-log en « --graph mode», et je dois créer git-log lui-même fonctionne en auteur-date-ordre. Autant que j’ai pu le constater, cela est complètement impossible en dehors de git-log , car git-log gère lui git-log même le classement et l’impression des graphiques.

Un script, ou un patch pour git-log , peut être nécessaire, semble-t-il. Je vais laisser cela ouvert jusqu’à ce que quelqu’un puisse 1. écrire un tel script, ou 2. on peut parler aux auteurs de git en incluant une combinaison de drapeaux --author --date-order . (=


Pour référence, voici à quoi ressemble la sortie de ma fonction glog et ce que je dois réorganiser:

sortie glog

git version 1.8.4 a ajouté un --author-date-order à git log ; Selon les notes de version , “la sortie est sortingée topologiquement et les validations dans des historiques parallèles sont affichées mélangées en fonction de l’horodatage de l’auteur.”

Ok, cela m’a pris beaucoup de temps pour comprendre ( détails ). En bref, j’ai trouvé de nombreux exemples qui étaient incomplets ou incorrects. La commande suivante fait ce que je pense que vous attendez:

 $ git log --pretty="format:%at %C(yellow)commit %H%Creset\nAuthor: %an <%ae>\nDate: %aD\n\n %s\n" | sort -r | cut -d" " -f2- | sed -e "s/\\\n/\\`echo -e '\n\r'`/g" | tr -d '\15\32' | less -R 

Vous pouvez trouver ce script et d’autres dans Git Extras sur GitHub.

--date-order / --topo-order ne contrôle que l’ordre des commits dans une liste de révision lorsque vous affichez plusieurs twigs exécutant une autre. La relation “x is-a-parent of y” est toujours respectée, même si l’horodatage de votre committer / auteur se situe dans le passé ou le futur.

Vous auriez besoin de quelque chose comme git log --pretty="format:%at %H" | sort -g git log --pretty="format:%at %H" | sort -g , puis renvoyer les hachages dans git log .

En se fondant sur ce que jørgensen a suggéré, il existe une solution “à une seule ligne” qui peut vous donner ce que vous recherchez. Formaté ici pour faciliter la visualisation. Les améliorations sont les bienvenues!

 SORTED_GIT_LOGS=$(git log --pretty="format:%at %H" | sort -g | cut -d' ' -f2); \ IFS=$(echo -en "\n\b"); for LOG in $SORTED_GIT_LOGS; do \ git show --name-only $LOG; \ done | less