保持原始时间戳在bazaar commit / pull / etc中有用吗?

时间:2018-01-05 18:44:36

标签: timestamp bazaar

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

选项1的缺点:

  1. 应该相同的文件会有所不同(即使仅在修改时间内)。这些差异可能会传播"跨拉/提交/等。它们会污染包中文件的实际修改时间记录。

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

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

    原则上,我会说是,但是应该有一个很好的理由让集市像它一样工作(我只是看不到它)。

    <小时/> 的修改: 接受的答案在这里完全提到了第2点 (我也发布了一个彻底的答案)。 我之前看到这是一个配置不良的构建系统的症状。 但是现在我发现使用当前工具无法按照我认为它应该工作的方式配置构建系统。 使用原始时间戳,每个make clean将强制pull,从而重建所有目标。 使用&#34;现在&#34;作为时间戳,至少让系统根据已更改的先决条件仅重建目标。但我仍然认为这是最不具破坏性的&#34;选项,而真正的目标应该是两种方式:1)根据已更改的先决条件仅重建目标,2)保持文件内容的真正修改时间跨副本。

3 个答案:

答案 0 :(得分:1)

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的时间戳早于构建工件,因此没有重建任何内容

答案 1 :(得分:0)

有一个简单的理由现在使用而不是记录时间:构建系统(如make)可以简单地发现文件已更改并根据该文件重建工件。

答案 2 :(得分:0)

理想情况下,当使用Version control(VC)和 bazaar (版本控制系统,VCS)等软件时,可以:

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

    组织和控制修订的逻辑方法的需要几乎与写作已经存在一样......今天,最有能力(以及复杂)的修订控制系统是用于软件开发的系统,...

  3. 根据VC下已更改的先决条件,确保构建目标,在获取修改后的副本时重建。 这避免了处理时间可能显着的负担。 (我认为没有其他不利因素可以放弃这一点)。
  4. 目前使用bzr(以及任何其他VCS?),人们无法获得这三种。

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

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

    所以,会有用吗?
    是的,但可能还不足以对抗其他便利点。

    请参阅Version Control System that keeps original timestamps?

    PS:这总结了其他答案,特别是OP的 EDIT ,以回答具体问题。