gpt4 book ai didi

git - 为什么两次压缩相同的内容会得到两个具有不同 SHA1 的文件?

转载 作者:IT王子 更新时间:2023-10-29 01:28:49 32 4
gpt4 key购买 nike

我遇到了一个关于 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

运行 2:

zip foo.zip *
openssl sha1 foo.zip

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

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

要以确定性方式压缩文件,我有哪些选择?压缩文件中有数千个,我不希望这些文件有太大变化。我知道 git 会压缩你 checkin 的任何文件,但压缩它们的动机只是为了让它们不碍事。

最佳答案

根据维基百科http://en.wikipedia.org/wiki/Zip_(file_format)似乎 zip 文件有标题File last modification time 和 File last modification date 所以任何 checkin git 的 zip 文件在 git 看来如果从相同的内容重建 zip 文件已经改变。而且似乎没有标志告诉它不要设置这些 header 。

我只求助于使用 tar,如果多次运行,它似乎会为相同的输入生成相同的字节。

关于git - 为什么两次压缩相同的内容会得到两个具有不同 SHA1 的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9714139/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com