Я столкнулся со странной проблемой с файлами git и zip. Мой скрипт сборки берет кучу html-страниц документации и сжимает их в docs.zip. Затем я проверяю этот файл в git.
Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я повторно запускаю скрипт сборки и получаю новый zip-файл, новый zip-файл имеет SHA1, отличный от предыдущего запуска. Мой скрипт сборки вызывает задачу ant zip. Однако ручной вызов zip macOSX из оболочки 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-файл включены какие-либо специфичные для ОС файлы, такие как .DS_Store.
Является ли алгоритм zip детерминированным? Если запустить на одном и том же контенте, будет ли он создавать точно такие же биты? если нет, то почему?
Какие у меня есть варианты архивирования файлов детерминированным образом? В заархивированном файле их тысячи, я не ожидаю, что эти файлы сильно изменятся. Я знаю, что git заархивирует любые файлы, которые вы зарегистрируете, но мотивация заархивировать их состоит в том, чтобы просто не мешать их массе.