我遇到了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