Должен ли git-apply или git-am создать такой же хэш? - PullRequest
4 голосов
/ 18 декабря 2011

Я думаю, что что-то упустил.У меня сложилось впечатление, что использование git идентификатора хэш-фиксации SHA-1 означает, что можно быть уверенным, что полученный от кого-то патч для этого коммита не был изменен.

Пройдите этот тест, который я проводил на своей машине(имя и адрес электронной почты изменились, очевидно):

cd dogcatcher
dogcatcher> git log
commit 926f347567a9da6f7692aca0e23d13f094d9e3a6
Author: Joe User <joe@test.com>
Date:   Sat Dec 17 15:28:55 2011 -0600

    3rd branch commit

commit 11e8055aa5e8f0d323c48b4f691adced7a8a9762
Author: Joe User <joe@test.com>
Date:   Sat Dec 17 15:10:44 2011 -0600

    second branch commit

commit 23deb7093a8565479092ef84142a0e2e7282d213
Author: Joe User <joe@test.com>

dogcatcher> git format-patch 23de  (format a patch containing everything since 23de)

dogcatcher> cd ..
~> cp -r dogcatcher catcatcher
cd catcatcher

catcatcher> git reset --hard 23de  (reset HEAD to 23de)
catcatcher> git am 00* (apply the two patch files)
catcatcher> git log

commit 2548980811d1875971ce1a018df98374950e0059
Author: Joe User <joe@test.com>
Date:   Sat Dec 17 15:28:55 2011 -0600

    3rd branch commit

commit 7d651d05344ba6e2cd18d8e24c0c350d0c7dec66
Author: Joe User <joe@test.com>
Date:   Sat Dec 17 15:10:44 2011 -0600

    second branch commit

commit 23deb7093a8565479092ef84142a0e2e7282d213
Author: Joe User <joe@test.com>

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

Однако, если это так, как я могу убедиться, что только что примененные патчи содержат точно такой же код?Откуда я знаю, что человек, который прислал мне файлы исправлений, не сделал гнусных изменений?

Или я допустил ошибку, которая вызвала другой хэш, и если бы я сделал это правильно, я бы вышел стот же хеш?

1 Ответ

7 голосов
/ 18 декабря 2011

По умолчанию git am устанавливает дату коммиттера на текущее время.Вы можете использовать флаг --committer-date-is-author-date, чтобы избежать этого, хотя он может по-прежнему устанавливать вас в качестве коммиттера (фактически, он, вероятно, будет)Вы можете проверить это с помощью git log --format=fuller, который также показывает информацию о коммиттере.

...