git - 尽管文件内容没有改变,但 git clone 后 zip 文件的 Sha256 哈希值不同?

标签 git bash zip

我有一个问题,我的自动构建需要压缩目录的内容并对 zip 文件进行 Sha256sum。很简单。

但是,下次运行自动构建需要压缩相同的内容并对 zip 文件进行 Sha256sum,以便查看是否有任何源代码已更改。

在本地,我运行了以下命令,并每次生成具有相同哈希值的 zip(符合预期,因为我没有更改任何代码):

zip -q -r -X my-directory.zip my_directory/* --exclude ".gitignore" "requirements.txt" "*__pycache__/*" "*/\infrastructure/*"
sha256sum my-directory.zip | awk '{ print $1 }' > my-directory.zip.hash
cat my-directory.zip.hash

我的构建运行相同的命令,但在每次运行开始时,它都会从 GitHub check out 代码(因为构建在 Docker 容器内运行),这会导致不同的哈希值,尽管没有代码更改。

我通过删除存储库并重新克隆在本地重新创建了该问题。

有什么想法吗?我认为这是元数据或某种类型,但尝试了不同的排除命令,但没有成功。

最佳答案

通过 --exclude 手动排除模式似乎并不可靠。此外,您并没有排除 .git 文件夹,该文件夹未包含在 zip 文件中,但可能会以某种方式干扰哈希。

您应该正确配置 .gitignore 文件并使用 git archive。这是从 git 存储库导出文件的最佳方式。

尝试以这种方式改变您的工作流程:

git archive HEAD -o project-archive.zip
sha256sum project-archive.zip | awk '{ print $1 }' > project-archive.zip.hash

您将得到预期的结果。

关于git - 尽管文件内容没有改变,但 git clone 后 zip 文件的 Sha256 哈希值不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999767/

相关文章:

Git 从跟踪中删除已删除的文件

java - 如何从源代码生成 API 版本?

git - *通常*认为有多少 git sha 是唯一标识给定代码库中的更改所必需的?

linux - 一个 wav 后停止和循环 Shell。播放文件

java - 为什么我的 HTTPS 文件下载会损坏 .zip 文件?

Git Server Hooks - 它们是在客户端/克隆机器上本地执行的吗?

bash - * 在别名中是如何解释的?

bash 管道防止全局变量分配

java - 如何使用两个输出流创建 zip 文件(使用 JSF)

c# - 在压缩一个巨大的文件夹时,如何为其他应用程序提供一些磁盘时间? C#