По-видимому, одни и те же коммиты дают разные sha1, почему?
После повторной записи истории поддерева из репозитория с моим script я сравнил его с тем, что сделало бы git filter-branch ...
на том же поддереве. Я вижу, что начальные коммиты имеют разные sha1, хотя я ожидал, что они будут идентичными (следствием этого является то, что все фиксации из обеих историй имеют разные sha1).
Выполнение git show --format=raw <commit-sha1>
для обоих коммитов дает точно такой же результат (кроме первой строки, которая commit <commit-sha1>
, вводя результат).
Файлы объектов полностью разные, но поскольку они являются двоичными, я не могу понять причину.
Предполагая, что все версии git совместимы друг с другом, что может объяснить, что у вас есть 2 разных sha1?
Спасибо
Ответы
Ответ 1
Git входы хэша-фиксации включают метаданные, такие как SHA1 дерева, SHA1 родителя, имя комминера, дата отправки и дата фиксации, а также имя автора, адрес электронной почты и дата фиксации. Поэтому, когда вы переписываете историю, дата фиксации коммитера и дерево (так как вы сделали filter-branch
), вероятно, изменились, следовательно, разница в вашей фиксации SHA1.
Для получения дополнительной информации о формате фиксации вы можете использовать git cat-file commit <sha>
или найти раздел Git Объекты в Git книге.