【发布时间】:2010-07-20 17:01:06
【问题描述】:
我正在使用 giternal,它将外部引用的 .git 目录压缩到一个 .tgz 文件中。不幸的是,每次我“冻结”外部文件时,都会为 repo 创建一个新的 .tgz 文件。
即使 .git 目录的内容相同,也会创建一个带有差异的新 .tgz 文件。这会导致回购膨胀。
有没有办法让 tar czf 在不同的机器上创建一个具有完全相同的打包二进制内容的 .tgz 文件?
【问题讨论】:
我正在使用 giternal,它将外部引用的 .git 目录压缩到一个 .tgz 文件中。不幸的是,每次我“冻结”外部文件时,都会为 repo 创建一个新的 .tgz 文件。
即使 .git 目录的内容相同,也会创建一个带有差异的新 .tgz 文件。这会导致回购膨胀。
有没有办法让 tar czf 在不同的机器上创建一个具有完全相同的打包二进制内容的 .tgz 文件?
【问题讨论】:
随着文件时间的推移,uid 和 gid 与 tar 存档中的文件内容一起存储,因此很难获得完全相同的存档。 我只能提供一个毛茸茸的解决方案,例如将 tar 文件更改为常用时间和 uid。 pax 实用程序的 POSIX 定义中解释了ustar 交换格式。 或者您可以解压缩最后一个和当前的快照并对其进行比较,从而确定它们是否相同以及您是否需要最后一个。