build - 如何创建一个省略其内容时间戳的 tar 文件?

标签 build timestamp archive tar

有没有办法创建一个 .tar 文件,在其文件/目录中省略 atime/ctime/mtime 的值?

我们为什么要这样做?

我们在构建过程中有一个步骤,它生成一个工件目录,该目录被打包到一个 tar 文件中。我们希望构建步骤是幂等的——给定相同的输入,它每次生成完全相同相同的文件/输出。

理想情况下,我们还希望该步骤在干净构建中按位幂等,以便我们可以使用连续构建的哈希来检查是否没有任何变化。但是由于 tar 文件包含每个条目的时间戳 (atime/ctime/mtime),因此该构建步骤创建的 tar 文件永远不会与前一次运行按位相同,即使存档中每个文件的内容 em> 按位相同。

有没有办法生成一个省略其条目时间戳的 tarfile,以便生成存档的步骤可以按位幂等? (我们希望利用 tar 保留的其他文件元数据,例如文件模式位和符号链接(symbolic link)。)

最佳答案

要拥有一个真正的幂等 tar,mtime 是一个很好的步骤,但还不够。 您还需要为 mtime 设置排序顺序、所有者和组(连同它们的映射)和适当的时区(否则您在 Mac 和 Linux 之间也会遇到问题)。

我最终得到了

tar --sort=name --owner=root:0 --group=root:0 --mtime='UTC 2019-01-01' ... | gzip -n

关于build - 如何创建一个省略其内容时间戳的 tar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32997526/

相关文章:

linux - tar 存档 : How reliable is append?

c++ - boost 二进制文件 - 减少大小

java - 无法将 csv 文件从一个目录移动到另一目录

linux - 建立相互依赖的共享库(Linux)

java - Gradle 构建通过 jenkins 花费的时间太长

python - 聚合到基于 15 分钟的时间戳到小时,并找到 pandas 中多列的总和、平均值和最大值

javascript - 输入字段中的angularjs时间戳到日期时间格式字符串

build - 如何让 NDepend 作为构建过程的一部分运行?

build - Dojo 1.8 和构建(或缺少)

php - 为什么时间戳限制为 2038?