]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-update-index.txt
Documentation: format full commands in typewriter font
[thirdparty/git.git] / Documentation / git-update-index.txt
CommitLineData
215a7ad1 1git-update-index(1)
2cf565c5 2===================
2cf565c5
DG
3
4NAME
5----
c3f0baac 6git-update-index - Register file contents in the working tree to the index
2cf565c5
DG
7
8
9SYNOPSIS
10--------
f9666adf 11[verse]
b1889c36 12'git update-index'
de5f2bf3
MK
13 [--add] [--remove | --force-remove] [--replace]
14 [--refresh] [-q] [--unmerged] [--ignore-missing]
2cf565c5 15 [--cacheinfo <mode> <object> <file>]\*
5773c9f2 16 [--chmod=(+|-)x]
f9666adf 17 [--assume-unchanged | --no-assume-unchanged]
5fdeacb0 18 [--ignore-submodules]
7099c9c7 19 [--really-refresh] [--unresolve] [--again | -g]
14470c0d
CS
20 [--info-only] [--index-info]
21 [-z] [--stdin]
22 [--verbose]
2cf565c5
DG
23 [--] [<file>]\*
24
25DESCRIPTION
26-----------
27Modifies the index or directory cache. Each file mentioned is updated
5f3aa197 28into the index and any 'unmerged' or 'needs updating' state is
2cf565c5
DG
29cleared.
30
5162e697 31See also linkgit:git-add[1] for a more user-friendly way to do some of
e701ccc3
MM
32the most common operations on the index.
33
ba020ef5 34The way 'git-update-index' handles files it is told about can be modified
2cf565c5
DG
35using the various options:
36
37OPTIONS
38-------
39--add::
5f3aa197 40 If a specified file isn't in the index already then it's
2cf565c5
DG
41 added.
42 Default behaviour is to ignore new files.
43
44--remove::
5f3aa197 45 If a specified file is in the index but is missing then it's
2cf565c5 46 removed.
abda1ef5 47 Default behavior is to ignore removed file.
2cf565c5
DG
48
49--refresh::
5f3aa197 50 Looks at the current index and checks to see if merges or
2cf565c5
DG
51 updates are needed by checking stat() information.
52
14470c0d 53-q::
5f3aa197 54 Quiet. If --refresh finds that the index needs an update, the
14470c0d 55 default behavior is to error out. This option makes
ba020ef5 56 'git-update-index' continue anyway.
14470c0d 57
04c8ce9c 58--ignore-submodules::
5fdeacb0
JS
59 Do not try to update submodules. This option is only respected
60 when passed before --refresh.
61
14470c0d 62--unmerged::
5f3aa197 63 If --refresh finds unmerged changes in the index, the default
ba020ef5 64 behavior is to error out. This option makes 'git-update-index'
14470c0d
CS
65 continue anyway.
66
2cf565c5
DG
67--ignore-missing::
68 Ignores missing files during a --refresh
69
70--cacheinfo <mode> <object> <path>::
5f3aa197 71 Directly insert the specified info into the index.
a6080a0a 72
14470c0d 73--index-info::
7acab8f1 74 Read index information from stdin.
14470c0d
CS
75
76--chmod=(+|-)x::
a6080a0a 77 Set the execute permissions on the updated files.
14470c0d 78
3240240f
SB
79--assume-unchanged::
80--no-assume-unchanged::
04c8ce9c 81 When these flags are specified, the object names recorded
f9666adf 82 for the paths are not updated. Instead, these options
04c8ce9c 83 set and unset the "assume unchanged" bit for the
f9666adf
JH
84 paths. When the "assume unchanged" bit is on, git stops
85 checking the working tree files for possible
86 modifications, so you need to manually unset the bit to
87 tell git when you change the working tree file. This is
88 sometimes helpful when working with a big project on a
89 filesystem that has very slow lstat(2) system call
90 (e.g. cifs).
6259ac66
PB
91+
92This option can be also used as a coarse file-level mechanism
93to ignore uncommitted changes in tracked files (akin to what
94`.gitignore` does for untracked files).
95You should remember that an explicit 'git add' operation will
96still cause the file to be refreshed from the working tree.
97Git will fail (gracefully) in case it needs to modify this file
98in the index e.g. when merging in a commit;
99thus, in case the assumed-untracked file is changed upstream,
100you will need to handle the situation manually.
f9666adf 101
466d1f15
ŠN
102--really-refresh::
103 Like '--refresh', but checks stat information unconditionally,
104 without regard to the "assume unchanged" setting.
105
3240240f
SB
106-g::
107--again::
ba020ef5 108 Runs 'git-update-index' itself on the paths whose index
83e77a25
JH
109 entries are different from those from the `HEAD` commit.
110
060729dd
MK
111--unresolve::
112 Restores the 'unmerged' or 'needs updating' state of a
113 file during a merge if it was cleared by accident.
114
df6e1516
BL
115--info-only::
116 Do not create objects in the object database for all
117 <file> arguments that follow this flag; just insert
5f3aa197 118 their object IDs into the index.
df6e1516 119
2cf565c5
DG
120--force-remove::
121 Remove the file from the index even when the working directory
9b63f501 122 still has such a file. (Implies --remove.)
2cf565c5
DG
123
124--replace::
125 By default, when a file `path` exists in the index,
ba020ef5 126 'git-update-index' refuses an attempt to add `path/file`.
2cf565c5
DG
127 Similarly if a file `path/file` exists, a file `path`
128 cannot be added. With --replace flag, existing entries
04c8ce9c 129 that conflict with the entry being added are
2cf565c5
DG
130 automatically removed with warning messages.
131
1f7f99de
JH
132--stdin::
133 Instead of taking list of paths from the command line,
134 read list of paths from the standard input. Paths are
135 separated by LF (i.e. one path per line) by default.
136
14470c0d
CS
137--verbose::
138 Report what is being added and removed from index.
139
1f7f99de
JH
140-z::
141 Only meaningful with `--stdin`; paths are separated with
142 NUL character instead of LF.
143
e994004f 144\--::
2cf565c5
DG
145 Do not interpret any more arguments as options.
146
147<file>::
148 Files to act on.
5773c9f2 149 Note that files beginning with '.' are discarded. This includes
a6080a0a 150 `./file` and `dir/./file`. If you don't want this, then use
2cf565c5
DG
151 cleaner names.
152 The same applies to directories ending '/' and paths with '//'
153
154Using --refresh
155---------------
5f3aa197 156'--refresh' does not calculate a new sha1 file or bring the index
2cf565c5 157up-to-date for mode/content changes. But what it *does* do is to
5f3aa197
LS
158"re-match" the stat information of a file with the index, so that you
159can refresh the index for a file that hasn't been changed but where
2cf565c5
DG
160the stat entry is out of date.
161
ba020ef5 162For example, you'd want to do this after doing a 'git-read-tree', to link
5f3aa197 163up the stat index details with the proper files.
2cf565c5 164
df6e1516
BL
165Using --cacheinfo or --info-only
166--------------------------------
167'--cacheinfo' is used to register a file that is not in the
168current working directory. This is useful for minimum-checkout
169merging.
170
df8baa42 171To pretend you have a file with mode and sha1 at path, say:
2cf565c5 172
61f693bd 173----------------
b1889c36 174$ git update-index --cacheinfo mode sha1 path
61f693bd 175----------------
2cf565c5 176
df6e1516
BL
177'--info-only' is used to register files without placing them in the object
178database. This is useful for status-only repositories.
2cf565c5 179
df6e1516
BL
180Both '--cacheinfo' and '--info-only' behave similarly: the index is updated
181but the object database isn't. '--cacheinfo' is useful when the object is
182in the database but the file isn't available locally. '--info-only' is
183useful when the file is available, but you do not wish to update the
184object database.
185
d23748a6
JH
186
187Using --index-info
188------------------
189
190`--index-info` is a more powerful mechanism that lets you feed
191multiple entry definitions from the standard input, and designed
192specifically for scripts. It can take inputs of three formats:
193
194 . mode SP sha1 TAB path
195+
196The first format is what "git-apply --index-info"
197reports, and used to reconstruct a partial tree
198that is used for phony merge base tree when falling
199back on 3-way merge.
200
201 . mode SP type SP sha1 TAB path
202+
ba020ef5 203The second format is to stuff 'git-ls-tree' output
d23748a6
JH
204into the index file.
205
206 . mode SP sha1 SP stage TAB path
207+
208This format is to put higher order stages into the
ba020ef5 209index file and matches 'git-ls-files --stage' output.
d23748a6
JH
210
211To place a higher stage entry to the index, the path should
212first be removed by feeding a mode=0 entry for the path, and
213then feeding necessary input lines in the third format.
214
215For example, starting with this index:
216
217------------
218$ git ls-files -s
219100644 8a1218a1024a212bb3db30becd860315f9f3ac52 0 frotz
220------------
221
222you can feed the following input to `--index-info`:
223
224------------
225$ git update-index --index-info
2260 0000000000000000000000000000000000000000 frotz
227100644 8a1218a1024a212bb3db30becd860315f9f3ac52 1 frotz
228100755 8a1218a1024a212bb3db30becd860315f9f3ac52 2 frotz
229------------
230
231The first line of the input feeds 0 as the mode to remove the
232path; the SHA1 does not matter as long as it is well formatted.
233Then the second and third line feeds stage 1 and stage 2 entries
234for that path. After the above, we would end up with this:
235
236------------
237$ git ls-files -s
238100644 8a1218a1024a212bb3db30becd860315f9f3ac52 1 frotz
239100755 8a1218a1024a212bb3db30becd860315f9f3ac52 2 frotz
240------------
241
242
bae777db
JF
243Using ``assume unchanged'' bit
244------------------------------
f9666adf
JH
245
246Many operations in git depend on your filesystem to have an
247efficient `lstat(2)` implementation, so that `st_mtime`
248information for working tree files can be cheaply checked to see
249if the file contents have changed from the version recorded in
250the index file. Unfortunately, some filesystems have
251inefficient `lstat(2)`. If your filesystem is one of them, you
252can set "assume unchanged" bit to paths you have not changed to
253cause git not to do this check. Note that setting this bit on a
254path does not mean git will check the contents of the file to
255see if it has changed -- it makes git to omit any checking and
256assume it has *not* changed. When you make changes to working
257tree files, you have to explicitly tell git about it by dropping
258"assume unchanged" bit, either before or after you modify them.
259
260In order to set "assume unchanged" bit, use `--assume-unchanged`
261option. To unset, use `--no-assume-unchanged`.
262
263The command looks at `core.ignorestat` configuration variable. When
b1889c36 264this is true, paths updated with `git update-index paths...` and
f9666adf 265paths updated with other git commands that update both index and
ba020ef5
JN
266working tree (e.g. 'git-apply --index', 'git-checkout-index -u',
267and 'git-read-tree -u') are automatically marked as "assume
f9666adf 268unchanged". Note that "assume unchanged" bit is *not* set if
b1889c36
JN
269`git update-index --refresh` finds the working tree file matches
270the index (use `git update-index --really-refresh` if you want
f9666adf
JH
271to mark them as "assume unchanged").
272
273
df6e1516
BL
274Examples
275--------
2cf565c5
DG
276To update and refresh only the files already checked out:
277
61f693bd 278----------------
b1889c36 279$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
61f693bd 280----------------
2cf565c5 281
48aeecdc
SE
282On an inefficient filesystem with `core.ignorestat` set::
283+
f9666adf 284------------
48aeecdc
SE
285$ git update-index --really-refresh <1>
286$ git update-index --no-assume-unchanged foo.c <2>
287$ git diff --name-only <3>
f9666adf 288$ edit foo.c
48aeecdc 289$ git diff --name-only <4>
f9666adf 290M foo.c
48aeecdc
SE
291$ git update-index foo.c <5>
292$ git diff --name-only <6>
f9666adf 293$ edit foo.c
48aeecdc
SE
294$ git diff --name-only <7>
295$ git update-index --no-assume-unchanged foo.c <8>
296$ git diff --name-only <9>
f9666adf 297M foo.c
48aeecdc
SE
298------------
299+
300<1> forces lstat(2) to set "assume unchanged" bits for paths that match index.
f9666adf
JH
301<2> mark the path to be edited.
302<3> this does lstat(2) and finds index matches the path.
48aeecdc 303<4> this does lstat(2) and finds index does *not* match the path.
f9666adf
JH
304<5> registering the new version to index sets "assume unchanged" bit.
305<6> and it is assumed unchanged.
306<7> even after you edit it.
307<8> you can tell about the change after the fact.
308<9> now it checks with lstat(2) and finds it has been changed.
f9666adf 309
2cf565c5 310
5773c9f2
JH
311Configuration
312-------------
313
314The command honors `core.filemode` configuration variable. If
466d1f15 315your repository is on a filesystem whose executable bits are
5162e697 316unreliable, this should be set to 'false' (see linkgit:git-config[1]).
61f693bd
JL
317This causes the command to ignore differences in file modes recorded
318in the index and the file mode on the filesystem if they differ only on
5773c9f2 319executable bit. On such an unfortunate filesystem, you may
ba020ef5 320need to use 'git-update-index --chmod='.
5773c9f2 321
78a8d641 322Quite similarly, if `core.symlinks` configuration variable is set
5162e697 323to 'false' (see linkgit:git-config[1]), symbolic links are checked out
78a8d641
JS
324as plain files, and this command does not modify a recorded file mode
325from symbolic link to regular file.
326
f9666adf
JH
327The command looks at `core.ignorestat` configuration variable. See
328'Using "assume unchanged" bit' section above.
329
1ce4790b
AR
330The command also looks at `core.trustctime` configuration variable.
331It can be useful when the inode change time is regularly modified by
332something outside Git (file system crawlers and backup systems use
333ctime for marking files processed) (see linkgit:git-config[1]).
334
61f693bd 335
56ae8df5 336SEE ALSO
61f693bd 337--------
5162e697
DM
338linkgit:git-config[1],
339linkgit:git-add[1]
61f693bd
JL
340
341
2cf565c5
DG
342Author
343------
344Written by Linus Torvalds <torvalds@osdl.org>
345
346Documentation
347--------------
348Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
349
350GIT
351---
9e1f0a85 352Part of the linkgit:git[1] suite