git-update-index(1)
===================

NAME
----
git-update-index - Register file contents in the working tree to the index


SYNOPSIS
--------
[verse]
'git update-index'
	     [--add] [--remove | --force-remove] [--replace]
	     [--refresh] [-q] [--unmerged] [--ignore-missing]
	     [(--cacheinfo <mode>,<object>,<file>)...]
	     [--chmod=(+|-)x]
	     [--[no-]assume-unchanged]
	     [--[no-]skip-worktree]
	     [--[no-]ignore-skip-worktree-entries]
	     [--[no-]fsmonitor-valid]
	     [--ignore-submodules]
	     [--[no-]split-index]
	     [--[no-|test-|force-]untracked-cache]
	     [--[no-]fsmonitor]
	     [--really-refresh] [--unresolve] [--again | -g]
	     [--info-only] [--index-info]
	     [-z] [--stdin] [--index-version <n>]
	     [--verbose]
	     [--] [<file>...]

DESCRIPTION
-----------
Modifies the index or directory cache. Each file mentioned is updated
into the index and any 'unmerged' or 'needs updating' state is
cleared.

See also linkgit:git-add[1] for a more user-friendly way to do some of
the most common operations on the index.

The way 'git update-index' handles files it is told about can be modified
using the various options:

OPTIONS
-------
--add::
	If a specified file isn't in the index already then it's
	added.
	Default behaviour is to ignore new files.

--remove::
	If a specified file is in the index but is missing then it's
	removed.
	Default behavior is to ignore removed file.

--refresh::
	Looks at the current index and checks to see if merges or
	updates are needed by checking stat() information.

-q::
        Quiet.  If --refresh finds that the index needs an update, the
        default behavior is to error out.  This option makes
	'git update-index' continue anyway.

--ignore-submodules::
	Do not try to update submodules.  This option is only respected
	when passed before --refresh.

--unmerged::
        If --refresh finds unmerged changes in the index, the default
	behavior is to error out.  This option makes 'git update-index'
        continue anyway.

--ignore-missing::
	Ignores missing files during a --refresh

--cacheinfo <mode>,<object>,<path>::
--cacheinfo <mode> <object> <path>::
	Directly insert the specified info into the index.  For
	backward compatibility, you can also give these three
	arguments as three separate parameters, but new users are
	encouraged to use a single-parameter form.

--index-info::
        Read index information from stdin.

--chmod=(+|-)x::
        Set the execute permissions on the updated files.

--[no-]assume-unchanged::
	When this flag is specified, the object names recorded
	for the paths are not updated.  Instead, this option
	sets/unsets the "assume unchanged" bit for the
	paths.  When the "assume unchanged" bit is on, the user
	promises not to change the file and allows Git to assume
	that the working tree file matches what is recorded in
	the index.  If you want to change the working tree file,
	you need to unset the bit to tell Git.  This is
	sometimes helpful when working with a big project on a
	filesystem that has very slow lstat(2) system call
	(e.g. cifs).
+
Git will fail (gracefully) in case it needs to modify this file
in the index e.g. when merging in a commit;
thus, in case the assumed-untracked file is changed upstream,
you will need to handle the situation manually.

--really-refresh::
	Like `--refresh`, but checks stat information unconditionally,
	without regard to the "assume unchanged" setting.

--[no-]skip-worktree::
	When one of these flags is specified, the object name recorded
	for the paths are not updated. Instead, these options
	set and unset the "skip-worktree" bit for the paths. See
	section "Skip-worktree bit" below for more information.


--[no-]ignore-skip-worktree-entries::
	Do not remove skip-worktree (AKA "index-only") entries even when
	the `--remove` option was specified.

--[no-]fsmonitor-valid::
	When one of these flags is specified, the object name recorded
	for the paths are not updated. Instead, these options
	set and unset the "fsmonitor valid" bit for the paths. See
	section "File System Monitor" below for more information.

-g::
--again::
	Runs 'git update-index' itself on the paths whose index
	entries are different from those from the `HEAD` commit.

--unresolve::
	Restores the 'unmerged' or 'needs updating' state of a
	file during a merge if it was cleared by accident.

--info-only::
	Do not create objects in the object database for all
	<file> arguments that follow this flag; just insert
	their object IDs into the index.

--force-remove::
	Remove the file from the index even when the working directory
	still has such a file. (Implies --remove.)

--replace::
	By default, when a file `path` exists in the index,
	'git update-index' refuses an attempt to add `path/file`.
	Similarly if a file `path/file` exists, a file `path`
	cannot be added.  With --replace flag, existing entries
	that conflict with the entry being added are
	automatically removed with warning messages.

--stdin::
	Instead of taking list of paths from the command line,
	read list of paths from the standard input.  Paths are
	separated by LF (i.e. one path per line) by default.

--verbose::
        Report what is being added and removed from index.

--index-version <n>::
	Write the resulting index out in the named on-disk format version.
	Supported versions are 2, 3 and 4. The current default version is 2
	or 3, depending on whether extra features are used, such as
	`git add -N`.
+
Version 4 performs a simple pathname compression that reduces index
size by 30%-50% on large repositories, which results in faster load
time. Version 4 is relatively young (first released in 1.8.0 in
October 2012). Other Git implementations such as JGit and libgit2
may not support it yet.

-z::
	Only meaningful with `--stdin` or `--index-info`; paths are
	separated with NUL character instead of LF.

--split-index::
--no-split-index::
	Enable or disable split index mode. If split-index mode is
	already enabled and `--split-index` is given again, all
	changes in $GIT_DIR/index are pushed back to the shared index
	file.
+
These options take effect whatever the value of the `core.splitIndex`
configuration variable (see linkgit:git-config[1]). But a warning is
emitted when the change goes against the configured value, as the
configured value will take effect next time the index is read and this
will remove the intended effect of the option.

--untracked-cache::
--no-untracked-cache::
	Enable or disable untracked cache feature. Please use
	`--test-untracked-cache` before enabling it.
+
These options take effect whatever the value of the `core.untrackedCache`
configuration variable (see linkgit:git-config[1]). But a warning is
emitted when the change goes against the configured value, as the
configured value will take effect next time the index is read and this
will remove the intended effect of the option.

--test-untracked-cache::
	Only perform tests on the working directory to make sure
	untracked cache can be used. You have to manually enable
	untracked cache using `--untracked-cache` or
	`--force-untracked-cache` or the `core.untrackedCache`
	configuration variable afterwards if you really want to use
	it. If a test fails the exit code is 1 and a message
	explains what is not working as needed, otherwise the exit
	code is 0 and OK is printed.

--force-untracked-cache::
	Same as `--untracked-cache`. Provided for backwards
	compatibility with older versions of Git where
	`--untracked-cache` used to imply `--test-untracked-cache` but
	this option would enable the extension unconditionally.

--fsmonitor::
--no-fsmonitor::
	Enable or disable files system monitor feature. These options
	take effect whatever the value of the `core.fsmonitor`
	configuration variable (see linkgit:git-config[1]). But a warning
	is emitted when the change goes against the configured value, as
	the configured value will take effect next time the index is
	read and this will remove the intended effect of the option.

\--::
	Do not interpret any more arguments as options.

<file>::
	Files to act on.
	Note that files beginning with '.' are discarded. This includes
	`./file` and `dir/./file`. If you don't want this, then use
	cleaner names.
	The same applies to directories ending '/' and paths with '//'

USING --REFRESH
---------------
`--refresh` does not calculate a new sha1 file or bring the index
up to date for mode/content changes. But what it *does* do is to
"re-match" the stat information of a file with the index, so that you
can refresh the index for a file that hasn't been changed but where
the stat entry is out of date.

For example, you'd want to do this after doing a 'git read-tree', to link
up the stat index details with the proper files.

USING --CACHEINFO OR --INFO-ONLY
--------------------------------
`--cacheinfo` is used to register a file that is not in the
current working directory.  This is useful for minimum-checkout
merging.

To pretend you have a file at path with mode and sha1, say:

----------------
$ git update-index --add --cacheinfo <mode>,<sha1>,<path>
----------------

`--info-only` is used to register files without placing them in the object
database.  This is useful for status-only repositories.

Both `--cacheinfo` and `--info-only` behave similarly: the index is updated
but the object database isn't.  `--cacheinfo` is useful when the object is
in the database but the file isn't available locally.  `--info-only` is
useful when the file is available, but you do not wish to update the
object database.


USING --INDEX-INFO
------------------

`--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:

    . mode SP type SP sha1          TAB path
+
This format is to stuff `git ls-tree` output into the index.

    . 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.

    . 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
------------


USING ``ASSUME UNCHANGED'' BIT
------------------------------

Many operations in Git depend on your filesystem to have an
efficient `lstat(2)` implementation, so that `st_mtime`
information for working tree files can be cheaply checked to see
if the file contents have changed from the version recorded in
the index file.  Unfortunately, some filesystems have
inefficient `lstat(2)`.  If your filesystem is one of them, you
can set "assume unchanged" bit to paths you have not changed to
cause Git not to do this check.  Note that setting this bit on a
path does not mean Git will check the contents of the file to
see if it has changed -- it makes Git to omit any checking and
assume it has *not* changed.  When you make changes to working
tree files, you have to explicitly tell Git about it by dropping
"assume unchanged" bit, either before or after you modify them.

In order to set "assume unchanged" bit, use `--assume-unchanged`
option.  To unset, use `--no-assume-unchanged`. To see which files
have the "assume unchanged" bit set, use `git ls-files -v`
(see linkgit:git-ls-files[1]).

The command looks at `core.ignorestat` configuration variable.  When
this is true, paths updated with `git update-index paths...` and
paths updated with other Git commands that update both index and
working tree (e.g. 'git apply --index', 'git checkout-index -u',
and 'git read-tree -u') are automatically marked as "assume
unchanged".  Note that "assume unchanged" bit is *not* set if
`git update-index --refresh` finds the working tree file matches
the index (use `git update-index --really-refresh` if you want
to mark them as "assume unchanged").


EXAMPLES
--------
To update and refresh only the files already checked out:

----------------
$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
----------------

On an inefficient filesystem with `core.ignorestat` set::
+
------------
$ git update-index --really-refresh              <1>
$ git update-index --no-assume-unchanged foo.c   <2>
$ git diff --name-only                           <3>
$ edit foo.c
$ git diff --name-only                           <4>
M foo.c
$ git update-index foo.c                         <5>
$ git diff --name-only                           <6>
$ edit foo.c
$ git diff --name-only                           <7>
$ git update-index --no-assume-unchanged foo.c   <8>
$ git diff --name-only                           <9>
M foo.c
------------
+
<1> forces lstat(2) to set "assume unchanged" bits for paths that match index.
<2> mark the path to be edited.
<3> this does lstat(2) and finds index matches the path.
<4> this does lstat(2) and finds index does *not* match the path.
<5> registering the new version to index sets "assume unchanged" bit.
<6> and it is assumed unchanged.
<7> even after you edit it.
<8> you can tell about the change after the fact.
<9> now it checks with lstat(2) and finds it has been changed.


SKIP-WORKTREE BIT
-----------------

Skip-worktree bit can be defined in one (long) sentence: When reading
an entry, if it is marked as skip-worktree, then Git pretends its
working directory version is up to date and read the index version
instead.

To elaborate, "reading" means checking for file existence, reading
file attributes or file content. The working directory version may be
present or absent. If present, its content may match against the index
version or not. Writing is not affected by this bit, content safety
is still first priority. Note that Git _can_ update working directory
file, that is marked skip-worktree, if it is safe to do so (i.e.
working directory version matches index version)

Although this bit looks similar to assume-unchanged bit, its goal is
different from assume-unchanged bit's. Skip-worktree also takes
precedence over assume-unchanged bit when both are set.

SPLIT INDEX
-----------

This mode is designed for repositories with very large indexes, and
aims at reducing the time it takes to repeatedly write these indexes.

In this mode, the index is split into two files, $GIT_DIR/index and
$GIT_DIR/sharedindex.<SHA-1>. Changes are accumulated in
$GIT_DIR/index, the split index, while the shared index file contains
all index entries and stays unchanged.

All changes in the split index are pushed back to the shared index
file when the number of entries in the split index reaches a level
specified by the splitIndex.maxPercentChange config variable (see
linkgit:git-config[1]).

Each time a new shared index file is created, the old shared index
files are deleted if their modification time is older than what is
specified by the splitIndex.sharedIndexExpire config variable (see
linkgit:git-config[1]).

To avoid deleting a shared index file that is still used, its
modification time is updated to the current time everytime a new split
index based on the shared index file is either created or read from.

UNTRACKED CACHE
---------------

This cache is meant to speed up commands that involve determining
untracked files such as `git status`.

This feature works by recording the mtime of the working tree
directories and then omitting reading directories and stat calls
against files in those directories whose mtime hasn't changed. For
this to work the underlying operating system and file system must
change the `st_mtime` field of directories if files in the directory
are added, modified or deleted.

You can test whether the filesystem supports that with the
`--test-untracked-cache` option. The `--untracked-cache` option used
to implicitly perform that test in older versions of Git, but that's
no longer the case.

If you want to enable (or disable) this feature, it is easier to use
the `core.untrackedCache` configuration variable (see
linkgit:git-config[1]) than using the `--untracked-cache` option to
`git update-index` in each repository, especially if you want to do so
across all repositories you use, because you can set the configuration
variable to `true` (or `false`) in your `$HOME/.gitconfig` just once
and have it affect all repositories you touch.

When the `core.untrackedCache` configuration variable is changed, the
untracked cache is added to or removed from the index the next time a
command reads the index; while when `--[no-|force-]untracked-cache`
are used, the untracked cache is immediately added to or removed from
the index.

Before 2.17, the untracked cache had a bug where replacing a directory
with a symlink to another directory could cause it to incorrectly show
files tracked by git as untracked. See the "status: add a failing test
showing a core.untrackedCache bug" commit to git.git. A workaround for
that is (and this might work for other undiscovered bugs in the
future):

----------------
$ git -c core.untrackedCache=false status
----------------

This bug has also been shown to affect non-symlink cases of replacing
a directory with a file when it comes to the internal structures of
the untracked cache, but no case has been reported where this resulted in
wrong "git status" output.

There are also cases where existing indexes written by git versions
before 2.17 will reference directories that don't exist anymore,
potentially causing many "could not open directory" warnings to be
printed on "git status". These are new warnings for existing issues
that were previously silently discarded.

As with the bug described above the solution is to one-off do a "git
status" run with `core.untrackedCache=false` to flush out the leftover
bad data.

FILE SYSTEM MONITOR
-------------------

This feature is intended to speed up git operations for repos that have
large working directories.

It enables git to work together with a file system monitor (see the
"fsmonitor-watchman" section of linkgit:githooks[5]) that can
inform it as to what files have been modified. This enables git to avoid
having to lstat() every file to find modified files.

When used in conjunction with the untracked cache, it can further improve
performance by avoiding the cost of scanning the entire working directory
looking for new files.

If you want to enable (or disable) this feature, it is easier to use
the `core.fsmonitor` configuration variable (see
linkgit:git-config[1]) than using the `--fsmonitor` option to
`git update-index` in each repository, especially if you want to do so
across all repositories you use, because you can set the configuration
variable in your `$HOME/.gitconfig` just once and have it affect all
repositories you touch.

When the `core.fsmonitor` configuration variable is changed, the
file system monitor is added to or removed from the index the next time
a command reads the index. When `--[no-]fsmonitor` are used, the file
system monitor is immediately added to or removed from the index.

CONFIGURATION
-------------

The command honors `core.filemode` configuration variable.  If
your repository is on a filesystem whose executable bits are
unreliable, this should be set to 'false' (see linkgit:git-config[1]).
This causes the command to ignore differences in file modes recorded
in the index and the file mode on the filesystem if they differ only on
executable bit.   On such an unfortunate filesystem, you may
need to use 'git update-index --chmod='.

Quite similarly, if `core.symlinks` configuration variable is set
to 'false' (see linkgit:git-config[1]), symbolic links are checked out
as plain files, and this command does not modify a recorded file mode
from symbolic link to regular file.

The command looks at `core.ignorestat` configuration variable.  See
'Using "assume unchanged" bit' section above.

The command also looks at `core.trustctime` configuration variable.
It can be useful when the inode change time is regularly modified by
something outside Git (file system crawlers and backup systems use
ctime for marking files processed) (see linkgit:git-config[1]).

The untracked cache extension can be enabled by the
`core.untrackedCache` configuration variable (see
linkgit:git-config[1]).

SEE ALSO
--------
linkgit:git-config[1],
linkgit:git-add[1],
linkgit:git-ls-files[1]

GIT
---
Part of the linkgit:git[1] suite
