]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-update-index.txt
Documentation: prepare to be consistent about "git-" versus "git "
[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]
215a7ad1 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
215a7ad1 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
CS
55 default behavior is to error out. This option makes
56 git-update-index continue anyway.
57
5fdeacb0
JS
58--ignore-submodules:
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
a6080a0a 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::
f9666adf
JH
81 When these flags are specified, the object name recorded
82 for the paths are not updated. Instead, these options
83 sets and unsets the "assume unchanged" bit for the
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).
91
3240240f
SB
92-g::
93--again::
83e77a25
JH
94 Runs `git-update-index` itself on the paths whose index
95 entries are different from those from the `HEAD` commit.
96
060729dd
MK
97--unresolve::
98 Restores the 'unmerged' or 'needs updating' state of a
99 file during a merge if it was cleared by accident.
100
df6e1516
BL
101--info-only::
102 Do not create objects in the object database for all
103 <file> arguments that follow this flag; just insert
5f3aa197 104 their object IDs into the index.
df6e1516 105
2cf565c5
DG
106--force-remove::
107 Remove the file from the index even when the working directory
9b63f501 108 still has such a file. (Implies --remove.)
2cf565c5
DG
109
110--replace::
111 By default, when a file `path` exists in the index,
215a7ad1 112 git-update-index refuses an attempt to add `path/file`.
2cf565c5
DG
113 Similarly if a file `path/file` exists, a file `path`
114 cannot be added. With --replace flag, existing entries
115 that conflicts with the entry being added are
116 automatically removed with warning messages.
117
1f7f99de
JH
118--stdin::
119 Instead of taking list of paths from the command line,
120 read list of paths from the standard input. Paths are
121 separated by LF (i.e. one path per line) by default.
122
14470c0d
CS
123--verbose::
124 Report what is being added and removed from index.
125
1f7f99de
JH
126-z::
127 Only meaningful with `--stdin`; paths are separated with
128 NUL character instead of LF.
129
e994004f 130\--::
2cf565c5
DG
131 Do not interpret any more arguments as options.
132
133<file>::
134 Files to act on.
5773c9f2 135 Note that files beginning with '.' are discarded. This includes
a6080a0a 136 `./file` and `dir/./file`. If you don't want this, then use
2cf565c5
DG
137 cleaner names.
138 The same applies to directories ending '/' and paths with '//'
139
140Using --refresh
141---------------
5f3aa197 142'--refresh' does not calculate a new sha1 file or bring the index
2cf565c5 143up-to-date for mode/content changes. But what it *does* do is to
5f3aa197
LS
144"re-match" the stat information of a file with the index, so that you
145can refresh the index for a file that hasn't been changed but where
2cf565c5
DG
146the stat entry is out of date.
147
148For example, you'd want to do this after doing a "git-read-tree", to link
5f3aa197 149up the stat index details with the proper files.
2cf565c5 150
df6e1516
BL
151Using --cacheinfo or --info-only
152--------------------------------
153'--cacheinfo' is used to register a file that is not in the
154current working directory. This is useful for minimum-checkout
155merging.
156
df8baa42 157To pretend you have a file with mode and sha1 at path, say:
2cf565c5 158
61f693bd
JL
159----------------
160$ git-update-index --cacheinfo mode sha1 path
161----------------
2cf565c5 162
df6e1516
BL
163'--info-only' is used to register files without placing them in the object
164database. This is useful for status-only repositories.
2cf565c5 165
df6e1516
BL
166Both '--cacheinfo' and '--info-only' behave similarly: the index is updated
167but the object database isn't. '--cacheinfo' is useful when the object is
168in the database but the file isn't available locally. '--info-only' is
169useful when the file is available, but you do not wish to update the
170object database.
171
d23748a6
JH
172
173Using --index-info
174------------------
175
176`--index-info` is a more powerful mechanism that lets you feed
177multiple entry definitions from the standard input, and designed
178specifically for scripts. It can take inputs of three formats:
179
180 . mode SP sha1 TAB path
181+
182The first format is what "git-apply --index-info"
183reports, and used to reconstruct a partial tree
184that is used for phony merge base tree when falling
185back on 3-way merge.
186
187 . mode SP type SP sha1 TAB path
188+
189The second format is to stuff git-ls-tree output
190into the index file.
191
192 . mode SP sha1 SP stage TAB path
193+
194This format is to put higher order stages into the
195index file and matches git-ls-files --stage output.
196
197To place a higher stage entry to the index, the path should
198first be removed by feeding a mode=0 entry for the path, and
199then feeding necessary input lines in the third format.
200
201For example, starting with this index:
202
203------------
204$ git ls-files -s
205100644 8a1218a1024a212bb3db30becd860315f9f3ac52 0 frotz
206------------
207
208you can feed the following input to `--index-info`:
209
210------------
211$ git update-index --index-info
2120 0000000000000000000000000000000000000000 frotz
213100644 8a1218a1024a212bb3db30becd860315f9f3ac52 1 frotz
214100755 8a1218a1024a212bb3db30becd860315f9f3ac52 2 frotz
215------------
216
217The first line of the input feeds 0 as the mode to remove the
218path; the SHA1 does not matter as long as it is well formatted.
219Then the second and third line feeds stage 1 and stage 2 entries
220for that path. After the above, we would end up with this:
221
222------------
223$ git ls-files -s
224100644 8a1218a1024a212bb3db30becd860315f9f3ac52 1 frotz
225100755 8a1218a1024a212bb3db30becd860315f9f3ac52 2 frotz
226------------
227
228
bae777db
JF
229Using ``assume unchanged'' bit
230------------------------------
f9666adf
JH
231
232Many operations in git depend on your filesystem to have an
233efficient `lstat(2)` implementation, so that `st_mtime`
234information for working tree files can be cheaply checked to see
235if the file contents have changed from the version recorded in
236the index file. Unfortunately, some filesystems have
237inefficient `lstat(2)`. If your filesystem is one of them, you
238can set "assume unchanged" bit to paths you have not changed to
239cause git not to do this check. Note that setting this bit on a
240path does not mean git will check the contents of the file to
241see if it has changed -- it makes git to omit any checking and
242assume it has *not* changed. When you make changes to working
243tree files, you have to explicitly tell git about it by dropping
244"assume unchanged" bit, either before or after you modify them.
245
246In order to set "assume unchanged" bit, use `--assume-unchanged`
247option. To unset, use `--no-assume-unchanged`.
248
249The command looks at `core.ignorestat` configuration variable. When
250this is true, paths updated with `git-update-index paths...` and
251paths updated with other git commands that update both index and
252working tree (e.g. `git-apply --index`, `git-checkout-index -u`,
253and `git-read-tree -u`) are automatically marked as "assume
254unchanged". Note that "assume unchanged" bit is *not* set if
255`git-update-index --refresh` finds the working tree file matches
256the index (use `git-update-index --really-refresh` if you want
257to mark them as "assume unchanged").
258
259
df6e1516
BL
260Examples
261--------
2cf565c5
DG
262To update and refresh only the files already checked out:
263
61f693bd
JL
264----------------
265$ git-checkout-index -n -f -a && git-update-index --ignore-missing --refresh
266----------------
2cf565c5 267
48aeecdc
SE
268On an inefficient filesystem with `core.ignorestat` set::
269+
f9666adf 270------------
48aeecdc
SE
271$ git update-index --really-refresh <1>
272$ git update-index --no-assume-unchanged foo.c <2>
273$ git diff --name-only <3>
f9666adf 274$ edit foo.c
48aeecdc 275$ git diff --name-only <4>
f9666adf 276M foo.c
48aeecdc
SE
277$ git update-index foo.c <5>
278$ git diff --name-only <6>
f9666adf 279$ edit foo.c
48aeecdc
SE
280$ git diff --name-only <7>
281$ git update-index --no-assume-unchanged foo.c <8>
282$ git diff --name-only <9>
f9666adf 283M foo.c
48aeecdc
SE
284------------
285+
286<1> forces lstat(2) to set "assume unchanged" bits for paths that match index.
f9666adf
JH
287<2> mark the path to be edited.
288<3> this does lstat(2) and finds index matches the path.
48aeecdc 289<4> this does lstat(2) and finds index does *not* match the path.
f9666adf
JH
290<5> registering the new version to index sets "assume unchanged" bit.
291<6> and it is assumed unchanged.
292<7> even after you edit it.
293<8> you can tell about the change after the fact.
294<9> now it checks with lstat(2) and finds it has been changed.
f9666adf 295
2cf565c5 296
5773c9f2
JH
297Configuration
298-------------
299
300The command honors `core.filemode` configuration variable. If
301your repository is on an filesystem whose executable bits are
5162e697 302unreliable, this should be set to 'false' (see linkgit:git-config[1]).
61f693bd
JL
303This causes the command to ignore differences in file modes recorded
304in the index and the file mode on the filesystem if they differ only on
5773c9f2
JH
305executable bit. On such an unfortunate filesystem, you may
306need to use `git-update-index --chmod=`.
307
78a8d641 308Quite similarly, if `core.symlinks` configuration variable is set
5162e697 309to 'false' (see linkgit:git-config[1]), symbolic links are checked out
78a8d641
JS
310as plain files, and this command does not modify a recorded file mode
311from symbolic link to regular file.
312
f9666adf
JH
313The command looks at `core.ignorestat` configuration variable. See
314'Using "assume unchanged" bit' section above.
315
61f693bd 316
56ae8df5 317SEE ALSO
61f693bd 318--------
5162e697
DM
319linkgit:git-config[1],
320linkgit:git-add[1]
61f693bd
JL
321
322
2cf565c5
DG
323Author
324------
325Written by Linus Torvalds <torvalds@osdl.org>
326
327Documentation
328--------------
329Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
330
331GIT
332---
9e1f0a85 333Part of the linkgit:git[1] suite