上次修改文件

时间:2014-09-09 12:59:29

标签: java git jgit

我正在尝试尽可能多地使用JGit检索Git上的文件信息 使用getCommitTime我可以获得提交文件的时间。是否也可以获得修改/更新/编辑文件的时间?我还没找到像getModifiedTime这样的东西。

1 个答案:

答案 0 :(得分:1)

你运气不好。 Git在一个名为" blob"的对象中记录文件的内容,在树对象中记录 filename ,但它不保留 timestamps 。

当您检出文件时,现在工作树中文件的修改时间戳实际上设置为内核时钟显示的当前日期和时间。

为什么它不是一件坏事

您可能使用make实用程序(或类似实用程序)来自动构建。如您所知,make依赖于修改时间戳来确定必须构建哪些目标(如果有)。

让我们想象如果Git在提交的文件中记录(并在结帐时恢复)修改时间戳,会发生什么。假设您的存储库只有一个跟踪文件foo,它是目标bar的唯一依赖项:

foo -> bar

让我们进一步假设,

  • 您的历史记录包含两个提交:

    A -- B [HEAD=master]
    
  • 提交fooA的修改时间戳为"今天",上午9点,

  • 提交fooB的修改时间戳为"今天",上午10点。

您目前已签出提交B,并且您已于上午10:05运行make,因此工作树中的构建(bar)是最新的。但是,您决定要返回提交A,并从那里创建并签出分支(可能以不同的方向执行foo):

git checkout -b other HEAD^

您的回购现在看起来如下

A [HEAD=other]
 \
  B [master]

如果您再次运行make,为了构建与提交bar相对应的A版本,make将比较跟踪和{1}}的修改时间戳。目前已检出文件foo(上午9点)和未跟踪文件bar(上午10点05分),并且可以得出结论:bar是最新的并且没有'需要重建。

要强制make再次构建bar,您必须touch foo。这很麻烦,当然,随着项目中跟踪的make依赖项数量的增加,问题会变得更糟。

因此,Git在结账时没有记录和恢复跟踪文件的修改时间戳,这并不是一件坏事。


相关阅读: