threads / discuss / 51151

strange behavior of git diff-index

Subject: strange behavior of git diff-index

## tl;dr

3 messages between May 22, 2019 and May 22, 2019.

replies: 2people: 2as markdown or json

Oussama Ghorbel· May 22, 2019, 10:00 UTC · lore
Hi,

git diff-index is giving me incorrect information, however if I run git diff, then git diff-index again it will show the correct information. The steps are the following: $ git diff-index --name-only HEAD git appears to list all files in the project irrespective if they modified or not $ git diff $ git diff --cached will show nothing. So I don't have any modification.  Now strangely if I run git diff-index, it will also show nothing which is correction behavior.

my git version is 2.7.4 Any explanation?

Thanks, Oussama

Johannes Schindelin· May 22, 2019, 14:54 UTC · re: Oussama Ghorbel · lore

Re: strange behavior of git diff-index

Hi Oussama,
On Wed, 22 May 2019, Oussama Ghorbel wrote:
Show 11 quoted lines
> git diff-index is giving me incorrect information, however if I run git diff, then git diff-index again it will show the correct information.
> The steps are the following:
> $ git diff-index --name-only HEAD
> git appears to list all files in the project irrespective if they modified or not
> $ git diff
> $ git diff --cached
> will show nothing. So I don't have any modification. 
> Now strangely if I run git diff-index, it will also show nothing which is correction behavior.
>
> my git version is 2.7.4
> Any explanation?

The low-level `diff-index` command is meant to be used in scripts, and does specifically *not* refresh the index before running. Meaning that it could possibly mistake a file for being modified even if it is not modified, just because it is marked "modified" in the index [*1*].

Short answer: use the high-level command `git diff` that is intended for human consumption.

Ciao, Johannes

Footnote *1*: It is actually a bit more complicated than that: the index stores metadata such as mtime, size, uid, etc, and compares that to the metadata on disk. If there is any mismatch, or if everything matches but the mtime *also* matches the index file's itself, the file is considered not up to date, i.e. marked as modified.

Oussama Ghorbel· May 22, 2019, 15:27 UTC · re: Johannes Schindelin · lore

Re: strange behavior of git diff-index

Hi Johannes,
Thanks a lot for the clarification!

Regards, Oussama On 5/22/19 4:54 PM, Johannes Schindelin wrote:

Show 31 quoted lines
> Hi Oussama,
>
> On Wed, 22 May 2019, Oussama Ghorbel wrote:
>
>> git diff-index is giving me incorrect information, however if I run git diff, then git diff-index again it will show the correct information.
>> The steps are the following:
>> $ git diff-index --name-only HEAD
>> git appears to list all files in the project irrespective if they modified or not
>> $ git diff
>> $ git diff --cached
>> will show nothing. So I don't have any modification.
>> Now strangely if I run git diff-index, it will also show nothing which is correction behavior.
>>
>> my git version is 2.7.4
>> Any explanation?
> The low-level `diff-index` command is meant to be used in scripts, and
> does specifically *not* refresh the index before running. Meaning that it
> could possibly mistake a file for being modified even if it is not
> modified, just because it is marked "modified" in the index [*1*].
>
> Short answer: use the high-level command `git diff` that is intended for
> human consumption.
>
> Ciao,
> Johannes
>
> Footnote *1*: It is actually a bit more complicated than that: the index
> stores metadata such as mtime, size, uid, etc, and compares that to the
> metadata on disk. If there is any mismatch, or if everything matches but
> the mtime *also* matches the index file's itself, the file is considered
> not up to date, i.e. marked as modified.

← back to recent threads