Как изменить форматы даты журнала Git
Я пытаюсь отобразить последнюю фиксацию в Git, но мне нужна дата в специальном формате.
Я знаю, что журнал довольно-формате %ad
уважение , но только --date
формат, который я могу найти, "короткий". Я хочу знать другие, и могу ли я создать пользовательский, такой как:
git -n 1 --date=**YYMMDDHHmm** --pretty=format:"Last committed item in this release was by %%an, %%aD, message: %%s(%%h)[%%d]"
11 ответов
остальные (с git help log
):
--date=(relative|local|default|iso|rfc|short|raw)
Only takes effect for dates shown in human-readable format,
such as when using "--pretty". log.date config variable
sets a default value for log command’s --date option.
--date=relative shows dates relative to the current time, e.g. "2 hours ago".
--date=local shows timestamps in user’s local timezone.
--date=iso (or --date=iso8601) shows timestamps in ISO 8601 format.
--date=rfc (or --date=rfc2822) shows timestamps in RFC 2822 format,
often found in E-mail messages.
--date=short shows only date but not time, in YYYY-MM-DD format.
--date=raw shows the date in the internal raw git format %s %z format.
--date=default shows timestamps in the original timezone
(either committer’s or author’s).
нет встроенного способа, который я знаю, чтобы создать пользовательский формат, но вы можете сделать некоторую магию оболочки.
timestamp=`git log -n1 --format="%at"`
my_date=`perl -e "print scalar localtime ($timestamp)"`
git log -n1 --pretty=format:"Blah-blah $my_date"
первый шаг здесь получает вас меткой времени. Вы можете изменить вторую строку для форматирования этой метки времени, как вы хотите. Этот пример дает вам что-то похожее на --date=local
, С мягким днем.
и если вы хотите постоянный эффект, не вводя каждый раз, попробуй!--7-->
git config log.date iso
или, для влияния на все ваше использование git с этой учетной записью
git config --global log.date iso
кроме --date=(relative|local|default|iso|iso-strict|rfc|short|raw)
, Как уже упоминалось, вы также можете использовать пользовательский формат даты журнала с
--date=format:'%Y-%m-%d %H:%M:%S'
выводит что-то вроде 2016-01-13 11:32:13
.
Примечание: если вы посмотрите на фиксацию, связанную с Ниже, я считаю, что вам понадобится по крайней мере Git v2.6.0-rc0 для этого, чтобы работать.
Я не смог найти это в документации нигде (если кто-то знает, где его найти, прокомментируйте), поэтому я изначально нашел заполнители методом проб и ошибок.
в моем поиске документации по этому я нашел обязательство самому Git это означает, что формат подается непосредственно в strftime
. Глядя вверх strftime
(здесь или здесь) местозаполнители я нашел матч перечисленных заполнителей. Заполнители включают
%a Abbreviated weekday name %A Full weekday name %b Abbreviated month name %B Full month name %c Date and time representation appropriate for locale %d Day of month as decimal number (01 – 31) %H Hour in 24-hour format (00 – 23) %I Hour in 12-hour format (01 – 12) %j Day of year as decimal number (001 – 366) %m Month as decimal number (01 – 12) %M Minute as decimal number (00 – 59) %p Current locale's A.M./P.M. indicator for 12-hour clock %S Second as decimal number (00 – 59) %U Week of year as decimal number, with Sunday as first day of week (00 – 53) %w Weekday as decimal number (0 – 6; Sunday is 0) %W Week of year as decimal number, with Monday as first day of week (00 – 53) %x Date representation for current locale %X Time representation for current locale %y Year without century, as decimal number (00 – 99) %Y Year with century, as decimal number %z, %Z Either the time-zone name or time zone abbreviation, depending on registry settings; no characters if time zone is unknown %% Percent sign
после долгого времени ищет способ получить git log
вывод даты в формате YYYY-MM-DD
таким образом, что будет работать в less
, Я придумал следующий формат:
%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08
вместе с переключателем --date=iso
.
это напечатает дату в формате ISO (длинный), а затем напечатает 14 раз символ backspace (0x08), который в моем терминале эффективно удаляет все После части YYYY-MM-DD. Например:
git log --date=iso --pretty=format:'%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%aN %s'
это дает что-то вроде:
2013-05-24 bruno This is the message of the latest commit.
2013-05-22 bruno This is an older commit.
...
то, что я сделал, это создать псевдоним с именем l
С некоторыми изменениями в формате выше. Он показывает график фиксации слева, затем хэш фиксации, за которым следуют дата, короткие имена, имена и тема. Псевдоним выглядит следующим образом (в~/.gitconfig хранит настройки):
[alias]
l = log --date-order --date=iso --graph --full-history --all --pretty=format:'%x08%x09%C(red)%h %C(cyan)%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08 %C(bold blue)%aN%C(reset)%C(bold yellow)%d %C(reset)%s'
вы можете использовать опцию усечения поля, чтобы избежать так много %x08
символы. Например:
git log --pretty='format:%h %s%n\t%<(12,trunc)%ci%x08%x08, %an <%ae>'
эквивалентно:
git log --pretty='format:%h %s%n\t%ci%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08, %an <%ae>'
и совсем немного легче на глазах.
еще лучше, для этого конкретного примера, используя %cd
честь --date=<format>
, так что если вы хотите YYYY-MM-DD
, вы можете сделать это и избежать %<
и %x08
полностью:
git log --date=short --pretty='format:%h %s%n\t%cd, %an <%ae>'
Я просто заметил, что это было немного круговым по отношению к оригинальный пост, но я оставлю его, если другие прибыли сюда с теми же параметрами поиска, что и я.
быть в курсе "date=iso
" формат: это не ровно ISO 8601.
Фиксации " 466fb67" из Бить Болли (bbolli
), для Git 2.2.0 (ноябрь 2014)
довольно: обеспечить строгий формат даты ISO 8601
формат даты " ISO " Git на самом деле не соответствует стандарту ISO 8601 из-за небольших различий, и он не может быть проанализирован только синтаксическими анализаторами ISO 8601, например XML наборы инструментов.
выход из "
--date=iso
" отклоняется от ISO 8601 следующим образом:
- пробел вместо
T
дата и время-разделитель- пространство между временем и часовым поясом
- нет двоеточия между часами и минутами часового пояса
добавьте строгий формат даты ISO 8601 для отображения дат коммиттера и автора.
Используйте '%aI
' и '%cI
'спецификаторы формата и добавить'--date=iso-strict
' или '--date=iso8601-strict
' формат даты, имена.
посмотреть этой теме для обсуждения.
мне нужно было то же самое, и я обнаружил, что для меня работает следующее:
git log -n 1 --pretty='format:%cd' --date=format:'%Y-%m-%d %H:%M:%S'
на --date=format
форматирует вывод даты, где --pretty
говорит, что печатать.
date -d @$(git log -n1 --format="%at") +%Y%m%d%H%M
обратите внимание, что это преобразуется в ваш локальный часовой пояс, если это имеет значение для вашего варианта использования.
Git 2.7 (Q4 2015) представит -local
как инструкция.
Это означает, что, в дополнение к:
--date=(relative|local|default|iso|iso-strict|rfc|short|raw)
у вас также будет:
--date=(default-local|iso-local|iso-strict-local|rfc-local|short-local)
на -local
суффикс нельзя использовать с raw
или relative
. ссылка.
теперь вы можете запросить любой формат даты использование местного часового пояса. См.
- совершить 99264e9,
- совершить db7bae2,
- совершить dc6d782,
- совершить f3c1ba5,
- совершить f95cecf,
- совершить 4b1c5e1,
- совершить 8f50d26,
- совершить 78a8441,
-
совершить 2df4e29 (03 Sep 2015) by Иоанн Учета (
johnkeeping
).
посмотреть совершить add00ba, совершить 547ed71 (03 Sep 2015) by Джефф Кинг (peff
).
(слитый Junio C Hamano -- gitster
-- на совершить 7b09c45, 05 окт 2015)
в частности, последний сверху (commit add00ba) упоминает:
date
: сделать "local
" ортогональный на сегодняшний день формат:большинство наших "
--date
" режимы - это формат даты: какие элементы мы показываем и в каком порядке.
Но"--date=local
" это немного странно. Это означает "показать дату в обычном формате, но с использованием локального часового пояса".
Часовой пояс, который мы используем, ортогональен фактическому формату, и нет причин, по которым мы не могли бы иметь "локализованный iso8601" и т. д.этот патч добавит "
local
" логическое поле "struct date_mode
", и падаетDATE_LOCAL
элементdate_mode_type
перечисление (это теперь простоDATE_NORMAL
плюсlocal=1
).
Новая функция доступна пользователям, добавив "-local
" в любой режим даты (например,"iso-local
"), и мы сохраняем "local
"как псевдоним для"default-local
" для обратной совместимости.
git log -n1 --format="Last committed item in this release was by %an, `git log -n1 --format=%at | awk '{print strftime("%y%m%d%H%M",)}'`, message: %s (%h) [%d]"
используйте Bash и команду date для преобразования из ISO-подобного формата в тот, который вы хотите. Я хотел org-mode формат даты (и элемент списка), поэтому я сделал это:
echo + [$(date -d "$(git log --pretty=format:%ai -1)" +"%Y-%m-%d %a %H:%M")] \
$(git log --pretty=format:"%h %s" --abbrev=12 -1)
и результат, например:
+ [2015-09-13 Sun 22:44] 2b0ad02e6cec Merge pull request #72 from 3b/bug-1474631