首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘'git checkout’-如何在切换分支时维护时间戳?

‘'git checkout’-如何在切换分支时维护时间戳?
EN

Stack Overflow用户
提问于 2012-03-20 23:10:52
回答 3查看 6.7K关注 0票数 13

我经常在分支之间来回切换。我有一个脚本,它将结账的内容推送到一个“运行”环境中,在那里我可以看到代码运行并对其进行测试(这是一个web应用程序)。这个推送脚本的核心是使用rsync,它使用时间戳来检测真正应该传输哪些文件。因为'git-checkout‘似乎会将文件上的时间戳设置为当前时间,所以rsync会报告所有文件都被上推,这只是因为时间戳将被更新。

如何让'git-checkout‘在分支之间切换时保留时间戳,以便rsync只报告内容更改?

我不想使用rsync的校验和参数,因为它非常慢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-20 23:21:23

git checkout更新时间戳的原因是,几乎所有的源代码构建系统都依赖于时间戳来确定是否需要重新构建目标。如果git checkout在更新文件时没有更新文件上的时间戳,这些构建系统将不会正确地执行增量构建。事实上,git checkout应该只更新发生更改的文件的时间戳。

rsync应该能够高效地更新时间戳,并且如果只有元数据发生了更改,则不会传输任何数据。你可以用“加速”来验证这一点。您还可以要求最新版本的rsync使用-i标志逐项列出更改。您可以通过省略-a-t来告诉rsync不要使用时间戳(并且只使用校验和),但rsync(1)手册页不建议这样做。

票数 7
EN

Stack Overflow用户

发布于 2015-02-01 04:27:23

git 2.2.2+的情况(关于Git签出和时间戳)应该会更好(2015年1月)。

执行git checkout时,对于已经是最新的文件,时间戳不应再移动。

请参阅Jeff King (peff)commit c5326bd

签出$tree:不要丢弃未更改的索引项

当我们"git checkout $tree“时,我们:

  • 将路径从$tree拉入索引,然后
  • 将生成的条目签出到工作树中。

不过,我们的第一步方法相当笨重;即使内容是相同的,它也会破坏整个现有的索引条目。

这意味着我们丢失了统计信息,导致checkout_entry稍后使用相同的内容重写整个文件。

相反,让我们看看索引中是否已经有相同的条目,在这种情况下,我们将其保留在适当的位置。这让checkout_entry做了正确的事情。

我们的测试涵盖了两个有趣的案例:

  1. 我们确保没有更改的文件不是rewritten.
  2. We确保我们确实更新了索引中未更改的文件(与$tree相比),但有工作树更改。

我们保留旧的索引条目,并且checkout_entry能够意识到我们的统计信息已经过期。

票数 10
EN

Stack Overflow用户

发布于 2013-05-24 09:10:39

似乎Git这样做的唯一原因是,在DVCS环境中,您可能会使用旧的时间戳文件来更新新的时间戳文件,从而导致构建问题。我不认为这很好,因为我们很少使用旧的时间戳文件来更新新的时间戳文件。

  1. 我认为这可以用一种聪明的方式来处理:当用文件B更新文件A时,

file_timestamp =(时间戳(B)>时间戳(A))?时间戳(B):timestamp(CURRENT);

  1. 或,这可以设计为一个可配置的选项。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9789446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档