Por que compactar o mesmo conteúdo duas vezes fornece dois arquivos com SHA1 diferente?

Ocorreu um problema estranho com os arquivos git e zip. Meu script de construção pega um monte de páginas html da documentação e as fecha em um arquivo docs.zip. Depois, verifico esse arquivo no git.

O problema que estou tendo é que toda vez que executo novamente o script de compilação e obtenho um novo arquivo zip, o novo arquivo zip tem um SHA1 diferente da execução anterior. Meu script de construção está chamando a tarefa ant zip. No entanto, chamar manualmente o zip do macOSX a partir do shell do Mac OS X me dá um sha1 diferente se eu fechar o mesmo diretório duas veze

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 fornecem SHA1 diferente, mesmo que o conteúdo não tenha mudado entre as execuções. Nos dois casos, o zip imprime exatamente os mesmos arquivos sendo compactados, não indica que arquivos específicos do SO, como .DS_Store, estão sendo incluídos no arquivo zi

O algoritmo zip é determinístico? Se executado no mesmo conteúdo, produzirá exatamente os mesmos bits? se não, por que não?

Quais são minhas escolhas para compactar os arquivos de maneira determinística? Existem milhares deles no arquivo compactado, não espero que esses arquivos mudem muito. Eu sei que o git compactará todos os arquivos que você fez check-in, mas a motivação para compactá-los é manter a massa deles fora do caminh