Git commit - установка меток времени в будущее

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

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

Вы пробовали сменить часы? =) Я бы подумал, что это должно работать локально, но не уверен, что произойдет, когда другие пойдут на слияние.

Kieveli 15.12.2008 05:28

Метки времени не имеют отношения к слияниям.

Dustin 15.12.2008 07:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
45
2
17 783
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Могу я спросить, зачем вам это нужно?

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

Хорошая идея. В Unix-подобных системах вы можете использовать команду "at" (см. "Man at" для использования).

Pat Notz 15.12.2008 07:12
Ответ принят как подходящий

Тебе стоит немного подождать.

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

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

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

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

sunny256 03.09.2009 01:00

В чем разница между GIT_AUTHOR_DATE и GIT_COMMITTER_DATE?

Blago 29.10.2011 04:46

@Blago: В git автор (человек, написавший изменение) и коммиттер (человек, который поместил изменение в репозиторий) отслеживаются отдельно. Позволяет делать самые разные великие дела.

Dustin 30.10.2011 09:16

«Тебе стоит немного подождать». ржу не могу

JuanPablo 01.12.2014 20:41

Ввиду того, что назад в будущее теперь в прошлом, я действительно с нетерпением жду, что жду достаточно долго;)

Sebb 23.10.2015 00:49

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

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

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

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

Все до 19 января 3:14:07 2038 UTC должно работать. en.wikipedia.org/wiki/Year_2038_problem

Arrowmaster 16.02.2011 23:31

Изменение фиксации изменяет только дату коммиттера. Git отслеживает 2 даты: дату коммита и дату автора. Дата автора останется исходной, с помощью изменения или любой другой команды git, которая редактирует коммиты (например, rebase и cherry-pick).

Zombies 06.11.2015 23:06

@Zombies неверно: git log по умолчанию показывает GIT_AUTHOR_DATE, а не GIT_COMMITTER_DATE. Вы можете проверить это с помощью git log --pretty=fuller, который показывает и то, и другое. Изменение фиксации с помощью опции --date изменяет дата автора. Внесение изменений без этой опции изменяет только дата фиксации, так как при этом повторно создается фиксация.

Tim 25.11.2015 12:01

Единственная проблема этого элегантного решения заключается в том, что оно применяется только к последней фиксации. Нет возможности указать фиксацию старший, кроме как на конце ветви.

Tim 25.11.2015 12:03

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

ваш newest | xargs date -u -r умирает на пробелах в имени файла. sed в репозитории FSF поддерживает строки с завершающим нулем, и это сделает весь конвейер безопасным, но до тех пор я бы сказал, что используйте -d \\ n при xarg'ing имен файлов. . . . find . -name .git -prune -o -type d -o -print0 | xargs -0 ls -dt | sed q короче

jthill 13.01.2013 11:59

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

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

См. совершить 1820703 (21 августа 2018 г.), автор: Деррик Столи (derrickstolee).
(Merged by Junio C Hamano -- gitster -- in commit 1392c5d, 27 Aug 2018)

commit: use timestamp_t for author_date_slab

The author_date_slab is used to store the author date of a commit when walking with the --author-date flag in rev-list or log.
This was added as an 'unsigned long' in 81c6b38 ("log: --author-date-order", June 2013, Git 1.8.4-rc0)

Since 'unsigned long' is ambiguous in its bit-ness across platforms (64-bit in Linux, 32-bit in Windows, for example), most references to the author dates in commit.c were converted to timestamp_t in dddbad7 ("timestamp_t: a new data type for timestamps", April 2017, Git 2.14.0-rc0)

However, the slab definition was missed, leading to a mismatch in the data types in Windows.
This would not reveal itself as a bug unless someone authors a commit after February 2106, but commits can store anything as their author date.

Другие вопросы по теме