web-dev-qa-db-fra.com

Comment faire en sorte que git affiche les commits dans une plage de dates spécifiée pour la date de l'auteur?

Apparemment this :

git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"

les filtres sont validés en fonction de la date du committeur . Comment puis-je lui montrer des commits pour une plage de dates d'auteur spécifiée?

46
Mr_and_Mrs_D

Vous ne pouvez pas, du moins, pas seulement à Git. (Rappel aux autres visiteurs de cette question: il ne s’agit pas de visualisation de la date de l’auteur, c’est la sélection s’engage par de la date de l’auteur, à la --since/--after Et --until/--before. Ces sélecteurs utilisent la date committer, pas la date de l'auteur. Prenons comme exemple extrême un commit effectué "maintenant", de sorte que sa date de committage soit dans les années 2000, mais antidatée dans le champ auteur-date à un jour de l'année 1999. Si votre plage de sélection est "à tout moment proche du tournant de le siècle "vous désélectionnerez ce commit, car sa date de committer est" maintenant ", plus de dix ans après 1999.)

Je considère cela comme un petit bug dans Git: vous devriez pouvoir lui demander d’utiliser le champ date de l’auteur partout où vous pouvez le demander. Ceci est facile avec le formatage du journal, puisque nous avons %ad Et %cd Et similaires, mais impossible avec sélection de commit . Le plus proche de nous est que git rev-list Peut trier par auteur-date (dans le topo-tri général).

Un commutateur global dans git rev-list, Comme --use-author-date, Fonctionnerait comme un patch simple et ne serait pas trop difficile à ajouter à Git, mais je pense qu'il serait préférable d'avoir --min-author-age et --max-author-age ou similaire, et un drapeau "trier par date de l'auteur" (indépendant du drapeau général --topo-order, de sorte que le paramètre les deux flags a le même effet que --author-date-order).

Pour contourner le problème, vous pouvez lister tous les commits potentiellement intéressants (avec git rev-list Ou un équivalent, tel que git log: Utilisez le spécificateur qui rend les commits potentiellement intéressants, à l'exception des filtres de date: dans ce cas, --all) Et extrayez tous leurs champs date-auteur (avec git log --format=%at Ou quoi que ce soit d'autre), faites ensuite votre propre élagage de la liste des ID de validation, puis soumettez à nouveau les ID de validation restants à git log --no-walk. Mais c'est au mieux douloureux. Voir réponse de Tim Beigeleisen utilisant awk pour plus d'informations.

21
torek

Peut-être que je manque quelque chose, mais cela ne suffirait-il pas?

git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"

Voir aussi ici

77
jackdbd

Vous pouvez.

Mais comme @torek l'a mentionné, vous ne pourrez peut-être pas faire cela avec du pur Git. Une option serait de diriger un joli format de sortie de git log dans awk, et vérifiez la date de l'auteur à cet endroit:

git log --date=iso --pretty=format:'%ad%x08%aN' | awk '$0 >= "2013-01-01" && $0 <= "2013-12-01"'

Ici le %ad donne la date de l'auteur au format ISO et %aN _ donne le nom de l'auteur.

17
Tim Biegeleisen