103 votes

Comment compte git log --since ?

J'ai un dépôt de test simple avec juste quelques commits et je veux voir le journal filtré par la date et l'heure :

$ git log --author="automatix" --since="2013-01-30" --pretty -- test
commit ea0719bef142659fa561c9d040b2120012ed0184
Date:   Thu Jan 31 02:03:12 2013 +0100

commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
Date:   Thu Jan 31 01:59:11 2013 +0100

commit a0b027beba2cd03571bb9475b9db9542f8efe990
Date:   Thu Jan 31 01:50:38 2013 +0100

commit add77c8fe2ba9254c11b98e14facede3420dc51c
Date:   Thu Jan 31 01:48:34 2013 +0100

commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f
Date:   Thu Jan 31 01:46:27 2013 +0100

commit 8c286391e54d3fc1e210950b1320fd6f013a8f84
Date:   Thu Jan 31 01:41:27 2013 +0100

commit 9c880595e57f717383796fa2940f41f0f42f7e2a
Date:   Thu Jan 31 01:38:17 2013 +0100

commit a95527f36a533e1ecba1aadceea31a9dcbe1a8db
Date:   Thu Jan 31 01:30:00 2013 +0100

Le premier engagement sélectionné est a95527f36a533e1ecba1aadceea31a9dcbe1a8db de 2013-01-30 01:30:00 . 8 commits sont sélectionnés :

$ git log --author="automatix" --since="2013-01-30" --format=oneline -- test | wc
      8      34     498

OK. Maintenant, je sélectionne depuis 2013-01-31 :

$ git log --author="automatix" --since="2013-01-31" --format=oneline -- test | wc
      0       0       0

Quoi ? Ok, ça devrait signifier, que le since règle exclut les commits de la date de début. Pas vrai ?

Mais continuons :

$ git log --author="automatix" --since="2013-01-31 01:30:00" --pretty -- test
commit ea0719bef142659fa561c9d040b2120012ed0184
Date:   Thu Jan 31 02:03:12 2013 +0100

commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
Date:   Thu Jan 31 01:59:11 2013 +0100

commit a0b027beba2cd03571bb9475b9db9542f8efe990
Date:   Thu Jan 31 01:50:38 2013 +0100

commit add77c8fe2ba9254c11b98e14facede3420dc51c
Date:   Thu Jan 31 01:48:34 2013 +0100

commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f
Date:   Thu Jan 31 01:46:27 2013 +0100

commit 8c286391e54d3fc1e210950b1320fd6f013a8f84
Date:   Thu Jan 31 01:41:27 2013 +0100

commit 9c880595e57f717383796fa2940f41f0f42f7e2a
Date:   Thu Jan 31 01:38:17 2013 +0100

commit a95527f36a533e1ecba1aadceea31a9dcbe1a8db
Date:   Thu Jan 31 01:30:00 2013 +0100
    $ git log --author="automatix" --since="2013-01-31 01:30:00" --format=oneline -- test | wc
      8      34     498

Maintenant, quand j'écris l'heure de début, les commits de l'heure de début sont inclus .

Je ne comprends pas la logique. Quelqu'un peut-il expliquer pourquoi cela fonctionne si bizarrement ?

Merci

166voto

gmale Points 3252

Au cas où cela aiderait quelqu'un d'autre qui atterrit ici comme moi, après quelques recherches, j'ai découvert qu'en utilisant Format ISO8601 fonctionne également :

git log --since="2014-02-12T16:36:00-07:00"

Vous obtiendrez ainsi une précision à la seconde près. Note : vous pouvez également utiliser :

git log --after="2014-02-12T16:36:00-07:00"
git log --before="2014-02-12T16:36:00-07:00"
git log --since="1 month ago"
git log --since="2 weeks 3 days 2 hours 30 minutes 59 seconds ago"

etc.

Bien sûr, cela n'explique pas "pourquoi ça marche si bizarrement". Cependant, cela a certainement résolu le problème pour moi.


EDIT :

Après un peu plus de recherche, j'ai découvert "pourquoi ça marche si bizarrement" :
Il s'avère que lorsque vous ne spécifiez pas un format de date, git log utilise par défaut soit le fuseau horaire de l'auteur, soit les dates de livraison. Pour obtenir un comportement cohérent, il est utile de déclarer explicitement votre format de date avec quelque chose comme :

git log --date=local

Enfin, si vous ne spécifiez pas d'heure, l'heure par défaut est l'heure locale à laquelle vous avez exécuté la commande.

En bref, le fait d'être spécifique devrait résoudre le problème :

git log --date=local --after="2014-02-12T16:36:00-07:00"

Vous pouvez également définir le format de date par défaut de façon permanente à l'aide de la commande suivante :

git config log.date local

vous pouvez utiliser n'importe laquelle de ces valeurs : (relative|local|default|iso|rfc|short|raw)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X