Переводит временную метку старого коммиттера git-log в строгую метку времени ISO 8601 - PullRequest
0 голосов
/ 29 мая 2019

Я отвечаю за развертывание приложения и, как часть процесса развертывания, мне нужно получить последнюю отметку времени коммиттера в строгом формате ISO 8601 и поместить ее в базу данных.Для последних версий git это довольно просто:

$ git log --pretty=format:'%cI' -n1
2019-05-29T10:24:58+04:00

Но, к сожалению, у меня есть несколько более старых примеров, когда в установленном git не существует переключателя %cI.Поэтому, чтобы приблизиться к ISO 8601, я вместо этого использую %ci, в результате чего:

$ git log --pretty=format:%ci -n1
2019-05-29 10:24:58 +0400

В конечном итоге мы будем обновлять машины до более поздней версии операционной системы и, следовательно, до более современной версии git.,Более новые версии git имеют это на странице руководства:

   •   %ci: committer date, ISO 8601-like format

   •   %cI: committer date, strict ISO 8601 format

Но пока я хочу помассировать эту строку в стиле ISO 8601 на старых машинах в строгом формате ISO 8601, указанном выше.Я написал плохо выглядящий однострочник, чтобы сделать это, и это, кажется, работает:

$ git log --pretty=format:'%ci' -n1 | sed -e 's/ /T/1' -e 's/ //1' -e 's/.\{22\}/&:/1'
2019-05-29T10:24:58+04:00

Просто он заменяет первый пробел на T, второй пробел - ничего и вставляет двоеточие : на 22-й позиции персонажа.Как мне сделать это лучше?Я попытался найти способы сделать это с помощью команды date;не повезло.

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

ты имеешь в виду что-то подобное?

date -d "$(git log --pretty=format:%ci -n1)" --iso-8601=seconds
1 голос
/ 29 мая 2019

Использование sed:

$ echo '2019-05-29 10:24:58 +0400' | sed -e 's/ /T/' -e 's/ //' -e 's/..$/:\0/'

2019-05-29T10: 24: 58 + 04: 00

Заменить первый пробел на T, удалить второй пробел,замените последние 2 символа двоеточием и этими двумя символами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...