Скажем, 2 компьютера нажимают на одно и то же репозиторий git, компьютер A имеет текущую дату и время, а компьютер B имеет дату и время, установленную на 1 год раньше.
Скажем, компьютер A отправил несколько коммитов, а компьютер B проверил их и добавил еще несколько коммитов на основе той же ветки и нажал.
*A (dated 2020-07-28 by computer A push) ----> *B (dated 2019-07-28 by computer B)
Что случится? Обеспечивает ли git отметку времени фиксации дочернего элемента позже, чем фиксация родительского элемента?
1 ответ
Нет ограничений на временные метки в коммитах.
Коммит явно хранит идентификатор своего родителя (ей), а git позволяет фиксации иметь временную метку меньше, чем у одного из родителей.
На самом деле фиксация имеет 2 отметки времени:
- дата создания, называемая "датой автора"
- дата изменения, называемая "дата коммиттера"
Некоторые функции git позволяют вам переписывать историю репо (git rebase
, git cherry-pick
, git commit --amend
, git filter-branch
...), и в результате все чередования временных меток возможный.
При работе с одной машиной вы, скорее всего, увидите хронологический порядок дат изменений (обратите внимание, что он не принудительно , если вы установите системные часы на «вчера», git с радостью потакает) ; при работе на нескольких машинах git не обрабатывает временные сдвиги между системными часами.
Вы можете просмотреть две отметки времени с помощью нескольких команд:
для одного коммита:
# will display timestamps rendered in human format : git show -s --format=fuller <branch or commit id> # default is head # will display raw unix timestamps as stored in the commit : git cat-file -p <branch or commit id> git cat-file -p HEAD
для каждой фиксации в ветке:
git log --format=fuller git log --format=fuller branch1 branch2 ...
с параметрами рендеринга
git log
илиgit for-each-ref
: см. абзац--format
для каждой из этих команд
Большинство интерфейсов GUI для git (например, gitk, git-kraken, git-extensions, sourcetree ...) также будут отображать две временные метки в деталях фиксации.
Похожие вопросы
Новые вопросы
git
Git — это распределенная система контроля версий с открытым исходным кодом (DVCS). Используйте этот тег для вопросов об использовании Git и рабочих процессах. Не используйте этот тег для общих вопросов по программированию, связанных с репозиторием Git. Не используйте этот тег для вопросов GitHub/GitHub Actions, не связанных с использованием git; вместо этого используйте [github] или [github-actions]. Не используйте тег [github] для проблем, связанных с Git, только потому, что репозиторий размещен на GitHub.