2008-12-15 2 views
45

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

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

+0

Вы пытались сменить часы? =) Я бы подумал, что это должно работать локально, но не уверен, что произойдет, когда другие пойдут на слияние. – Kieveli 2008-12-15 02:28:29

+3

Временные метки не относятся к слияниям. – Dustin 2008-12-15 04:31:44

ответ

67

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

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

/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! 

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

+7

Он также работает с форматом даты ISO 8601: «2029-12-19 15:14:05 -0800». Мне нравится это. – sunny256 2009-09-02 21:00:23

+2

В чем разница между GIT_AUTHOR_DATE и GIT_COMMITTER_DATE? – Blago 2011-10-29 00:46:38

-5

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

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

+1

Хорошая идея. В Unix-подобных системах вы можете использовать команду «at» (см. «Man at» для использования). – 2008-12-15 04:12:09

10

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

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- файл и хорошее объяснительное сообщение о фактической дате фиксации.

48

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

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

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

2

Объединив ответ Гюго (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 (`)).

Смежные вопросы