Wie zählt Git Log - seitdem?

85

Ich habe ein einfaches Test-Repository mit nur mehreren Commits und möchte das nach Datum und Uhrzeit gefilterte Protokoll anzeigen:

$ git log --author = "automatix" --since = "2013-01-30" --pretty - test
Commit ea0719bef142659fa561c9d040b2120012ed0184
Datum: Do 31 Jan 02:03:12 2013 +0100

Commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
Datum: Do 31 Jan 01:59:11 2013 +0100

Commit a0b027beba2cd03571bb9475b9db9542f8efe990
Datum: Do 31. Januar 01:50:38 2013 +0100

Commit add77c8fe2ba9254c11b98e14facede3420dc51c
Datum: Do 31. Januar 01:48:34 2013 +0100

Commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f
Datum: Do 31. Januar 01:46:27 2013 +0100

Commit 8c286391e54d3fc1e210950b1320fd6f013a8f84
Datum: Do 31 Jan 01:41:27 2013 +0100

Commit 9c880595e57f717383796fa2940f41f0f42f7e2a
Datum: Do 31. Januar 01:38:17 2013 +0100

Commit a95527f36a533e1ecba1aadceea31a9dcbe1a8db
Datum: Do 31 Jan 01:30:00 2013 +0100

Das erste ausgewählte Commit stammt a95527f36a533e1ecba1aadceea31a9dcbe1a8dbvon 2013-01-30 01:30:00. Es werden 8 Commits ausgewählt:

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

OK. Jetzt wähle ich seit 2013-01-31:

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

Was? Ok, das sollte bedeuten, dass die sinceRegel umfasst nicht die Commits des Startdatums. Richtig?

Aber lass uns weitermachen:

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

Commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
Datum: Do 31 Jan 01:59:11 2013 +0100

Commit a0b027beba2cd03571bb9475b9db9542f8efe990
Datum: Do 31. Januar 01:50:38 2013 +0100

Commit add77c8fe2ba9254c11b98e14facede3420dc51c
Datum: Do 31. Januar 01:48:34 2013 +0100

Commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f
Datum: Do 31. Januar 01:46:27 2013 +0100

Commit 8c286391e54d3fc1e210950b1320fd6f013a8f84
Datum: Do 31 Jan 01:41:27 2013 +0100

Commit 9c880595e57f717383796fa2940f41f0f42f7e2a
Datum: Do 31. Januar 01:38:17 2013 +0100

Commit a95527f36a533e1ecba1aadceea31a9dcbe1a8db
Datum: Do 31 Jan 01:30:00 2013 +0100
$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --format = oneline - test | Toilette
      8 34 498

Wenn ich jetzt auch die Startzeit schreibe, sind die Festschreibungen der Startzeit enthalten .

Ich verstehe die Logik nicht. Kann jemand erklären, warum es so seltsam funktioniert?

Vielen Dank

automatix
quelle
1
In der Tat sehr interessant. Es macht für mich Sinn, wenn Sie nur ein Datum ohne Zeit angeben, wird standardmäßig die letzte Sekunde des Tages verwendet. Aber das ist nur etwas, worauf ich mich einlasse. Vielen Dank für die Veröffentlichung. Sehr interessant!
Ilan Berci
1
Ja, scheint so, dass es ohne Zeit standardmäßig die letzte Sekunde des Tages ist. Seltsam, aber kein Problem. Aber dann sollte Git konsequent sein und dasselbe tun, wenn Zeit ohne Sekunden vorgesehen ist. Das Ergebnis von git log --author="automatix" --since="2013-01-31 01:30" --pretty -- test sollte Inhalt 7 festlegt. Aber es enthält 8. git log --author="automatix" --since="2013-01-31 01:30" --format=oneline -- test | wc=> 8 34 498
Automatix
Ich stimme dir nicht zu. Wenn ich sage "... ist nach Montag passiert", meine ich "passiert nach der letzten Sekunde des Montags" - "Montag" steht für einen Zeitraum von 24 Stunden. Wenn ich sage "passiert nach 9 Uhr", meine ich "passiert nach 9: 00: 00.0000" - "9 Uhr" ist ein Zeitpunkt, keine Zeitspanne. Gits Interpretation macht am meisten Sinn.
Chronial
2
Das ist ein guter Punkt. Ich würde sagen, diese Logik funktioniert nur mit "nach" - nicht mit "seit". Aber in Git sind die Schlüsselwörter "seit" anf "nach" Synonyme (ich finde es sprachlich schmutzig). git-scm.com/book/en/…
automatix

Antworten:

135

Falls es jemand anderem hilft, der hier landet wie ich, habe ich nach einigem Nachforschen herausgefunden, dass die Verwendung des ISO8601-Formats auch funktioniert:

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

Dies gibt Ihnen Präzision bis zur Sekunde. Hinweis: Sie können auch verwenden:

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.

Das erklärt natürlich nicht, "warum es so seltsam funktioniert". Es hat jedoch sicherlich das Problem für mich gelöst.


BEARBEITEN:

Nach ein wenig mehr Recherche fand ich heraus, "warum es so seltsam funktioniert":
Wenn Sie kein Datumsformat angeben, wird für das Git-Protokoll standardmäßig entweder die Zeitzone des Autors oder das Festschreiben von Daten verwendet , was für ein konsistentes Verhalten bedeutet um Ihr Datumsformat explizit zu deklarieren mit:

git log --date=local

Wenn Sie keine Zeit angeben, wird standardmäßig Ihre Ortszeit verwendet, zu der Sie den Befehl ausgeführt haben.

Lange Rede, kurzer Sinn, spezifisch zu sein sollte das Problem lösen:

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

Außerdem können Sie das Standard-Datumsformat mit dem folgenden Befehl dauerhaft festlegen:

git config log.date local

Sie können einen dieser Werte verwenden: (relative|local|default|iso|rfc|short|raw)

gMännlich
quelle