web-dev-qa-db-fra.com

Comment git se connecte-t-il depuis?

J'ai un référentiel de test simple avec seulement plusieurs commits et je veux voir le journal filtré par date et heure:

 $ git log --author = "automatix" --since = "2013-01-30" --pretty - test 
 commit ea0719bef142659fa561c9d040b2120012ed0184 
 Date: jeu. 31 janv. 02 : 03: 12 2013 +0100 
 .____.] Date: Jeu. 31 janvier 01:50:38 2013 +0100 
 
 Commit add77c8fe2ba9254c11b98e14facede3420dc51c 
 Date: jeu. 31 janv. 01:48:34 2013 +0100 
 [.____. commit commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f 
 Date: jeu. janv. 31 01:46:27 2013 +0100. : 41: 27 2013 +0100 
. 
 Commit 9c880595e57f717383796fa2940f41f0f42f7e2a 
 Date .____.] Date: Jeu. 31 janvier 01:30:00 2013 +0100 

Le premier commit 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 

D'ACCORD. Maintenant je sélectionne depuis 2013-01-31:

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

Quelle? Ok, cela devrait signifier que la règle since est exclut les validations de la date de début. Droite?

Mais continuons:

$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --pretty - test 
 commit ea0719bef142659fa561c9d040b2120012ed0184 
 Date: jeu. 31 janv. 02 : 03: 12 2013 +0100 
 .____.] Date: Jeu. 31 janvier 01:50:38 2013 +0100 
 
 Commit add77c8fe2ba9254c11b98e14facede3420dc51c 
 Date: jeu. 31 janv. 01:48:34 2013 +0100 
 [.____. commit commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f 
 Date: jeu. janv. 31 01:46:27 2013 +0100. : 41: 27 2013 +0100 
. 
 Commit 9c880595e57f717383796fa2940f41f0f42f7e2a 
 Date .____.] Date: Jeu. 31 janvier 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 aussi l'heure de début, les commits de cette heure sont inclus.

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

Merci

65
automatix

Au cas où cela aiderait quelqu'un d'autre qui atterrit ici comme je l'ai fait, après quelques recherches, j'ai découvert que l'utilisation de format ISO8601 fonctionnait également:

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

Cela vous donnera une précision à la seconde près. Note: vous pouvez aussi 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 cela fonctionne si étrangement. Cependant, cela a certainement résolu le problème pour moi.


MODIFIER:

Après un peu plus de recherches, j'ai découvert "pourquoi ça marche si étrangement":
Il s'avère que lorsque vous ne spécifiez pas de format de date, le journal git utilise par défaut le fuseau horaire de l'auteur ou les dates de validation , ce qui signifie que le comportement est cohérent, c'est utile de déclarer explicitement votre date. format avec quelque chose comme:

git log --date=local

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

Longue histoire courte, être spécifique devrait résoudre le problème:

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

En outre, vous pouvez définir le format de date par défaut de manière 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)

109
gMale