git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: diff-files inconsistency with touched files

From
JSJames Spencer <jss43@cam.ac.uk>
Date
Sep 3, 2009, 16:18 UTC
Message-ID
<4A9FEC6E.9030904@cam.ac.uk>
In-Reply-To
<20090902192820.GE6900@coredump.intra.peff.net>
Jeff King wrote:
Show 42 quoted lines
> On Wed, Sep 02, 2009 at 06:27:15PM +0100, James Spencer wrote:
> 
>> $ git diff-files
>> $ touch test
>> $ git diff-files
>> :100644 100644 9daeafb9864cf43055ae93beb0afd6c7d144bfa4
>> 0000000000000000000000000000000000000000 M  test
>> $ git diff
>> $ git diff-files
>> $
>>
>> I don't understand why git diff-files reports a file is changed when
>> that file is touched nor why running git diff changes this to (what I
>> think is) the correct behaviour.
> 
> Git uses the stat information of a file to know whether what we have
> cached in the index is up-to-date or not. So in the first diff-files, we
> don't even have to look at the contents of "test"; we see that it hasn't
> changed since the last time we looked at the contents, and that its
> sha-1 matches what's in the index, so there is no diff.
> 
> By running "touch", you have changed the stat information, so we believe
> there may be a difference. But we don't actually know what's _in_ the
> new side, so we just print the null sha1 instead of the actual sha1
> contents.
> 
> Diff-files _could_ refresh the cache each time it runs, but we
> intentionally do not do that. Doing so is a little bit expensive, and
> because diff-files is intended as a low-level tool for scripts, we give
> the script the flexibility (and responsibility) of refreshing the cache
> when it wants to. So you could do:
> 
>   $ git update-index --refresh
>   $ git diff-files
> 
> and get clean output.
> 
> You see different behavior from "git diff" because it is meant for user
> consumption and therefore refreshes the cache automatically at the
> beginning of every run.
> 
> -Peff
Thanks for your help!
    --James
Previous: Jeff King
Message 3 of 3 in “diff-files inconsistency with touched files”
  1. James SpencerSep 2, 2009
  2. Jeff KingSep 2, 2009
  3. James SpencerSep 3, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.