other versions
- wheezy 1:1.7.10.4-1+wheezy3
- wheezy-backports 1:1.9.1-1~bpo70+2
- jessie 1:2.1.4-2.1+deb8u2
- jessie-backports 1:2.11.0-3~bpo8+1
- testing 1:2.11.0-3
- unstable 1:2.11.0-4
- experimental 1:2.13.1+next.20170610-1
GIT-UPDATE-INDEX(1) | Git Manual | GIT-UPDATE-INDEX(1) |
NAME¶
git-update-index - Register file contents in the working tree to the indexSYNOPSIS¶
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] [--ignore-submodules] [--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.OPTIONS¶
--addIf 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>
Directly insert the specified info into the
index.
--index-info
Read index information from stdin.
--chmod=(+|-)x
Set the execute permissions on the updated
files.
--[no-]assume-unchanged
When these flags are specified, the object
names recorded for the paths are not updated. Instead, these options set and
unset the "assume unchanged" bit for the paths. When the
"assume unchanged" bit is on, Git stops checking the working tree
files for possible modifications, so you need to manually unset the bit to
tell Git when you change the working tree file. This is sometimes helpful when
working with a big project on a filesystem that has very slow lstat(2) system
call (e.g. cifs).
This option can be also used as a coarse file-level mechanism to ignore
uncommitted changes in tracked files (akin to what .gitignore does for
untracked files). 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.
-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 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.
--
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.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.$ git update-index --cacheinfo mode sha1 path
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: 1.mode SP sha1 TAB path
The first format is what "git-apply --index-info" reports, and used to
reconstruct a partial tree that is used for phony merge base tree when falling
back on 3-way merge.
2.mode SP type SP sha1 TAB path
The second format is to stuff git ls-tree output into the index
file.
3.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.
$ git ls-files -s 100644 8a1218a1024a212bb3db30becd860315f9f3ac52 0 frotz
$ git update-index --index-info 0 0000000000000000000000000000000000000000 frotz 100644 8a1218a1024a212bb3db30becd860315f9f3ac52 1 frotz 100755 8a1218a1024a212bb3db30becd860315f9f3ac52 2 frotz
$ 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.EXAMPLES¶
To update and refresh only the files already checked out:$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
$ 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
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.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 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=.SEE ALSO¶
git-config(1), git-add(1), git-ls-files(1)GIT¶
Part of the git(1) suite04/08/2014 | Git 1.9.1 |