我遇到了git和zip文件的一个奇怪问题。我的构建脚本需要一堆文档html页面,并将它们压缩到docs.zip中,然后将该文件检入到git中。为什么两次压缩相同的内容会给出两个具有不同SHA1的文件?
我遇到的问题是,每次我重新运行构建脚本并获取一个新的zip文件时,新的zip文件都具有与上一次运行不同的SHA1。我的构建脚本正在调用ant zip任务。然而,从Mac OS X shell中手动调用macOSX zip会给我一个不同的sha1,如果我压缩两次相同的目录。
运行1:
zip foo.zip *
openssl sha1 foo.zip
rm foo.zip
运行2:
zip foo.zip *
openssl sha1 foo.zip
运行1和RUN2给出不同的SHA1即使内容没有运行之间变化。在这两种情况下,压缩文件都会打印出完全相同的压缩文件,并不表示像.DS_Store这样的操作系统特定文件将被包含在压缩文件中。
拉链算法是确定性的吗?如果运行在相同的内容上,它会产生完全相同的位?如果不是为什么不呢?
我以确定性的方式压缩文件有什么选择?压缩文件中有成千上万个文件,我不希望这些文件有太大的改变。我知道git会压缩任何你签入的文件,但是压缩它们的动机是保持它们的质量。
两件事。首先,zip文件本身似乎可能包含在zip中,因为它位于相同的目录中,这可能会导致不确定的结果。其次,zip可能包含日期和时间,这些日期和时间将与运行时间不同。 – 2012-03-15 04:52:47
zip文件未包含在新生成的zip中,我在发布我的问题之前检查了该文件。 – ams 2012-03-15 04:58:26