Почему Zipping одного и того же контента дважды дает два файла с разными SHA1?

Я столкнулся со странной проблемой с файлами git и zip. Мой скрипт сборки берет кучу HTML-страниц документации и упаковывает их в файл docs.zip. Затем я проверяю этот файл в git.

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я повторно запускаю скрипт сборки и получаю новый zip-файл, новый zip-файл имеет другой SHA1, чем предыдущий. Мой скрипт сборки вызывает задачу ant zip. Однако ручной вызов macOSX zip из оболочки Mac OS X дает мне другой sha1, если я дважды заархивирую один и тот же каталог.

Прогон 1:

zip foo.zip *
openssl sha1 foo.zip 
rm foo.zip 

Прогон 2:

zip foo.zip *
openssl sha1 foo.zip

Запуск 1 и запуск 2 дают разные SHA1, даже если содержимое не меняется между запусками. В обоих случаях zip распечатывает точно те же файлы, что и zip, но это не означает, что в файл zip включены какие-либо файлы для конкретной ОС, такие как .DS_Store.

Является ли почтовый алгоритм детерминированным? Если запустить на одном и том же контенте, он будет выдавать точно такие же биты? если нет, то почему?

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

Ответы на вопрос(3)

Ваш ответ на вопрос