git commit - установка временных меток в будущее - PullRequest
45 голосов
/ 15 декабря 2008

Мне нужно сделать несколько коммитов с помощью Git, но я бы хотел, чтобы в будущем была указана временная метка в git-log.

Как я могу сделать коммит в git, который заставит будущую временную метку зарегистрироваться в git-log?

Ответы [ 6 ]

68 голосов
/ 15 декабря 2008

Вы должны немного подождать.

Или вы можете сделать это:

/tmp/x 604% env GIT_AUTHOR_DATE='Wed Dec 19 15:14:05 2029 -0800' git commit -m 'future!'
[master]: created 6348548: "Future!"
 1 files changed, 1 insertions(+), 0 deletions(-)

/tmp/x 605% git log 

Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Dec 19 15:14:05 2029 -0800

    Future!

Обратите внимание , что есть как дата автора, так и дата коммиттера, поэтому обязательно установите правильную (или обе).

49 голосов
/ 16 февраля 2011

Вы можете изменить коммит, например, с 2037 годом:

git commit --amend --date="Wed Feb 16 14:00 2037 +0100"

Я тоже пробовал 2038 год, но затем я получил null значение для даты.

10 голосов
/ 25 сентября 2009

Если вы хотите сохранить фактическую дату изменения при добавлении проекта в git, вы можете сделать это с помощью

env GIT_AUTHOR_DATE="`ls -rt *.cpp|tail -1|xargs date -u -r`" git commit -m "Old sources retaining old change-dates of last changed
 file: `ls -rt *.cpp|tail -1`, actual commit date: `date`"

Это будет подтверждено датой последнего изменения * .cpp-файла и хорошим поясняющим сообщением о фактической дате фиксации.

2 голосов
/ 13 января 2013

Комбинируя ответ Хьюго ( 1 ) с информацией, найденной здесь ( 2 ), и подбрасывая немного sed, я получил это:

alias newest="find . -path ./.git -prune -o -type f -exec stat -c \"%y %n\" '{}' + | sort -r | head -1 | sed s#'.*\./'##"
GIT_AUTHOR_DATE="$(newest | xargs date -u -r)" GIT_COMMITTER_DATE="$(newest | xargs date -u -r)" git commit -m "Old sources retaining old change-dates of last changed file: $(newest), actual commit date: $(date)"

Основное отличие состоит в том, что эта версия выполняет рекурсивный поиск, поэтому вы получаете последний файл в любом месте дерева - хотя он намеренно пропускает каталог .git.

Вы, конечно, можете захотеть удалить одну из переменных даты здесь, и я использую довольно свежую версию bash (4.2.37 (1) -релиз), поэтому нотация $ () может не работать для Вы (просто замените его обратными чертами (`) вместо этого).

0 голосов
/ 29 августа 2018

Если вы хотите изменить коммит с датой «из будущего», как в , этот ответ :

git commit --amend --date="Wed Feb 16 14:00 2037 +0100"
  • не использовать дату после 2016 года (Git 2.18 или менее)
  • используйте Git 2.19 (Q3 2018)

См. коммит 1820703 (21 августа 2018 г.) Деррик Столи (derrickstolee) .
(Объединено с Junio ​​C Hamano - gitster - в коммит 1392c5d , 27 августа 2018 г.)

commit: используйте timestamp_t для author_date_slab

author_date_slab используется для хранения даты автора коммита при ходьбе с флагом --author-date в rev-list или log.
Это было добавлено как «unsigned long» в 81c6b38 ("log: --author-date-order", июнь 2013, Git 1.8.4-rc0)

Поскольку 'unsigned long' является неоднозначным по своей разрядности на разных платформах (64-битная в Linux, 32-битная в Windows, например), большинство ссылок на даты авторов в commit.c были преобразованы в timestamp_t in dddbad7 («timestamp_t: новый тип данных для меток времени», апрель 2017 г., Git 2.14.0-rc0)

Однако определение плиты было пропущено, что привело к несоответствию типов данных в Windows.
Это не проявит себя как ошибка , если кто-то не создаст коммит после февраля 2106 , но коммиты могут сохранить что угодно в качестве даты своего автора.

0 голосов
/ 15 декабря 2008

Могу ли я спросить, почему вы хотели бы сделать это?

Если вы не хотите менять часы, я бы предложил создать скрипт для выполнения коммита и использовать планировщик Windows (или любой другой эквивалент для вашей ОС), чтобы запустить скрипт в то время, когда вы хотите, чтобы коммит .

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