web-dev-qa-db-fra.com

Comment puis-je faire un ordre de journal git basé sur l'horodatage de l'auteur?

J'utilise un _ assez complexe git-log commande impliquant --date-order pour obtenir un aperçu de l'état de mon référentiel; mais malheureusement, --date-order semble utiliser la date committer, pas la date author. Cela signifie que chaque fois que je mets à jour mes branches de sujet en les rebasant sur le courant en amont, je perds l'ordre chronologique utile dans mon git-log des validations relatives dans mes branches de sujet (c'est-à-dire que chaque branche devient une seule longue ligne, car toutes ses validations ont été rebasées en horodatages de committateur séquentiels et presque identiques.)

Si je pouvais obtenir git-log pour commander les validations par l'horodatage auteur au lieu de l'horodatage committer, cela serait résolu. Quelqu'un connaît-il un moyen de le faire?


Pour ceux qui visitent ce site à partir des résultats de Google, vous voudrez peut-être examiner la solution de josephdpurcell (et article de blog approfondi !), Ci-dessous. C'est assez excellent, si vous cherchez un standard git-log sortie de style, multi-lignes, avec des messages détaillés sur chaque commit.

Malheureusement, je dois maintenant 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 dans "--graph mode ", et je dois faire git-log lui-même fonctionne dans l'ordre auteur-date. Pour autant que je sache, cela est complètement impossible à faire de l'extérieur git-log, car git-log lui-même gère l'ordre et l'impression des graphiques.

Un script ou un correctif pour git-log, peut être nécessaire, semble-t-il. Je vais laisser ceci ouvert jusqu'à ce que quelqu'un puisse soit 1. écrire un tel script, soit 2. nous pouvons parler aux auteurs git d'inclure un --author --date-order combinaison de drapeaux. (=


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

glog output

51
ELLIOTTCABLE

git version 1.8.4 a ajouté un --author-date-order argument à git log; selon les notes de version , "la sortie est triée par topologie et les validations dans des histoires parallèles sont montrées mélangées en fonction de l'horodatage de l'auteur."

64
M Somerville

D'accord, cela m'a pris beaucoup de temps pour comprendre ( détails ). Bref, j'ai trouvé de nombreux exemples 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.

23
josephdpurcell

--date-order/--topo-order contrôle vraiment juste l'ordre des validations dans une liste de révision lorsque vous visualisez plusieurs branches en parallèle. La relation "x est un parent de y" est toujours respectée, même si l'horodatage de votre auteur/auteur est dans un passé ou un futur lointain.

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

10
jørgensen

En partant de ce que jørgensen a suggéré, il existe une solution "one-liner" qui peut vous donner ce que vous recherchez. Formaté ici pour une visualisation plus facile. 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
2
Nate