У меня есть простой тестовый репозиторий с несколькими коммитами, и я хочу увидеть журнал с фильтрами по дате и времени:
$ git log --author = "automatix" --since = "2013-01-30" --pretty - test совершить ea0719bef142659fa561c9d040b2120012ed0184 Дата: 31 января, 02:03:12 2013 г. +0100 совершить ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 Дата: 31 января, 01:59:11 2013 г. +0100 совершить a0b027beba2cd03571bb9475b9db9542f8efe990 Дата: 31 января, 01:50:38 2013 +0100 совершить add77c8fe2ba9254c11b98e14facede3420dc51c Дата: 31 января, 01:48:34 2013 +0100 совершить e6e323c05d37c74fcabeb9186b95c0d49b862e6f Дата: 31 января, 01:46:27 2013 +0100 совершить 8c286391e54d3fc1e210950b1320fd6f013a8f84 Дата: 31 января, 01:41:27 2013 +0100 совершить 9c880595e57f717383796fa2940f41f0f42f7e2a Дата: 31 января, 01:38:17 2013 г. +0100 совершить a95527f36a533e1ecba1aadceea31a9dcbe1a8db Дата: 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 | Туалет 8 34 498
ХОРОШО. Сейчас выбираю, поскольку 2013-01-31
:
$ git log --author = "automatix" --since = "2013-01-31" --format = oneline - test | Туалет 0 0 0
Какая? Хорошо, это должно означать, что since
правило исключает коммиты startdate. Правильно?
Но продолжим:
$ git log --author = "automatix" --since = "31.01.2013 01:30:00" --pretty - test совершить ea0719bef142659fa561c9d040b2120012ed0184 Дата: 31 января, 02:03:12 2013 г. +0100 совершить ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 Дата: 31 января, 01:59:11 2013 г. +0100 совершить a0b027beba2cd03571bb9475b9db9542f8efe990 Дата: 31 января, 01:50:38 2013 +0100 совершить add77c8fe2ba9254c11b98e14facede3420dc51c Дата: 31 января, 01:48:34 2013 +0100 совершить e6e323c05d37c74fcabeb9186b95c0d49b862e6f Дата: 31 января, 01:46:27 2013 +0100 совершить 8c286391e54d3fc1e210950b1320fd6f013a8f84 Дата: 31 января, 01:41:27 2013 +0100 совершить 9c880595e57f717383796fa2940f41f0f42f7e2a Дата: 31 января, 01:38:17 2013 г. +0100 совершить a95527f36a533e1ecba1aadceea31a9dcbe1a8db Дата: 31 января, 01:30:00 2013 +0100
$ git log --author = "automatix" --since = "31.01.2013 01:30:00" --format = oneline - test | Туалет 8 34 498
Теперь, когда я пишу StartTime , а также, коммиты по STARTTIME будут включены .
Я не понимаю логики. Кто-нибудь может объяснить, почему это так странно работает?
благодаря
git log --author="automatix" --since="2013-01-31 01:30" --pretty -- test
должен быть 7 коммитов. Но это содержимое 8.git log --author="automatix" --since="2013-01-31 01:30" --format=oneline -- test | wc
=> 8 34 498Ответы:
В случае, если это поможет кому-то еще, кто приземлится здесь, как я, после небольшого исследования я обнаружил, что использование формата ISO8601 также работает:
Это даст вам точность до секунды. Примечание: вы также можете использовать:
и т.п.
Конечно, это не «объясняет, почему это так странно работает». Однако это определенно решило проблему для меня.
РЕДАКТИРОВАТЬ:
После небольшого дополнительного исследования я выяснил, «почему это работает так странно»:
оказывается, что когда вы не указываете формат даты, git log по умолчанию использует часовой пояс автора или даты фиксации , что означает согласованное поведение, это полезно чтобы явно объявить свой формат даты, например:
Наконец, если вы не укажете время, по умолчанию будет установлено ваше местное время, когда вы запустили команду.
Короче говоря, конкретика должна решить проблему:
Кроме того, вы можете навсегда установить формат даты по умолчанию с помощью следующей команды:
вы можете использовать любое из этих значений:
(relative|local|default|iso|rfc|short|raw)
источник