Каков формат параметра -date для git commit

Мне нужно перезаписать дату фиксации git, все точки документации указывают на параметр -date, но затем оставляют одно без подсказки в соответствующем формате. Я пробовал каждую перестановку, о которой я могу думать, и я получаю ошибку "фатальный: недопустимый формат даты:" для каждого из них.

Ответ 1

Git 2. 6+ (3 квартал 2015 г.) добавить новую опцию.

См. Коммит e4f031e (30 июня 2015 г.) и коммит aa1462c, коммит a5481a6, коммит b7c1e11 (25 июня 2015 г.) Джеффом Кингом (peff).
(Объединено Junio C Hamano - gitster - в коммите d939af1, 3 августа 2015 г.)

ввести "форматировать" режим даты

Это передает формат непосредственно в strftime.
Кроме того, будучи немного более гибким, главное преимущество заключается в том, что ваша система strftime может знать больше о вашей локали предпочтительный формат (например, как пишется дни недели).

--date=format:... формат ... в вашу систему strftime.
Используйте --date=format:%c чтобы отобразить дату в предпочтительном для вашей системы формате.
См. Руководство по strftime для полного списка заполнителей формата.

Давиде Кавестро предлагает в комментариях пример:

git commit -m "Test" --date=format:relative:5.hours.ago 

Оригинальный ответ (середина 2014 г.)

Опция --date (введена в коммите 02b47cd в декабре 2009 года для git1.7.0) использует тот же формат, что и для GIT_AUTHOR_DATE, с форматами даты, протестированными в коммите 96b2d4f:

Там вы можете увидеть различные принятые форматы:

  • rfc2822: Mon, 3 Jul 2006 17:18:43 +0200
  • iso8601: 2006-07-03 17:18:43 +0200
  • локальный: Mon Jul 3 15:18:43 2006
  • коротко: 2006-07-03 (не в 1.9.1, работает в 2.3.0)
  • родственник: см. commit 34dc6e7:

    5.seconds.ago, 
    2.years.3.months.ago, 
    '6am yesterday'
    
  • raw: смотрите commit 7dff9b3 (git 1.6.2, март 2009)
    внутренний формат raw git - секунды с начала эпохи плюс часовой пояс
    (иначе говоря: формат ' date +"%s %z" ")

  • по умолчанию: Mon Jul 3 17:18:43 2006 +0200

ADTC спрашивает и отвечает в комментариях:

Принимает ли он 2006-07-03 15:18:43 для локальных?

Да, это работает, и он принимает локальный часовой пояс автоматически.
С этим форматом мне не нужно беспокоиться о том, какой это день недели (Sun, Mon и т.д.).

Ответ 2

Формат даты недооценен в Documentation/date-formats.txt (man git commit) и очень "гуманно" проанализирован.

Единственное, что работает, - это прочитать источник в date.c и попробовать его.

Точки, не упомянутые VonC на 2.3.0:

  • цифры обрабатываются только в зависимости от количества цифр:

    • 2 цифры: 19YY, для YY >= 73, текущий месяц, день и время. Ошибки или текущая дата в противном случае.

    • 4 цифры: ГГГГ, для ГГГГ >= 1973, <= 2099

    • 8 цифр до некоторого небольшого предела (TODO, который?): UNIX (секунды с 1970)

  • @<digits> +0000: время UNIX.

    Это похоже на лучший способ сразу ввести UNIX.

    2 ** 64 - 2 (TODO, почему не -1?) было максимальным значением, которое не приводит к ошибке фиксации. Штамп хранится в C длиной.

    git log показывает очень большие значения (где-то около 2^55 TODO, где?) в 1970 году, хотя git cat-file -p HEAD показывает, что правое число было сохранено, поэтому оно похоже на ограничение преобразования даты.

    Для чего-либо большего, чем 2**63 - 1, наибольший положительный знак, длинный, пытающийся нажать на GitHub, терпит неудачу с date causes integer overflow. Конец в эту дату на GitHub (GitHub не может показывать действительно большие даты по какой-то причине)

    VonC указал, что это позор, поскольку он блокирует отрицательные даты Возможно ли установить фиксацию git для отметки времени до 1970 года?, которая может быть используется для переноса старого программного обеспечения на Git.

  • tea: сегодня в 17 часов: -)

Ответ 3

Простой пример:

GIT_AUTHOR_DATE='2015-04-19 17:18:43 +0200' GIT_COMMITTER_DATE='2015-04-19 17:18:43 +0200' git commit -m 'Commit message'