Что «написано 7 дней назад; совершено 14 часов назад »значит на GitHub?


21

Я вижу это в этом репозитории GitHub :

введите описание изображения здесь

Что это значит? Как что-то может быть «написано 7 дней назад» и все же «совершено 14 часов назад»?


Может ли Git измерять временные метки между файлами, которые он редактировал, и когда он на самом деле фиксировал и выдвигал? Я не вижу пользы для такой функции, но это как раз то, что подразумевает формулировка ..
Сет

@Seth Это то, о чем я думал вначале, но я никогда не слышал, чтобы Git что-то делал с метками времени.
Отменить

@Seth Git игнорирует временные метки файлов. Коммиттер может на лету изменять временную метку автора commit --date=. Шверн объясняет это очень хорошо.
ADTC

@ Отменить, я надеюсь, что вы не путаете «14 часов назад» с «14 дней назад» ... Теперь это было бы по-настоящему странно - иметь что-то совершенное, что, по-видимому, даже не было создано до 7 дней спустя ... Я ' я не уверен, что Git запрещает устанавливать метку времени автора больше, чем метку времени коммиттера; это, вероятно, не волнует.
ADTC

Ответы:


21

У Git есть отдельная концепция автора (человека, который написал код) и коммиттера (человека, который передал его в хранилище). Точно так же могут быть разные даты для обоих. Они обычно одинаковы.

Вы бы хотели, чтобы они отличались в первую очередь, если человек, пишущий код или отправляющий исправление, не имеет принудительного доступа к хранилищу, как в проектах, которые используют списки рассылки для отправки исправлений. В этом случае, люди с нажимным доступом будет применять патч и запустить git commitлибо с --authorи --dateпереключатели или с помощью переменных окружения GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL и GIT_AUTHOR_DATE (задокументировано в мерзавце-фиксации дереве .

Другой случай - использование git cherry-pickили git rebase. Коммиттер - это человек, который делает выбор вишни, а автор - автор оригинального коммита. Git будет управлять установкой личности автора и даты для вас.

Вы можете увидеть эту информацию в хранилище с git log --pretty=fuller.

commit 21550561941b078ea1862b882ec89f26696ff5bb (HEAD, origin/master, origin/HEAD, master)
Author:     thiagopnts <thiagopnts@gmail.com>
AuthorDate: Tue Nov 18 14:52:49 2014 -0200
Commit:     Thiago Pontes <email@thiago.me>
CommitDate: Tue Nov 25 09:46:58 2014 -0200

    open repository url if confirmed, closes #1

1
git rebaseтакже приводит к тому, что дата фиксации обновляется, а дата автора остается неизменной.
CJM

@cjm Ты прав! rebase и cherry-pick оба ведут себя одинаково в этом отношении. Это имеет смысл, перебазирование может рассматриваться как множественный выбор вишни.
Шверн

1
Для применения исправлений из почты также существует git am , который автоматически берет дату и автора из почтового сообщения.
Дельтаб

6

Это похоже на сочетание между тем, как Git работает с датами, и тем, как на него ссылались закрывающие ключевые слова GitHub .

Git разделяет даты коммитов и авторов. В Pro Git они немного отличаются :

Автор - человек, который первоначально написал работу, тогда как автором является человек, который последним применил работу. Таким образом, если вы отправляете патч в проект, и один из основных участников применяет патч, вы оба получаете кредит - вы как автор, а основной участник как коммиттер.

Таким образом, хотя сам код был зафиксирован / написан «7 дней назад» (локально), он не был «применен» или исправлен к коду до «14 часов назад», поскольку он не был виден в удаленном режиме до тех пор, пока на него не ссылались сообщение.


2
Хотя я не проверял это, я не верю, что информация об авторе была добавлена ​​Github, закрывая ключевые слова. Идентификаторы и даты коммиттера и автора включаются в идентификатор фиксации. Если Github изменил какой-либо из них, он изменит идентификатор фиксации на удаленном конце. Удаленные и локальные репозитории будут расходиться. Автор не сможет толкать или тянуть, не заставляя его.
Шверн

2
Фиксация - это не то же самое, что отправка на удаленный сервер. Помните, что почти все в Git может быть сделано локально, включая коммиты. Вы можете зафиксировать сначала (который дает обе отметки времени) и нажать позже (который просто загружает фиксацию в удаленный режим, но не дает отметки времени). Не существует «метки времени push», так как не важно знать, когда был выдвинут коммит - его можно (и часто) толкать и извлекать любое количество раз.
ADTC
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.