【问题标题】:Restore modification times after vc operationsvc 操作后恢复修改时间
【发布时间】:2014-04-23 18:30:55
【问题描述】:

Make 纯粹是面向时间戳的:如果源比其目标更旧,则重新构建目标。如果绕开一些主要的版本控制,这可能会导致大型应用程序中的长时间重新编译。

让我举个例子。假设我有一个尚未合并的旧功能分支,我想看看它是怎么做的。所以从master开始,我会签出那个分支,然后将master合并到它里面,然后编译。一切都很好,如果功能很小,那么与 master 的差异也应该很小。除了如果功能分支真的很旧,我在文件系统中撤消然后重新做了很多修改。

作为第二个示例,您可能会想象将大部分代码一分为二,同时寻找一些复杂的条件,这些条件超出了 git pickaxe 但不需要重新编译代码。找到我要找的东西后,我应该回到我的主分支。但在这期间,如果二分窗口足够大,可能会修改许多文件。

所以我想知道的是:是否有一些工具可以让我预先拍摄修改时间的快照,并为那些通过这些操作恢复内容的文件恢复 mtime。当然,完成后我必须明确地告诉它,因为这样做的重点是文件可能会在两者之间发生变化。

我想我正在寻找一个与 git 集成的工具,因为对于一个通用工具,拍摄一个大源树的快照也需要相当长的时间,所以它必须是可以跟踪文件的东西他们被修改,例如使用一些钩子。另一方面,如果git status 也必须检查每个文件的内容,那么通用工具的成本可能不会那么高。

有没有这样的工具,还是我自己写一个?

请注意,Checking out old file WITH original create/modified timestamps 似乎并不是我想要的,而且无论如何都需要很长时间。

【问题讨论】:

  • "并为那些通过这些操作恢复内容的文件恢复 mtimes" - 这个不清楚,尤其是"这些操作"。摆弄 mtimes 没问题,但那能达到什么效果呢?如果您不保留从该特定源文件版本派生的目标文件,则必须重新编译。
  • “这些操作”表示例如“切换分支然后合并”,或“二等分然后结帐头”。如果放在一起,它会修改许多文件,但很少有文件。那是不是更清楚了?我确实保留了目标文件,因此当且仅当文件 content 自我进行编译后发生更改时,我才必须重新编译,但如果 timestamp 更改,make 将重新编译。更改内容然后恢复它会更改时间戳,但不会导致内容发生净变化。这就是我的相关案例。
  • 在某些(您的)CM 系统中从“那个时间”返回到以前的版本是否真的将时间戳从“那个时间”更改为“现在”?也许我被宠坏了,但我们公司使用的非免费系统从来没有遇到过这个问题。
  • @laune:CM(在这种情况下为 git)直接对时间戳做任何事情,但它将文件内容更改为当时的内容,这导致操作系统将时间戳更新为当前时间。当内容变回时,时间戳会再次更新为当前时间,这比我上次编译的时间要新,所以对象看起来已经过时了。
  • 我记得曾经看过一个项目,您可以将它与git 结合使用来捕获权限和时间戳等元数据。不记得名字了,但也许在here 周围寻找会是一个很好的起点...

标签: git version-control makefile timestamp filemtime


【解决方案1】:

找不到合适的工具,我最终写了my own tool。事实证明它没有我想象的那么困难,主要是因为散列所有这些文件的内容比我想象的要便宜,至少对于热文件系统缓存来说是这样。

【讨论】:

    【解决方案2】:

    如果派生版本的生产成本太高,并且如果这种分支切换和回到某个旧基线是您经常做的事情(为什么?)那么您应该考虑检查这些派生版本及其输入,并对它们进行基线标记。

    【讨论】:

    • 编译成本并不高,只是很烦人,而且源代码树不是我的。所以不,检查产品不是一种选择。至于为什么,功能是在不同的分支中开发的,我从事不同的功能。所以“切换到特性分支然后合并主分支”是一个常见的步骤。我没有处理给定功能的时间越长,两者之间的差异就会越大。
    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多