Ho incontrato uno strano problema con i file git e zip. Il mio script di compilazione prende un mucchio di pagine html di documentazione e li inserisce in un docs.zip quindi controllo questo file in git.Perché Zippare lo stesso contenuto due volte dà due file con SHA1 diverso?
Il problema che sto avendo è che ogni volta che rieseguire lo script di build e ottenere un nuovo file zip il nuovo file zip ha un SHA1 diverso rispetto alla precedente. Il mio script di build sta chiamando l'operazione ant zip. Tuttavia, chiamare manualmente il macOSX zip dalla shell di Mac OS X mi dà un sha1 diverso se io riavvolgo la stessa directory due volte.
Run 1:
zip foo.zip *
openssl sha1 foo.zip
rm foo.zip
Run 2:
zip foo.zip *
openssl sha1 foo.zip
Run 1 e run2 dare diverso SHA1 anche se il contenuto non è cambiato tra le esecuzioni. In entrambi i casi, zip stampa esattamente gli stessi file che vengono compressi, non indica che file specifici del sistema operativo come .DS_Store sono inclusi nel file zip.
L'algoritmo zip è deterministico? Se eseguito sullo stesso contenuto produrrà esattamente gli stessi bit? se no perché no?
Quali sono le mie scelte per zippare i file in modo deterministico? Ce ne sono migliaia nel file zippato, non mi aspetto che questi file cambino molto. So che git comprimerà tutti i file che si stanno registrando, ma la motivazione per comprimerli è semplicemente di toglierli dalla massa.
Due cose. In primo luogo sembra che il file zip stesso potrebbe essere incluso nello zip poiché si trova nella stessa directory, il che potrebbe dare risultati non deterministici. In secondo luogo lo zip potrebbe includere date e orari che saranno diversi da esecuzione a corsa. Il file zip –
non viene incluso nello zip appena generato, l'ho verificato prima di aver postato le mie domande. – ams