保留原始时间戳在集市 commit/pull/etc 中有用吗?

Is keeping original timestamp useful in bazaar commit/pull/etc.?

当使用 bzr pull 时,文件的时间戳变为 "now"(选项 1),而不是在存储库中保留原始时间戳(选项 2)。

选项 1 的缺点:

  1. 本应相同的文件变得不同(即使只是在修改时间)。这些差异可能 "propagate" pulls/commits/etc。它们会污染包中文件的实际修改时间记录。

  2. 构建系统(如make),它使用一些文件(先决条件)的修改时间来评估是否需要制作其他文件(目标), 可能无法正常工作。 带有 "old" 时间戳的文件被拉出并且构建系统忽略了正确构建而它不应该忽略的情况,可能表示构建过程配置错误,或者需要 make clean 之前到 make(这应该是用户的责任)。 我没有看到任何情况下更改源文件(即使只是它的时间戳)以避免需要 make clean 是方便的。

时间戳是存储库中文件的时间戳是否有用? (选项 2;类似的问题适用于 bzr commit

原则上,我会说是,但应该有充分的理由让 bazaar 像现在这样工作(我只是没有看到)。


编辑: 接受的答案恰好暗示了这里的第 2 点 (我也发布了一个完整的答案)。 我之前曾将此视为构建系统配置不当的症状。 但是现在我发现没有办法使用当前工具按照我认为应该工作的方式配置构建系统。 使用原始时间戳,每个 pull 都会被迫 make clean,从而重建所有目标。 使用 "now" 作为时间戳至少可以让系统根据更改的先决条件仅重建目标。但我仍然认为这是 "least damaging" 选项,而真正的 objective 应该有两种方式:1)根据更改的先决条件仅重建目标,2)保持文件内容的真实修改时间跨副本。

使用 now 而不是记录时间的原因很简单:构建系统(如 make)可以简单地发现文件已更改并根据该文件重建工件。

Bazaar 并不是唯一有这种行为的公司;据我所知,所有版本控制系统都是这样工作的。

在这里使用当前时间是正确的,因为构建系统不知道版本控制历史——它只知道目录时间。在工作树的上下文中,该文件 实际上是新的。

想象一下这样一种情况,其中有一个构建目标依赖于源文件 B,该源文件 B 使用如下时间线签入 Bazaar:

  • T0:用户 X 在修订版 1 后签出 A 和 B。
  • T1:用户 Y 在 Bazaar 中对 B 进行了更改
  • T2:用户 X 构建了一个从 B 派生的构建目标(例如编译它)
  • T3: 用户 X 拉入了用户 Y 所做的新修订,B 的时间戳更改为 T1(因此早于构建目标的 T2)
  • T4:用户 X 尝试再次构建,但 B 的时间戳比构建工件更旧,因此没有任何重建

理想情况下,在使用Version control(VC)时,配合bazaar(版本控制系统,VCS)等软件,一个将能够:

  1. 在各个副本中保留文件内容的真实修改时间,因为这是关于文件的重要信息。 不管VC.
  2. 下的文件具体内容如何,​​都是如此
  3. 确保根据 VC 下已更改先决条件的构建目标在获得修改后的副本(例如,bzr pull)时重建。 这一点很重要,因为 VCSs 的典型用途:软件开发。 引用自 Wikipedia

    The need for a logical way to organize and control revisions has existed for almost as long as writing has existed... Today, the most capable (as well as complex) revision control systems are those used in software development, ...

  4. 确保构建目标不是取决于VC下已更改的先决条件,不是在获得修改后重建副本。 这避免了处理时间中可能显着的过载。 (我认为放弃这一点没有其他缺点)。

bzr(以及任何其他 VCS?)的当前形式,无法获得三个。

一个人可以得到 (1+2) 使用原始时间戳,并对每个 pull 执行 make clean(或类似操作),从而重建所有目标而不是仅重建几个目标。 另一方面, 一个人可以得到 (2+3) 使用 "now" 作为时间戳。 (1+3) 既不可能也不有趣。

bzr(以及所有其他 VCSs?),考虑到软件开发,让 (2+3) 为准,放弃第 1 点。

那么,它是否有用...?
是的,但可能不足以对抗其他便利点。

Version Control System that keeps original timestamps?

PS:这总结了其他答案,特别是我对 OP 的 EDIT,对特定问题的回答。