Git фиксация - установка временных меток в будущее

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

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

Ответ 1

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

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

/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 <[email protected]>
Date:   Wed Dec 19 15:14:05 2029 -0800

    Future!

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

Ответ 2

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

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

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

Ответ 3

Если вы хотите сохранить фактическую дату изменения при добавлении проекта в 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 файла и хорошим объяснительным сообщением о фактической дате фиксации.

Ответ 4

Объединив ответ Hugo (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) -release), поэтому нотация $() может не быть работайте для вас (просто замените его backticks (`)).

Ответ 5

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

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