Подтвердить что ты не робот

По-видимому, одни и те же коммиты дают разные sha1, почему?

После повторной записи истории поддерева из репозитория с моим script я сравнил его с тем, что сделало бы git filter-branch ... на том же поддереве. Я вижу, что начальные коммиты имеют разные sha1, хотя я ожидал, что они будут идентичными (следствием этого является то, что все фиксации из обеих историй имеют разные sha1).

Выполнение git show --format=raw <commit-sha1> для обоих коммитов дает точно такой же результат (кроме первой строки, которая commit <commit-sha1>, вводя результат).

Файлы объектов полностью разные, но поскольку они являются двоичными, я не могу понять причину.

Предполагая, что все версии git совместимы друг с другом, что может объяснить, что у вас есть 2 разных sha1?

Спасибо

4b9b3361

Ответ 1

Git входы хэша-фиксации включают метаданные, такие как SHA1 дерева, SHA1 родителя, имя комминера, дата отправки и дата фиксации, а также имя автора, адрес электронной почты и дата фиксации. Поэтому, когда вы переписываете историю, дата фиксации коммитера и дерево (так как вы сделали filter-branch), вероятно, изменились, следовательно, разница в вашей фиксации SHA1.

Для получения дополнительной информации о формате фиксации вы можете использовать git cat-file commit <sha> или найти раздел Git Объекты в Git книге.