#git #commit #sha1
#git #фиксация #sha1
Вопрос:
После перезаписи истории поддерева из репозитория с помощью моего скрипта я сравнил это с тем, что сделал бы git filter-branch ...
для того же поддерева. Я вижу, что исходные коммиты имеют разный sha1, хотя я ожидал, что они будут идентичными (следствием этого является то, что все коммиты из обеих историй имеют разный sha1).
Выполнение a git show --format=raw <commit-sha1>
для обоих коммитов дает точно такой же результат (за исключением первой строки, которая commit <commit-sha1>
представляет результат).
Объектные файлы совершенно разные, но поскольку они двоичные, я не могу выяснить основную причину.
Предполагая, что все версии git совместимы друг с другом, что может объяснить наличие 2 разных sha1?
Спасибо
Комментарии:
1. Может быть, изменяющийся адрес электронной почты, изменяющаяся дата фиксации или аналогичная мета-информация?
Ответ №1:
Входные данные Git для хэша коммита включают метаданные, такие как SHA1 дерева, SHA1 родительского элемента, имя коммитера, адрес электронной почты и дату фиксации, а также имя автора, адрес электронной почты и дату фиксации. Итак, когда вы переписывали историю, дата фиксации коммитера и дерево (с тех пор, как вы сделали filter-branch
), вероятно, изменились, отсюда и разница в SHA1 вашего коммита.
Для получения дополнительной информации о формате коммита вы можете использовать git cat-file commit <sha>
или посмотреть раздел Git Objects книги Git.
Комментарии:
1. Было сообщено все дерево, родители, электронные письма, даты, имена от автора и коммиттера. Между тем, ваше предложение использовать
git cat-file
помогло, поскольку я вижу дополнительный ‘ n’ в зарегистрированных комментариях, в то время как я не вижу никакой разницы сgit show
. Я проверяю это.2. Я видел, что какой-то инструмент иногда добавляет дополнительную пустую строку в конец сообщения о фиксации, когда его нет (чтобы оно заканчивалось пустой строкой). Может быть, это то, что происходит в вашем случае?
3. Я подтверждаю, что мой скрипт ошибочно добавил новую строку. Я исправил это, и теперь у меня тот же sha1. Спасибо, Сильвен.