Подтвердить что ты не робот

Как подсчитывается `git log --since`?

У меня есть простой тестовый репозиторий с несколькими коммитами и вы хотите просмотреть журнал даты и времени:

$ 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

Первая выбранная фиксация a95527f36a533e1ecba1aadceea31a9dcbe1a8db от 2013-01-30 01:30:00. Выбрано 8 коммитов:

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

OK. Теперь я выбираю с 2013-01-31:

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

Что? Хорошо, это должно означать, что правило since исключает коммиты начальной даты. Правильно?

Но отпустите:

$ 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

Теперь, когда я пишу также время начала, включаются коммиты старта.

Я не понимаю логику. Может кто-нибудь объяснить, почему это работает так странно?

Спасибо

4b9b3361

Ответ 1

В случае, если это помогает кому-то, кто приземляется здесь, как я, после небольшого исследования выяснил, что использование формата ISO8601 также работает:

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

Это даст вам точность до второй. Примечание: вы также можете использовать:

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"

и др.

Конечно, это не "объясняет, почему это работает так странно". Тем не менее, он определенно решил проблему для меня.


EDIT:

После немного большего количества исследований я узнал, "почему это работает так странно":
Оказывается, если вы не укажете формат даты, git укажите значения по умолчанию для часового пояса автора или даты фиксации, что означает поведение, полезно явно объявить формат даты с чем-то вроде:

git log --date=local

Наконец, если вы не укажете время, оно по умолчанию совпадает с вашим местным временем при запуске команды.

Короче говоря, конкретный должен решить проблему:

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

Кроме того, вы можете установить формат даты по умолчанию с помощью следующей команды:

git config log.date local

вы можете использовать любое из этих значений: (relative|local|default|iso|rfc|short|raw)