相关疑难解决方法(0)

为什么两次压缩相同的内容会产生两个不同SHA1的文件?

我遇到了一个git和zip文件的奇怪问题.我的构建脚本需要一堆文档html页面并将它们压缩成docs.zip然后我将此文件检入git.

我遇到的问题是每次我重新运行构建脚本并获得一个新的zip文件时,新的zip文件具有与上一次运行不同的SHA1.我的构建脚本正在调用ant zip任务.然而,如果我将同一目录压缩两次,那么从Mac OS X shell手动调用macOSX zip会给我一个不同的sha1.

运行1:

zip foo.zip *
openssl sha1 foo.zip 
rm foo.zip 
Run Code Online (Sandbox Code Playgroud)

运行2:

zip foo.zip *
openssl sha1 foo.zip
Run Code Online (Sandbox Code Playgroud)

运行1和run2给出不同的SHA1,即使内容在运行之间没有变化.在这两种情况下,zip都会打印出完全相同的压缩文件,但并不表示任何特定于操作系统的文件(如.DS_Store)都包含在zip文件中.

zip算法是否具有确定性?如果在相同的内容上运行它会产生完全相同的位吗?如果不是为什么不呢?

我有哪些选择以确定的方式压缩文件?压缩文件中有数千个,我不希望这些文件发生太大变化.我知道git会压缩你检查的任何文件,但拉链它们的动机就是保持它们的质量不受影响.

git ant zip gzip sha

17
推荐指数
3
解决办法
4704
查看次数

标签 统计

ant ×1

git ×1

gzip ×1

sha ×1

zip ×1