即使文件没有变化,SVN 导出的 7-Zip 存档的哈希值也会发生变化。这是设计使然吗?

即使文件没有变化,SVN 导出的 7-Zip 存档的哈希值也会发生变化。这是设计使然吗?

我正在写电源外壳执行以下操作的脚本。

  1. 是否SVN出口颠覆存储库到临时文件夹
  2. 将临时文件夹的内容压缩到 7-Zip 存档中
  3. 比较MD5将此文件的哈希值与目标文件的哈希值进行比较
  4. 如果哈希值不同(即文件已更改),则用此哈希值覆盖目标存档

我注意到一件奇怪的事情。即使文件本身的内容没有改变,7z 档案的哈希值也总是不同的。大概是因为时间戳不同吧?

这是设计使然吗?

如果文件没有改变,我怎样才能使 7-Zip 档案的哈希值相同?

答案1

这很可能是设计使然。我找不到有关 7z 格式的任何详细文档,但某些存档格式包含诸如“添加日期”之类的信息,表明文件何时添加到存档中,等等。

我的建议是:1)不要费心比较,只需替换旧文件;2)使用更新函数来7z u就地更新旧文件。

答案2

如果文件时间戳有问题,您可以尝试设置 SVN 配置选项(我认为,use-commit-times作为命令行选项)。--config-option config:miscellany:use-commit-times=yes

它会将文件时间戳设置为每个文件的提交时间,而不是当前时间。但是,文档并未说明该选项是否适用于svn export

答案3

您可以构建一个清单,其中包含所有内容(除了它本身)的哈希值,并将其包含在 zip 文件中。提取并检查它以查看是否有更新。

相关内容