Мне нужно сделать некоторые коммиты с помощью Git, но мне хотелось бы, чтобы временная метка в git -log была в будущем.
Как выполнить фиксацию в Git, которая заставляет будущую метку времени регистрироваться в git -log?
Мне нужно сделать некоторые коммиты с помощью Git, но мне хотелось бы, чтобы временная метка в git -log была в будущем.
Как выполнить фиксацию в Git, которая заставляет будущую метку времени регистрироваться в git -log?
Вы должны немного подождать.
Или вы можете сделать это:
/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!
Примечание, где указаны как дата автора, так и дата коммиттера, поэтому обязательно установите правильный (или оба).
Вы можете изменить фиксацию, пример с 2037 годом:
git commit --amend --date="Wed Feb 16 14:00 2037 +0100"
Я тоже пробовал 2038 год, но затем я получил нулевое значение для даты.
Если вы хотите сохранить фактическую дату изменения при добавлении проекта в 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 файла и хорошим объяснительным сообщением о фактической дате фиксации.
Объединив ответ 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 (`)).
Могу ли я спросить, почему вы хотите это сделать?
Если вы не хотите менять часы, я бы предложил создать script для совершения фиксации и использовать планировщик Windows (или любой другой эквивалент вашей ОС) для запуска script в то время, когда вы хотите фиксация будет.