我用 .tgz/tarball 创建了一个 .tgz/tarball $(npm pack)
。
然后我运行:
sha1sum oresoftware-npp-0.0.1001.tgz
我得到:
77c58da68593dcdcd14bb16a37f5f63ef42bab63 oresoftware-npp-0.0.1001.tgz
我想将该 shasum 与远程服务器上的另一个 tarball 进行比较。我可以在 NPM 注册表中查询 shasum 以获取 tarball,其中:
npm view @oresoftware/npp@latest dist.shasum
产生:
3c2e7328110ba57e530c9938708b35bde941c419
这个 shasum 与上面的另一个不同,但这是意料之中的,因为我更改了 .tgz tarball 文件的内容。
我的问题是 3 倍:
当我生成 .tgz 文件的 sha1sum 时
npm pack
,这是正确的方法吗?创建 tar 文件后生成 sha1sum?我假设如果 tarball 具有相同的内容,则 sha1sum 将是相同的?如果文件是在不同时间创建/修改的,即使它们具有相同的内容,它们会有所不同吗?
有没有更好的方法来检查两个 tarball 是否具有相同的内容?这就是我想要做的。
NPM 注册表中可用的校验和提供了两个功能:它们允许您验证您的下载没有损坏,如果您可以在带外验证校验和,则下载的文件没有被更改。除非 NPM 档案是可重复构建的,否则校验和不允许您验证您自己构建的档案是否
npm pack
包含应有的内容。tarball 的问题在于它们包含元数据:所存储文件的所有权、权限和时间戳,由 存储,
tar
除此之外还有压缩元数据。如果所有这些的值都是预先约定的,则可以指定它们以覆盖从文件系统获得的值,但这需要预先约定。要比较两个任意 tarball 的内容,唯一可靠的方法是提取它们的内容并进行比较。
此校验和比较是否对您有用取决于您使用的 tar 命令以及使用的 tar 存档类型。
star
例如,包括自 1986 年以来的所有三个时间戳,这会导致即使内容相同,tar 存档也会有所不同,因为最后一次访问时间不同。从 2001 年开始新的 POSIX tar 增强功能,也有所有三个时间戳 - 取决于 tar 实现是实现原始标准还是后来的更改。
如果您不关心时间戳,比较存档校验和不是正确的方法。
因此,比较两个 tar 档案并从中做出陈述通常是不可能的。
但是,如果您可以解压缩两个档案中的一个,则有一种很好的方法可以将内容和元数据与用于比较的可配置元数据集进行比较。使用
star -diff
,见http://schilytools.sourceforge.net/man/man1/star.1.html例如,如果您致电:
比较文件内容和除所有时间戳之外的所有元数据。