Mam proste repozytorium testowe z kilkoma zatwierdzeniami i chcę zobaczyć dziennik filtrowany według daty i czasu:
$ git log --author = "automatix" --since = "2013-01-30" --pretty - test zobowiązać ea0719bef142659fa561c9d040b2120012ed0184 Data: Czw 31 stycznia 02:03:12 2013 +0100 zatwierdzić ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 Data: Czw 31 stycznia 01:59:11 2013 +0100 zatwierdzenie a0b027beba2cd03571bb9475b9db9542f8efe990 Data: Czw, 31 stycznia, 01:50:38 2013 +0100 zatwierdzić add77c8fe2ba9254c11b98e14facede3420dc51c Data: Czw, 31 stycznia, 01:48:34 2013 +0100 zatwierdzić e6e323c05d37c74fcabeb9186b95c0d49b862e6f Data: czw. 31 stycznia 2013 r. 01:46:27 +0100 zatwierdzić 8c286391e54d3fc1e210950b1320fd6f013a8f84 Data: czw. 31 stycznia 2013 r. 01:41:27 +0100 zatwierdzić 9c880595e57f717383796fa2940f41f0f42f7e2a Data: Czw, 31 stycznia, 01:38:17 2013 +0100 zatwierdzić a95527f36a533e1ecba1aadceea31a9dcbe1a8db Data: Czw 31 Sty 01:30:00 2013 +0100
Pierwsze wybrane zatwierdzenie pochodzi a95527f36a533e1ecba1aadceea31a9dcbe1a8db
z 2013-01-30 01:30:00
. Wybrano 8 zatwierdzeń:
$ git log --author = "automatix" --since = "2013-01-30" --format = oneline - test | toaleta 8 34 498,
OK. Teraz wybieram od 2013-01-31
:
$ git log --author = "automatix" --since = "2013-01-31" --format = oneline - test | toaleta 0 0 0
Co? Ok, to powinno oznaczać, że since
reguła wyklucza commity z daty startowej. Dobrze?
Ale przejdźmy dalej:
$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --pretty - test zobowiązać ea0719bef142659fa561c9d040b2120012ed0184 Data: Czw 31 stycznia 02:03:12 2013 +0100 zatwierdzić ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 Data: Czw 31 stycznia 01:59:11 2013 +0100 zatwierdzenie a0b027beba2cd03571bb9475b9db9542f8efe990 Data: Czw, 31 stycznia, 01:50:38 2013 +0100 zatwierdzić add77c8fe2ba9254c11b98e14facede3420dc51c Data: Czw, 31 stycznia, 01:48:34 2013 +0100 zatwierdzić e6e323c05d37c74fcabeb9186b95c0d49b862e6f Data: czw. 31 stycznia 2013 r. 01:46:27 +0100 zatwierdzić 8c286391e54d3fc1e210950b1320fd6f013a8f84 Data: czw. 31 stycznia 2013 r. 01:41:27 +0100 zatwierdzić 9c880595e57f717383796fa2940f41f0f42f7e2a Data: Czw, 31 stycznia, 01:38:17 2013 +0100 zatwierdzić a95527f36a533e1ecba1aadceea31a9dcbe1a8db Data: Czw 31 Sty 01:30:00 2013 +0100
$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --format = oneline - test | toaleta 8 34 498,
Teraz, kiedy piszę StartTime jak dobrze, commity z startTime są włączone .
Nie rozumiem logiki. Czy ktoś może wyjaśnić, dlaczego to działa tak dziwnie?
Dzięki
git log --author="automatix" --since="2013-01-31 01:30" --pretty -- test
powinien zawierać 7 zatwierdzeń. Ale zawiera 8git log --author="automatix" --since="2013-01-31 01:30" --format=oneline -- test | wc
=> 8 34 498Odpowiedzi:
Na wypadek, gdyby pomogło to komuś, kto wyląduje tutaj tak jak ja, po krótkich badaniach odkryłem, że użycie formatu ISO8601 również działa:
To da ci precyzję co do sekundy. Uwaga: możesz również użyć:
itp.
Oczywiście to nie „wyjaśnia, dlaczego działa tak dziwnie”. Jednak z pewnością rozwiązało to problem za mnie.
EDYTOWAĆ:
Po dokładniejszym zbadaniu dowiedziałem się "dlaczego to działa tak dziwnie":
Okazuje się, że jeśli nie określisz formatu daty, dziennik git domyślnie ustawia strefę czasową autora lub daty zatwierdzenia , co oznacza spójne zachowanie, jest to przydatne jawnie zadeklarować format daty za pomocą czegoś takiego jak:
Wreszcie, jeśli nie określisz czasu, po uruchomieniu polecenia zostanie ustawiony domyślny czas lokalny.
Krótko mówiąc, bycie konkretnym powinno rozwiązać problem:
Możesz również ustawić domyślny format daty na stałe za pomocą następującego polecenia:
możesz użyć jednej z następujących wartości:
(relative|local|default|iso|rfc|short|raw)
źródło