Dear Git users, I have some difficulties to understand, why git read-tree followed by a git diff-files actually shows some changes between the index and working directory. The attached script demonstrates the observation. The output on my computer can be seen in the following (note that echo line does 'echo test >testdir/testfile').
+ rm -Rf test + git init test Initialized empty Git repository in /home/sba/gittest/test/.git/ + cd test + mkdir testdir + echo test + git update-index --add testdir/testfile ++ git write-tree + tree=ccab85fd26420d7707f41efd82d4182d06bf0cde + git read-tree ccab85fd26420d7707f41efd82d4182d06bf0cde + git diff-files :100644 100644 9daeafb9864cf43055ae93beb0afd6c7d144bfa4 0000000000000000000000000000000000000000 M testdir/testfile + git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: testdir/testfile # + git diff-files sba@stan:~/gittest$ So what you see in this sequence is that git read-tree puts the tree into the index. The index matches the files in the working directory, but nonetheless, git diff-files lists the single file as different (git diff-files is supposed to list differences between index and working directory). After calling 'git status' 'git diff-files' works as expected. Is there any explanation why git behaves like that? Note that this is a test case in the t0000-basic.sh suite so this is actually the expected behaviour. Thanks in advance! Best Sebastian --
#!/bin/sh set -x rm -Rf test git init test cd test mkdir testdir echo test >testdir/testfile git update-index --add testdir/testfile tree=`git write-tree` git read-tree $tree git diff-files git status git diff-files