--index-info
is a more powerful mechanism that lets you feed
multiple entry definitions from the standard input, and designed
specifically for scripts. It can take inputs of three formats:
1. mode SP type SP sha1 TAB path
This format is to stuff git ls-tree
output into the index.
2. mode SP sha1 SP stage TAB path
This format is to put higher order stages into the index file
and matches git ls-files --stage output.
3. mode SP sha1 TAB path
This format is no longer produced by any Git command, but is
and will continue to be supported by update-index
--index-info
.
To place a higher stage entry to the index, the path should first
be removed by feeding a mode=0 entry for the path, and then
feeding necessary input lines in the third format.
For example, starting with this index:
$ git ls-files -s
100644 8a1218a1024a212bb3db30becd860315f9f3ac52 0 frotz
you can feed the following input to --index-info
:
$ git update-index --index-info
0 0000000000000000000000000000000000000000 frotz
100644 8a1218a1024a212bb3db30becd860315f9f3ac52 1 frotz
100755 8a1218a1024a212bb3db30becd860315f9f3ac52 2 frotz
The first line of the input feeds 0 as the mode to remove the
path; the SHA-1 does not matter as long as it is well formatted.
Then the second and third line feeds stage 1 and stage 2 entries
for that path. After the above, we would end up with this:
$ git ls-files -s
100644 8a1218a1024a212bb3db30becd860315f9f3ac52 1 frotz
100755 8a1218a1024a212bb3db30becd860315f9f3ac52 2 frotz