【发布时间】: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