Re: touching a file causes it to be listed using git diff-files
- From
Jeff King <peff@peff.net>
- Date
- Jan 14, 2010, 03:02 UTC
- Message-ID
- <20100114030204.GB1878@coredump.intra.peff.net>
- In-Reply-To
- <p0624080ec7740ddc4caf@[63.138.152.134]>
On Wed, Jan 13, 2010 at 06:57:28PM -0500, Stephen Bannasch wrote:
Show 5 quoted lines
> If I touch a file in the working directory (only changing it's last-modified) attribute it shows up when running git diff-files. > > If I then run git status followed by git diff-files again it doesn't show up either time. > > Is this an error?
No. For performance reasons[1], plumbing commands like diff-files do not update the index. You must run "git update-index --refresh" manually.
User-facing porcelain commands like "git diff" and "git status" will refresh the index automatically. So "git status" will, as a side effect, refresh the index and impact further calls to diff-files.
-Peff
[1] Refreshing the index needs to stat all of the files. If you are writing a script using plumbing commands, you probably want to do the possibly-expensive refresh once at the start of your script, and then issue many diff commands. This makes a lot of sense for "diff-index", which otherwise does not need to touch the working tree at all. I'm not sure how much it helps with diff-files, though, which clearly ends up stat'ing the working tree file anyway.