Me he encontrado con un problema extraño con los archivos git y zip. Mi script de construcción toma un montón de documentación en páginas html y las comprime en un archivo docs.zip. Luego miro este archivo en git.¿Por qué Zipping el mismo contenido dos veces da dos archivos con SHA1 diferente?
El problema que tengo es que cada vez que vuelvo a ejecutar el script de compilación y obtengo un nuevo archivo zip, el nuevo archivo zip tiene un SHA1 diferente al de la ejecución anterior. Mi script de construcción está llamando a la tarea zip de hormiga. Sin embargo, llamar manualmente al zip de macOSX desde el shell de Mac OS X me da un sha1 diferente si cierro el mismo directorio dos veces.
Ejecutar 1:
zip foo.zip *
openssl sha1 foo.zip
rm foo.zip
Run 2:
zip foo.zip *
openssl sha1 foo.zip
la Prueba 1 y Run2 dar diferentes SHA1 a pesar de que el contenido no ha cambiado entre ejecuciones. En ambos casos, zip imprime exactamente los mismos archivos que se comprimen, no indica que se estén incluyendo archivos específicos del sistema operativo como .DS_Store en el archivo comprimido.
¿El algoritmo de zip es determinista? Si se ejecuta en el mismo contenido, ¿producirá exactamente los mismos bits? ¿si no, porque no?
¿Cuáles son mis opciones para comprimir los archivos de una manera determinista? Hay miles de ellos en el archivo comprimido, no espero que esos archivos cambien demasiado. Sé que git cerrará todos los archivos que registras pero la motivación para comprimirlos es mantener a la mayoría de ellos fuera del camino.
Dos cosas. En primer lugar, parece que el archivo zip en sí mismo podría estar incluido en el archivo zip, ya que está en el mismo directorio, lo que podría dar resultados no deterministas. En segundo lugar, el zip puede incluir fechas y horas que serán diferentes de ejecutar para ejecutar. –
archivo zip no está incluido en el código postal recién generado, lo compré antes de publicar mis preguntas. – ams