首页 > 解决方案 > 如何使用 git archive 保存时间戳

问题描述

我使用 post-commit 脚本将“git archive”到临时目录,然后我使用 Rsync 将更改的文件移动到我的 dev 工作目录。我正在使用 rsync 保留时间戳,但是 git archive 命令将所有时间戳更新为当前日期和时间,所以一切都被推送了。根据文档(引用如下),只有在我传递树 ID 而不是提交 ID 时才应该这样做。我没有通过任何东西。

我要复制到 temp 的 git archive 命令:

git archive $branch | (cd $tempdir; tar x)

这是文档中的内容:

“git存档在给定树ID与给定提交ID或标签ID时的行为不同。在第一种情况下,当前时间用作存档中每个文件的修改时间。在后一种情况下,提交时间记录在使用引用的提交对象。此外,如果使用 tar 格式,则提交 ID 存储在全局扩展 pax 标头中;可以使用 git get-tar-commit-id 提取它。在 ZIP 文件中,它存储为文件评论。”

这是否意味着我需要获取提交 ID 并将其传递给 git 存档?我怎么做?

我有点困惑?如何在不更改时间戳的情况下存档到我的临时目录?

谢谢。

编辑:我也试过这些无济于事:

git archive get-tar-commit-id $branch | (cd $tempdir; tar x)

git archive $(git get-tar-commit-id) $branch | (cd $tempdir; tar x)

我不确定正确的语法是什么。也许这比我想象的要容易?

标签: gitgit-archive

解决方案


我使用的一个工作流程是制作一个非裸遥控器,而且

git config --local receive.denycurrentbranch true

然后服务器可以有一个真正的工作目录,你可以推送到它。


推荐阅读