Каково разрешение Git даты фиксации даты или даты создания даты?

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

Эта команда возвращает метку времени UNIX, используя хэш коммита первого коммита:

git show -s --format="%ct" 2d9afdfb9e2fa9b349312734b462bb7d57a684ee

Результат: 1421437899

Что такое точность отметки времени GIT или даты автора?

Ответ 1

Разрешение дат Git commit/author составляет 1 секунду, что, как отмечают Алексей Тен и Эдвард Томсон, также является разрешением меток времени Unix.

Интересный эксперимент, который вы можете провести, заключается в

  • создать коммит и
  • изменить его очень быстро, ничего не меняя (даже сообщение коммита).

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

Сначала настройте вещи:

$ mkdir testGit
$ cd testGit
$ git init

Затем запишите это в файл сценария (называемый commitAmend.sh ниже)

#!/bin/sh

# create content and commit
printf "Hello World.\n" > README.md
git add README.md
git commit -m "add README"
git log

# amend the commit
git commit --amend --no-edit
git log

и запустите его:

$ sh commitAmend.sh
[master (root-commit) 11e59c4] add README
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
commit 11e59c47ba2f9754eaf3eb7693a33c22651d57c7
Author: jub0bs <xxxxxxxxxxx>
Date:   Fri Jan 30 14:25:58 2015 +0000

    add README
[master 11e59c4] add README
 Date: Fri Jan 30 14:25:58 2015 +0000
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
commit 11e59c47ba2f9754eaf3eb7693a33c22651d57c7
Author: jub0bs <xxxxxxxxxxx>
Date:   Fri Jan 30 14:25:58 2015 +0000

add README

Та же временная метка, тот же хеш!

Ответ 2

Это одна секунда; в то время как git-show немного сокращает вывод, вы можете увидеть необработанные данные фиксации с помощью команды git-cat-file. Например:

% git cat-file commit HEAD
tree 340c0a26a5efed1f029fe1d719dd2f3beebdb910
parent 1ac5acdc695b837a921897a9d42acc75649cfd4f
author Edward Thomson <[email protected]> 1422564055 -0600
committer Edward Thomson <[email protected]> 1422564055 -0600

My witty comment goes here.

Вы действительно видите, что это временная метка Unix с разрешением 1 секунда.