Ответ 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
Та же временная метка, тот же хеш!