2005-09-08 02:26:23 +02:00
|
|
|
git-update-index(1)
|
2005-05-10 23:32:30 +02:00
|
|
|
===================
|
|
|
|
|
|
|
|
NAME
|
|
|
|
----
|
2007-01-19 00:53:37 +01:00
|
|
|
git-update-index - Register file contents in the working tree to the index
|
2005-05-10 23:32:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
--------
|
2006-02-12 10:48:47 +01:00
|
|
|
[verse]
|
2008-06-30 08:09:04 +02:00
|
|
|
'git update-index'
|
2006-05-03 12:51:40 +02:00
|
|
|
[--add] [--remove | --force-remove] [--replace]
|
|
|
|
[--refresh] [-q] [--unmerged] [--ignore-missing]
|
2014-03-24 00:57:28 +01:00
|
|
|
[(--cacheinfo <mode>,<object>,<file>)...]
|
2005-10-29 23:32:56 +02:00
|
|
|
[--chmod=(+|-)x]
|
2013-05-09 03:16:55 +02:00
|
|
|
[--[no-]assume-unchanged]
|
|
|
|
[--[no-]skip-worktree]
|
2019-10-30 11:49:37 +01:00
|
|
|
[--[no-]ignore-skip-worktree-entries]
|
2017-09-22 18:35:41 +02:00
|
|
|
[--[no-]fsmonitor-valid]
|
2008-05-14 19:03:45 +02:00
|
|
|
[--ignore-submodules]
|
2015-11-25 10:30:02 +01:00
|
|
|
[--[no-]split-index]
|
2016-01-24 16:28:16 +01:00
|
|
|
[--[no-|test-|force-]untracked-cache]
|
2017-09-22 18:35:41 +02:00
|
|
|
[--[no-]fsmonitor]
|
2006-08-24 06:24:47 +02:00
|
|
|
[--really-refresh] [--unresolve] [--again | -g]
|
2005-10-29 23:46:41 +02:00
|
|
|
[--info-only] [--index-info]
|
2012-04-04 18:37:02 +02:00
|
|
|
[-z] [--stdin] [--index-version <n>]
|
2005-10-29 23:46:41 +02:00
|
|
|
[--verbose]
|
2010-10-08 19:31:17 +02:00
|
|
|
[--] [<file>...]
|
2005-05-10 23:32:30 +02:00
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
-----------
|
2021-01-08 17:54:56 +01:00
|
|
|
Modifies the index. Each file mentioned is updated into the index and
|
|
|
|
any 'unmerged' or 'needs updating' state is cleared.
|
2005-05-10 23:32:30 +02:00
|
|
|
|
2007-12-29 07:20:38 +01:00
|
|
|
See also linkgit:git-add[1] for a more user-friendly way to do some of
|
2007-05-06 23:11:56 +02:00
|
|
|
the most common operations on the index.
|
|
|
|
|
2010-01-10 00:33:00 +01:00
|
|
|
The way 'git update-index' handles files it is told about can be modified
|
2005-05-10 23:32:30 +02:00
|
|
|
using the various options:
|
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
-------
|
|
|
|
--add::
|
2005-11-11 02:12:27 +01:00
|
|
|
If a specified file isn't in the index already then it's
|
2005-05-10 23:32:30 +02:00
|
|
|
added.
|
|
|
|
Default behaviour is to ignore new files.
|
|
|
|
|
|
|
|
--remove::
|
2005-11-11 02:12:27 +01:00
|
|
|
If a specified file is in the index but is missing then it's
|
2005-05-10 23:32:30 +02:00
|
|
|
removed.
|
2006-06-03 22:27:26 +02:00
|
|
|
Default behavior is to ignore removed file.
|
2005-05-10 23:32:30 +02:00
|
|
|
|
|
|
|
--refresh::
|
2005-11-11 02:12:27 +01:00
|
|
|
Looks at the current index and checks to see if merges or
|
2005-05-10 23:32:30 +02:00
|
|
|
updates are needed by checking stat() information.
|
|
|
|
|
2005-10-29 23:46:41 +02:00
|
|
|
-q::
|
2005-11-11 02:12:27 +01:00
|
|
|
Quiet. If --refresh finds that the index needs an update, the
|
2005-10-29 23:46:41 +02:00
|
|
|
default behavior is to error out. This option makes
|
2010-01-10 00:33:00 +01:00
|
|
|
'git update-index' continue anyway.
|
2005-10-29 23:46:41 +02:00
|
|
|
|
2008-12-19 13:14:18 +01:00
|
|
|
--ignore-submodules::
|
2008-05-14 19:03:45 +02:00
|
|
|
Do not try to update submodules. This option is only respected
|
|
|
|
when passed before --refresh.
|
|
|
|
|
2005-10-29 23:46:41 +02:00
|
|
|
--unmerged::
|
2005-11-11 02:12:27 +01:00
|
|
|
If --refresh finds unmerged changes in the index, the default
|
2010-01-10 00:33:00 +01:00
|
|
|
behavior is to error out. This option makes 'git update-index'
|
2005-10-29 23:46:41 +02:00
|
|
|
continue anyway.
|
|
|
|
|
2005-05-10 23:32:30 +02:00
|
|
|
--ignore-missing::
|
|
|
|
Ignores missing files during a --refresh
|
|
|
|
|
2014-03-24 00:57:28 +01:00
|
|
|
--cacheinfo <mode>,<object>,<path>::
|
2005-05-10 23:32:30 +02:00
|
|
|
--cacheinfo <mode> <object> <path>::
|
2014-03-24 00:57:28 +01:00
|
|
|
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.
|
2007-06-07 09:04:01 +02:00
|
|
|
|
2005-10-29 23:46:41 +02:00
|
|
|
--index-info::
|
2005-11-15 00:20:01 +01:00
|
|
|
Read index information from stdin.
|
2005-10-29 23:46:41 +02:00
|
|
|
|
|
|
|
--chmod=(+|-)x::
|
2007-06-07 09:04:01 +02:00
|
|
|
Set the execute permissions on the updated files.
|
2005-10-29 23:46:41 +02:00
|
|
|
|
2013-05-09 03:16:55 +02:00
|
|
|
--[no-]assume-unchanged::
|
doc: make clear --assume-unchanged's user contract
Many users misunderstand the --assume-unchanged contract, believing
it means Git won't look at the flagged file.
Be explicit that the --assume-unchanged contract is by the user that
they will NOT change the file so that Git does not need to look (and
expend, for example, lstat(2) cycles)
Mentioning "Git stops checking" does not help the reader, as it is
only one possible consequence of what that assumption allows Git to
do, but
(1) there are things other than "stop checking" that Git can do
based on that assumption; and
(2) Git is not obliged to stop checking; it merely is allowed to.
Also, this is a single flag bit, correct the plural to singular, and
the verb, accordingly.
Drop the stale and incorrect information about "poor-man's ignore",
which is not what this flag bit is about at all.
Signed-off-by: Philip Oakley <philipoakley@iee.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2014-12-06 16:04:30 +01:00
|
|
|
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
|
2006-02-12 10:48:47 +01:00
|
|
|
sometimes helpful when working with a big project on a
|
|
|
|
filesystem that has very slow lstat(2) system call
|
|
|
|
(e.g. cifs).
|
2008-07-18 16:11:07 +02:00
|
|
|
+
|
|
|
|
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.
|
2006-02-12 10:48:47 +01:00
|
|
|
|
2009-11-10 19:11:51 +01:00
|
|
|
--really-refresh::
|
2016-06-28 13:40:11 +02:00
|
|
|
Like `--refresh`, but checks stat information unconditionally,
|
2009-11-10 19:11:51 +01:00
|
|
|
without regard to the "assume unchanged" setting.
|
|
|
|
|
2013-05-09 03:16:55 +02:00
|
|
|
--[no-]skip-worktree::
|
2009-08-20 15:46:57 +02:00
|
|
|
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.
|
|
|
|
|
2019-10-30 11:49:37 +01:00
|
|
|
|
|
|
|
--[no-]ignore-skip-worktree-entries::
|
|
|
|
Do not remove skip-worktree (AKA "index-only") entries even when
|
|
|
|
the `--remove` option was specified.
|
|
|
|
|
2017-09-22 18:35:41 +02:00
|
|
|
--[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.
|
|
|
|
|
2008-06-08 03:36:09 +02:00
|
|
|
-g::
|
|
|
|
--again::
|
2010-01-10 00:33:00 +01:00
|
|
|
Runs 'git update-index' itself on the paths whose index
|
2006-05-06 02:40:47 +02:00
|
|
|
entries are different from those from the `HEAD` commit.
|
|
|
|
|
2006-05-03 12:53:19 +02:00
|
|
|
--unresolve::
|
|
|
|
Restores the 'unmerged' or 'needs updating' state of a
|
|
|
|
file during a merge if it was cleared by accident.
|
|
|
|
|
2005-07-09 01:52:12 +02:00
|
|
|
--info-only::
|
|
|
|
Do not create objects in the object database for all
|
|
|
|
<file> arguments that follow this flag; just insert
|
2005-11-11 02:12:27 +01:00
|
|
|
their object IDs into the index.
|
2005-07-09 01:52:12 +02:00
|
|
|
|
2005-05-10 23:32:30 +02:00
|
|
|
--force-remove::
|
|
|
|
Remove the file from the index even when the working directory
|
2005-05-31 18:52:43 +02:00
|
|
|
still has such a file. (Implies --remove.)
|
2005-05-10 23:32:30 +02:00
|
|
|
|
|
|
|
--replace::
|
|
|
|
By default, when a file `path` exists in the index,
|
2010-01-10 00:33:00 +01:00
|
|
|
'git update-index' refuses an attempt to add `path/file`.
|
2005-05-10 23:32:30 +02:00
|
|
|
Similarly if a file `path/file` exists, a file `path`
|
|
|
|
cannot be added. With --replace flag, existing entries
|
2008-12-19 13:14:18 +01:00
|
|
|
that conflict with the entry being added are
|
2005-05-10 23:32:30 +02:00
|
|
|
automatically removed with warning messages.
|
|
|
|
|
2005-09-27 03:13:32 +02:00
|
|
|
--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.
|
|
|
|
|
2005-10-29 23:46:41 +02:00
|
|
|
--verbose::
|
|
|
|
Report what is being added and removed from index.
|
|
|
|
|
2012-04-04 18:37:02 +02:00
|
|
|
--index-version <n>::
|
|
|
|
Write the resulting index out in the named on-disk format version.
|
2013-02-23 03:29:31 +01:00
|
|
|
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
|
2017-09-13 00:58:39 +02:00
|
|
|
time. Version 4 is relatively young (first released in 1.8.0 in
|
2013-02-23 03:29:31 +01:00
|
|
|
October 2012). Other Git implementations such as JGit and libgit2
|
|
|
|
may not support it yet.
|
2012-04-04 18:37:02 +02:00
|
|
|
|
2005-09-27 03:13:32 +02:00
|
|
|
-z::
|
2010-10-08 08:50:20 +02:00
|
|
|
Only meaningful with `--stdin` or `--index-info`; paths are
|
|
|
|
separated with NUL character instead of LF.
|
2005-09-27 03:13:32 +02:00
|
|
|
|
2014-06-13 14:19:44 +02:00
|
|
|
--split-index::
|
|
|
|
--no-split-index::
|
2017-03-06 10:42:03 +01:00
|
|
|
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.
|
2017-02-27 19:00:06 +01:00
|
|
|
+
|
|
|
|
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.
|
2014-06-13 14:19:44 +02:00
|
|
|
|
2015-03-08 11:12:42 +01:00
|
|
|
--untracked-cache::
|
|
|
|
--no-untracked-cache::
|
config: add core.untrackedCache
When we know that mtime on directory as given by the environment
is usable for the purpose of untracked cache, we may want the
untracked cache to be always used without any mtime test or
kernel name check being performed.
Also when we know that mtime is not usable for the purpose of
untracked cache, for example because the repo is shared over a
network file system, we may want the untracked-cache to be
automatically removed from the index.
Allow the user to express such preference by setting the
'core.untrackedCache' configuration variable, which can take
'keep', 'false', or 'true' and default to 'keep'.
When read_index_from() is called, it now adds or removes the
untracked cache in the index to respect the value of this
variable. So it does nothing if the value is `keep` or if the
variable is unset; it adds the untracked cache if the value is
`true`; and it removes the cache if the value is `false`.
`git update-index --[no-|force-]untracked-cache` still adds the
untracked cache to, or removes it, from the index, but this
shows a warning if it goes against the value of
core.untrackedCache, because the next time the index is read
the untracked cache will be added or removed if the
configuration is set to do so.
Also `--untracked-cache` used to check that the underlying
operating system and file system change `st_mtime` field of a
directory if files are added or deleted in that directory. But
because those tests take a long time, `--untracked-cache` no
longer performs them. Instead, there is now
`--test-untracked-cache` to perform the tests. This change
makes `--untracked-cache` the same as `--force-untracked-cache`.
This last change is backward incompatible and should be
mentioned in the release notes.
Helped-by: Duy Nguyen <pclouds@gmail.com>
Helped-by: Torsten Bögershausen <tboegi@web.de>
Helped-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
read-cache: Duy'sfixup
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-27 07:58:05 +01:00
|
|
|
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.
|
2015-03-08 11:12:42 +01:00
|
|
|
|
2016-01-24 16:28:16 +01:00
|
|
|
--test-untracked-cache::
|
|
|
|
Only perform tests on the working directory to make sure
|
|
|
|
untracked cache can be used. You have to manually enable
|
config: add core.untrackedCache
When we know that mtime on directory as given by the environment
is usable for the purpose of untracked cache, we may want the
untracked cache to be always used without any mtime test or
kernel name check being performed.
Also when we know that mtime is not usable for the purpose of
untracked cache, for example because the repo is shared over a
network file system, we may want the untracked-cache to be
automatically removed from the index.
Allow the user to express such preference by setting the
'core.untrackedCache' configuration variable, which can take
'keep', 'false', or 'true' and default to 'keep'.
When read_index_from() is called, it now adds or removes the
untracked cache in the index to respect the value of this
variable. So it does nothing if the value is `keep` or if the
variable is unset; it adds the untracked cache if the value is
`true`; and it removes the cache if the value is `false`.
`git update-index --[no-|force-]untracked-cache` still adds the
untracked cache to, or removes it, from the index, but this
shows a warning if it goes against the value of
core.untrackedCache, because the next time the index is read
the untracked cache will be added or removed if the
configuration is set to do so.
Also `--untracked-cache` used to check that the underlying
operating system and file system change `st_mtime` field of a
directory if files are added or deleted in that directory. But
because those tests take a long time, `--untracked-cache` no
longer performs them. Instead, there is now
`--test-untracked-cache` to perform the tests. This change
makes `--untracked-cache` the same as `--force-untracked-cache`.
This last change is backward incompatible and should be
mentioned in the release notes.
Helped-by: Duy Nguyen <pclouds@gmail.com>
Helped-by: Torsten Bögershausen <tboegi@web.de>
Helped-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
read-cache: Duy'sfixup
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-27 07:58:05 +01:00
|
|
|
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.
|
2016-01-24 16:28:16 +01:00
|
|
|
|
2015-03-08 11:12:43 +01:00
|
|
|
--force-untracked-cache::
|
config: add core.untrackedCache
When we know that mtime on directory as given by the environment
is usable for the purpose of untracked cache, we may want the
untracked cache to be always used without any mtime test or
kernel name check being performed.
Also when we know that mtime is not usable for the purpose of
untracked cache, for example because the repo is shared over a
network file system, we may want the untracked-cache to be
automatically removed from the index.
Allow the user to express such preference by setting the
'core.untrackedCache' configuration variable, which can take
'keep', 'false', or 'true' and default to 'keep'.
When read_index_from() is called, it now adds or removes the
untracked cache in the index to respect the value of this
variable. So it does nothing if the value is `keep` or if the
variable is unset; it adds the untracked cache if the value is
`true`; and it removes the cache if the value is `false`.
`git update-index --[no-|force-]untracked-cache` still adds the
untracked cache to, or removes it, from the index, but this
shows a warning if it goes against the value of
core.untrackedCache, because the next time the index is read
the untracked cache will be added or removed if the
configuration is set to do so.
Also `--untracked-cache` used to check that the underlying
operating system and file system change `st_mtime` field of a
directory if files are added or deleted in that directory. But
because those tests take a long time, `--untracked-cache` no
longer performs them. Instead, there is now
`--test-untracked-cache` to perform the tests. This change
makes `--untracked-cache` the same as `--force-untracked-cache`.
This last change is backward incompatible and should be
mentioned in the release notes.
Helped-by: Duy Nguyen <pclouds@gmail.com>
Helped-by: Torsten Bögershausen <tboegi@web.de>
Helped-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
read-cache: Duy'sfixup
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-27 07:58:05 +01:00
|
|
|
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.
|
2015-03-08 11:12:43 +01:00
|
|
|
|
2017-09-22 18:35:41 +02:00
|
|
|
--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.
|
|
|
|
|
2006-05-05 21:05:24 +02:00
|
|
|
\--::
|
2005-05-10 23:32:30 +02:00
|
|
|
Do not interpret any more arguments as options.
|
|
|
|
|
|
|
|
<file>::
|
|
|
|
Files to act on.
|
2005-10-29 23:32:56 +02:00
|
|
|
Note that files beginning with '.' are discarded. This includes
|
2007-06-07 09:04:01 +02:00
|
|
|
`./file` and `dir/./file`. If you don't want this, then use
|
2005-05-10 23:32:30 +02:00
|
|
|
cleaner names.
|
|
|
|
The same applies to directories ending '/' and paths with '//'
|
|
|
|
|
2018-04-30 17:35:33 +02:00
|
|
|
USING --REFRESH
|
2005-05-10 23:32:30 +02:00
|
|
|
---------------
|
2016-06-28 13:40:11 +02:00
|
|
|
`--refresh` does not calculate a new sha1 file or bring the index
|
2017-08-23 19:49:35 +02:00
|
|
|
up to date for mode/content changes. But what it *does* do is to
|
2005-11-11 02:12:27 +01:00
|
|
|
"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
|
2005-05-10 23:32:30 +02:00
|
|
|
the stat entry is out of date.
|
|
|
|
|
2010-01-10 00:33:00 +01:00
|
|
|
For example, you'd want to do this after doing a 'git read-tree', to link
|
2005-11-11 02:12:27 +01:00
|
|
|
up the stat index details with the proper files.
|
2005-05-10 23:32:30 +02:00
|
|
|
|
2018-04-30 17:35:33 +02:00
|
|
|
USING --CACHEINFO OR --INFO-ONLY
|
2005-07-09 01:52:12 +02:00
|
|
|
--------------------------------
|
2016-06-28 13:40:11 +02:00
|
|
|
`--cacheinfo` is used to register a file that is not in the
|
2005-07-09 01:52:12 +02:00
|
|
|
current working directory. This is useful for minimum-checkout
|
|
|
|
merging.
|
|
|
|
|
2018-08-08 22:28:07 +02:00
|
|
|
To pretend you have a file at path with mode and sha1, say:
|
2005-05-10 23:32:30 +02:00
|
|
|
|
2005-12-06 06:13:03 +01:00
|
|
|
----------------
|
2018-08-08 22:28:07 +02:00
|
|
|
$ git update-index --add --cacheinfo <mode>,<sha1>,<path>
|
2005-12-06 06:13:03 +01:00
|
|
|
----------------
|
2005-05-10 23:32:30 +02:00
|
|
|
|
2016-06-28 13:40:11 +02:00
|
|
|
`--info-only` is used to register files without placing them in the object
|
2005-07-09 01:52:12 +02:00
|
|
|
database. This is useful for status-only repositories.
|
2005-05-10 23:32:30 +02:00
|
|
|
|
2016-06-28 13:40:11 +02:00
|
|
|
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
|
2005-07-09 01:52:12 +02:00
|
|
|
useful when the file is available, but you do not wish to update the
|
|
|
|
object database.
|
|
|
|
|
2005-12-07 10:45:38 +01:00
|
|
|
|
2018-04-30 17:35:33 +02:00
|
|
|
USING --INDEX-INFO
|
2005-12-07 10:45:38 +01:00
|
|
|
------------------
|
|
|
|
|
|
|
|
`--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
|
|
|
|
+
|
2018-08-08 23:35:18 +02:00
|
|
|
This format is to stuff `git ls-tree` output into the index.
|
2005-12-07 10:45:38 +01:00
|
|
|
|
|
|
|
. mode SP sha1 SP stage TAB path
|
|
|
|
+
|
|
|
|
This format is to put higher order stages into the
|
2010-01-10 00:33:00 +01:00
|
|
|
index file and matches 'git ls-files --stage' output.
|
2005-12-07 10:45:38 +01:00
|
|
|
|
2018-08-08 23:35:18 +02:00
|
|
|
. 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`.
|
|
|
|
|
2005-12-07 10:45:38 +01:00
|
|
|
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
|
2013-04-15 19:49:04 +02:00
|
|
|
path; the SHA-1 does not matter as long as it is well formatted.
|
2005-12-07 10:45:38 +01:00
|
|
|
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
|
|
|
|
------------
|
|
|
|
|
|
|
|
|
2018-04-30 17:35:33 +02:00
|
|
|
USING ``ASSUME UNCHANGED'' BIT
|
2006-11-12 22:28:43 +01:00
|
|
|
------------------------------
|
2006-02-12 10:48:47 +01:00
|
|
|
|
2013-01-21 20:17:53 +01:00
|
|
|
Many operations in Git depend on your filesystem to have an
|
2006-02-12 10:48:47 +01:00
|
|
|
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
|
2013-01-21 20:17:53 +01:00
|
|
|
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
|
2006-02-12 10:48:47 +01:00
|
|
|
assume it has *not* changed. When you make changes to working
|
2013-01-21 20:17:53 +01:00
|
|
|
tree files, you have to explicitly tell Git about it by dropping
|
2006-02-12 10:48:47 +01:00
|
|
|
"assume unchanged" bit, either before or after you modify them.
|
|
|
|
|
|
|
|
In order to set "assume unchanged" bit, use `--assume-unchanged`
|
2011-09-21 08:21:50 +02:00
|
|
|
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]).
|
2006-02-12 10:48:47 +01:00
|
|
|
|
|
|
|
The command looks at `core.ignorestat` configuration variable. When
|
2008-06-30 08:09:04 +02:00
|
|
|
this is true, paths updated with `git update-index paths...` and
|
2013-01-21 20:17:53 +01:00
|
|
|
paths updated with other Git commands that update both index and
|
2010-01-10 00:33:00 +01:00
|
|
|
working tree (e.g. 'git apply --index', 'git checkout-index -u',
|
|
|
|
and 'git read-tree -u') are automatically marked as "assume
|
2006-02-12 10:48:47 +01:00
|
|
|
unchanged". Note that "assume unchanged" bit is *not* set if
|
2008-06-30 08:09:04 +02:00
|
|
|
`git update-index --refresh` finds the working tree file matches
|
|
|
|
the index (use `git update-index --really-refresh` if you want
|
2006-02-12 10:48:47 +01:00
|
|
|
to mark them as "assume unchanged").
|
|
|
|
|
Update documentation related to sparsity and the skip-worktree bit
Make several small updates, to address a few documentation issues
I spotted:
* sparse-checkout focused on "patterns" even though the inputs (and
outputs in the case of `list`) are directories in cone-mode
* The description section of the sparse-checkout documentation
was a bit sparse (no pun intended), and focused more on internal
mechanics rather than end user usage. This made sense in the
early days when the command was even more experimental, but let's
adjust a bit to try to make it more approachable to end users who
may want to consider using it. Keep the scary backward
compatibility warning, though; we're still hard at work trying to
fix up commands to behave reasonably in sparse checkouts.
* both read-tree and update-index tried to describe how to use the
skip-worktree bit, but both predated the sparse-checkout command.
The sparse-checkout command is a far easier mechanism to use and
for users trying to reduce the size of their working tree, we
should recommend users to look at it instead.
* The update-index documentation pointed out that assume-unchanged
and skip-worktree sounded similar but had different purposes.
However, it made no attempt to explain the differences, only to
point out that they were different. Explain the differences.
* The update-index documentation focused much more on (internal?)
implementation details than on end-user usage. Try to explain
its purpose better for users of update-index, rather than
fellow developers trying to work with the SKIP_WORKTREE bit.
* Clarify that when core.sparseCheckout=true, we treat a file's
presence in the working tree as being an override to the
SKIP_WORKTREE bit (i.e. in sparse checkouts when the file is
present we ignore the SKIP_WORKTREE bit).
Note that this commit, like many touching documentation, is best viewed
with the `--color-words` option to diff/log.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-01-14 16:59:42 +01:00
|
|
|
Sometimes users confuse the assume-unchanged bit with the
|
|
|
|
skip-worktree bit. See the final paragraph in the "Skip-worktree bit"
|
|
|
|
section below for an explanation of the differences.
|
|
|
|
|
2006-02-12 10:48:47 +01:00
|
|
|
|
2018-04-30 17:35:33 +02:00
|
|
|
EXAMPLES
|
2005-07-09 01:52:12 +02:00
|
|
|
--------
|
2005-05-10 23:32:30 +02:00
|
|
|
To update and refresh only the files already checked out:
|
|
|
|
|
2005-12-06 06:13:03 +01:00
|
|
|
----------------
|
2008-06-30 08:09:04 +02:00
|
|
|
$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
|
2005-12-06 06:13:03 +01:00
|
|
|
----------------
|
2005-05-10 23:32:30 +02:00
|
|
|
|
2006-04-28 15:15:05 +02:00
|
|
|
On an inefficient filesystem with `core.ignorestat` set::
|
|
|
|
+
|
2006-02-12 10:48:47 +01:00
|
|
|
------------
|
2006-04-28 15:15:05 +02:00
|
|
|
$ git update-index --really-refresh <1>
|
|
|
|
$ git update-index --no-assume-unchanged foo.c <2>
|
|
|
|
$ git diff --name-only <3>
|
2006-02-12 10:48:47 +01:00
|
|
|
$ edit foo.c
|
2006-04-28 15:15:05 +02:00
|
|
|
$ git diff --name-only <4>
|
2006-02-12 10:48:47 +01:00
|
|
|
M foo.c
|
2006-04-28 15:15:05 +02:00
|
|
|
$ git update-index foo.c <5>
|
|
|
|
$ git diff --name-only <6>
|
2006-02-12 10:48:47 +01:00
|
|
|
$ edit foo.c
|
2006-04-28 15:15:05 +02:00
|
|
|
$ git diff --name-only <7>
|
|
|
|
$ git update-index --no-assume-unchanged foo.c <8>
|
|
|
|
$ git diff --name-only <9>
|
2006-02-12 10:48:47 +01:00
|
|
|
M foo.c
|
2006-04-28 15:15:05 +02:00
|
|
|
------------
|
|
|
|
+
|
|
|
|
<1> forces lstat(2) to set "assume unchanged" bits for paths that match index.
|
2006-02-12 10:48:47 +01:00
|
|
|
<2> mark the path to be edited.
|
|
|
|
<3> this does lstat(2) and finds index matches the path.
|
2006-04-28 15:15:05 +02:00
|
|
|
<4> this does lstat(2) and finds index does *not* match the path.
|
2006-02-12 10:48:47 +01:00
|
|
|
<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.
|
|
|
|
|
2005-05-10 23:32:30 +02:00
|
|
|
|
2018-04-30 17:35:33 +02:00
|
|
|
SKIP-WORKTREE BIT
|
2009-08-20 15:46:57 +02:00
|
|
|
-----------------
|
|
|
|
|
Update documentation related to sparsity and the skip-worktree bit
Make several small updates, to address a few documentation issues
I spotted:
* sparse-checkout focused on "patterns" even though the inputs (and
outputs in the case of `list`) are directories in cone-mode
* The description section of the sparse-checkout documentation
was a bit sparse (no pun intended), and focused more on internal
mechanics rather than end user usage. This made sense in the
early days when the command was even more experimental, but let's
adjust a bit to try to make it more approachable to end users who
may want to consider using it. Keep the scary backward
compatibility warning, though; we're still hard at work trying to
fix up commands to behave reasonably in sparse checkouts.
* both read-tree and update-index tried to describe how to use the
skip-worktree bit, but both predated the sparse-checkout command.
The sparse-checkout command is a far easier mechanism to use and
for users trying to reduce the size of their working tree, we
should recommend users to look at it instead.
* The update-index documentation pointed out that assume-unchanged
and skip-worktree sounded similar but had different purposes.
However, it made no attempt to explain the differences, only to
point out that they were different. Explain the differences.
* The update-index documentation focused much more on (internal?)
implementation details than on end-user usage. Try to explain
its purpose better for users of update-index, rather than
fellow developers trying to work with the SKIP_WORKTREE bit.
* Clarify that when core.sparseCheckout=true, we treat a file's
presence in the working tree as being an override to the
SKIP_WORKTREE bit (i.e. in sparse checkouts when the file is
present we ignore the SKIP_WORKTREE bit).
Note that this commit, like many touching documentation, is best viewed
with the `--color-words` option to diff/log.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-01-14 16:59:42 +01:00
|
|
|
Skip-worktree bit can be defined in one (long) sentence: Tell git to
|
|
|
|
avoid writing the file to the working directory when reasonably
|
|
|
|
possible, and treat the file as unchanged when it is not
|
|
|
|
present in the working directory.
|
|
|
|
|
|
|
|
Note that not all git commands will pay attention to this bit, and
|
|
|
|
some only partially support it.
|
|
|
|
|
|
|
|
The update-index flags and the read-tree capabilities relating to the
|
|
|
|
skip-worktree bit predated the introduction of the
|
|
|
|
linkgit:git-sparse-checkout[1] command, which provides a much easier
|
|
|
|
way to configure and handle the skip-worktree bits. If you want to
|
|
|
|
reduce your working tree to only deal with a subset of the files in
|
|
|
|
the repository, we strongly encourage the use of
|
|
|
|
linkgit:git-sparse-checkout[1] in preference to the low-level
|
|
|
|
update-index and read-tree primitives.
|
|
|
|
|
|
|
|
The primary purpose of the skip-worktree bit is to enable sparse
|
|
|
|
checkouts, i.e. to have working directories with only a subset of
|
|
|
|
paths present. When the skip-worktree bit is set, Git commands (such
|
|
|
|
as `switch`, `pull`, `merge`) will avoid writing these files.
|
|
|
|
However, these commands will sometimes write these files anyway in
|
|
|
|
important cases such as conflicts during a merge or rebase. Git
|
|
|
|
commands will also avoid treating the lack of such files as an
|
2022-09-11 12:23:20 +02:00
|
|
|
intentional deletion; for example `git add -u` will not stage a
|
Update documentation related to sparsity and the skip-worktree bit
Make several small updates, to address a few documentation issues
I spotted:
* sparse-checkout focused on "patterns" even though the inputs (and
outputs in the case of `list`) are directories in cone-mode
* The description section of the sparse-checkout documentation
was a bit sparse (no pun intended), and focused more on internal
mechanics rather than end user usage. This made sense in the
early days when the command was even more experimental, but let's
adjust a bit to try to make it more approachable to end users who
may want to consider using it. Keep the scary backward
compatibility warning, though; we're still hard at work trying to
fix up commands to behave reasonably in sparse checkouts.
* both read-tree and update-index tried to describe how to use the
skip-worktree bit, but both predated the sparse-checkout command.
The sparse-checkout command is a far easier mechanism to use and
for users trying to reduce the size of their working tree, we
should recommend users to look at it instead.
* The update-index documentation pointed out that assume-unchanged
and skip-worktree sounded similar but had different purposes.
However, it made no attempt to explain the differences, only to
point out that they were different. Explain the differences.
* The update-index documentation focused much more on (internal?)
implementation details than on end-user usage. Try to explain
its purpose better for users of update-index, rather than
fellow developers trying to work with the SKIP_WORKTREE bit.
* Clarify that when core.sparseCheckout=true, we treat a file's
presence in the working tree as being an override to the
SKIP_WORKTREE bit (i.e. in sparse checkouts when the file is
present we ignore the SKIP_WORKTREE bit).
Note that this commit, like many touching documentation, is best viewed
with the `--color-words` option to diff/log.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-01-14 16:59:42 +01:00
|
|
|
deletion for these files and `git commit -a` will not make a commit
|
|
|
|
deleting them either.
|
2009-08-20 15:46:57 +02:00
|
|
|
|
|
|
|
Although this bit looks similar to assume-unchanged bit, its goal is
|
Update documentation related to sparsity and the skip-worktree bit
Make several small updates, to address a few documentation issues
I spotted:
* sparse-checkout focused on "patterns" even though the inputs (and
outputs in the case of `list`) are directories in cone-mode
* The description section of the sparse-checkout documentation
was a bit sparse (no pun intended), and focused more on internal
mechanics rather than end user usage. This made sense in the
early days when the command was even more experimental, but let's
adjust a bit to try to make it more approachable to end users who
may want to consider using it. Keep the scary backward
compatibility warning, though; we're still hard at work trying to
fix up commands to behave reasonably in sparse checkouts.
* both read-tree and update-index tried to describe how to use the
skip-worktree bit, but both predated the sparse-checkout command.
The sparse-checkout command is a far easier mechanism to use and
for users trying to reduce the size of their working tree, we
should recommend users to look at it instead.
* The update-index documentation pointed out that assume-unchanged
and skip-worktree sounded similar but had different purposes.
However, it made no attempt to explain the differences, only to
point out that they were different. Explain the differences.
* The update-index documentation focused much more on (internal?)
implementation details than on end-user usage. Try to explain
its purpose better for users of update-index, rather than
fellow developers trying to work with the SKIP_WORKTREE bit.
* Clarify that when core.sparseCheckout=true, we treat a file's
presence in the working tree as being an override to the
SKIP_WORKTREE bit (i.e. in sparse checkouts when the file is
present we ignore the SKIP_WORKTREE bit).
Note that this commit, like many touching documentation, is best viewed
with the `--color-words` option to diff/log.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-01-14 16:59:42 +01:00
|
|
|
different. The assume-unchanged bit is for leaving the file in the
|
|
|
|
working tree but having Git omit checking it for changes and presuming
|
|
|
|
that the file has not been changed (though if it can determine without
|
|
|
|
stat'ing the file that it has changed, it is free to record the
|
|
|
|
changes). skip-worktree tells Git to ignore the absence of the file,
|
|
|
|
avoid updating it when possible with commands that normally update
|
|
|
|
much of the working directory (e.g. `checkout`, `switch`, `pull`,
|
|
|
|
etc.), and not have its absence be recorded in commits. Note that in
|
|
|
|
sparse checkouts (setup by `git sparse-checkout` or by configuring
|
|
|
|
core.sparseCheckout to true), if a file is marked as skip-worktree in
|
|
|
|
the index but is found in the working tree, Git will clear the
|
|
|
|
skip-worktree bit for that file.
|
2009-08-20 15:46:57 +02:00
|
|
|
|
2018-04-30 17:35:33 +02:00
|
|
|
SPLIT INDEX
|
2017-03-06 10:42:03 +01:00
|
|
|
-----------
|
|
|
|
|
|
|
|
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
|
2019-11-05 18:07:20 +01:00
|
|
|
modification time is updated to the current time every time a new split
|
2017-03-06 10:42:03 +01:00
|
|
|
index based on the shared index file is either created or read from.
|
|
|
|
|
2018-04-30 17:35:33 +02:00
|
|
|
UNTRACKED CACHE
|
config: add core.untrackedCache
When we know that mtime on directory as given by the environment
is usable for the purpose of untracked cache, we may want the
untracked cache to be always used without any mtime test or
kernel name check being performed.
Also when we know that mtime is not usable for the purpose of
untracked cache, for example because the repo is shared over a
network file system, we may want the untracked-cache to be
automatically removed from the index.
Allow the user to express such preference by setting the
'core.untrackedCache' configuration variable, which can take
'keep', 'false', or 'true' and default to 'keep'.
When read_index_from() is called, it now adds or removes the
untracked cache in the index to respect the value of this
variable. So it does nothing if the value is `keep` or if the
variable is unset; it adds the untracked cache if the value is
`true`; and it removes the cache if the value is `false`.
`git update-index --[no-|force-]untracked-cache` still adds the
untracked cache to, or removes it, from the index, but this
shows a warning if it goes against the value of
core.untrackedCache, because the next time the index is read
the untracked cache will be added or removed if the
configuration is set to do so.
Also `--untracked-cache` used to check that the underlying
operating system and file system change `st_mtime` field of a
directory if files are added or deleted in that directory. But
because those tests take a long time, `--untracked-cache` no
longer performs them. Instead, there is now
`--test-untracked-cache` to perform the tests. This change
makes `--untracked-cache` the same as `--force-untracked-cache`.
This last change is backward incompatible and should be
mentioned in the release notes.
Helped-by: Duy Nguyen <pclouds@gmail.com>
Helped-by: Torsten Bögershausen <tboegi@web.de>
Helped-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
read-cache: Duy'sfixup
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-27 07:58:05 +01:00
|
|
|
---------------
|
|
|
|
|
|
|
|
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.
|
2009-08-20 15:46:57 +02:00
|
|
|
|
2018-02-09 22:04:30 +01:00
|
|
|
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.
|
|
|
|
|
2018-02-09 22:04:31 +01:00
|
|
|
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.
|
|
|
|
|
2018-04-30 17:35:33 +02:00
|
|
|
FILE SYSTEM MONITOR
|
2017-09-22 18:35:41 +02:00
|
|
|
-------------------
|
|
|
|
|
|
|
|
This feature is intended to speed up git operations for repos that have
|
|
|
|
large working directories.
|
|
|
|
|
2022-03-25 19:02:48 +01:00
|
|
|
It enables git to work together with a file system monitor (see
|
2022-04-06 20:41:22 +02:00
|
|
|
linkgit:git-fsmonitor{litdd}daemon[1]
|
2022-03-25 19:02:48 +01:00
|
|
|
and the
|
2017-09-22 18:35:41 +02:00
|
|
|
"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
|
2022-03-25 19:02:48 +01:00
|
|
|
linkgit:git-config[1]) than using the `--fsmonitor` option to `git
|
|
|
|
update-index` in each repository, especially if you want to do so
|
2017-09-22 18:35:41 +02:00
|
|
|
across all repositories you use, because you can set the configuration
|
2018-02-14 16:41:30 +01:00
|
|
|
variable in your `$HOME/.gitconfig` just once and have it affect all
|
|
|
|
repositories you touch.
|
2017-09-22 18:35:41 +02:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2018-04-30 17:35:33 +02:00
|
|
|
CONFIGURATION
|
2005-10-29 23:32:56 +02:00
|
|
|
-------------
|
|
|
|
|
|
|
|
The command honors `core.filemode` configuration variable. If
|
2009-11-10 19:11:51 +01:00
|
|
|
your repository is on a filesystem whose executable bits are
|
2007-12-29 07:20:38 +01:00
|
|
|
unreliable, this should be set to 'false' (see linkgit:git-config[1]).
|
2005-12-06 06:13:03 +01:00
|
|
|
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
|
2005-10-29 23:32:56 +02:00
|
|
|
executable bit. On such an unfortunate filesystem, you may
|
2010-01-10 00:33:00 +01:00
|
|
|
need to use 'git update-index --chmod='.
|
2005-10-29 23:32:56 +02:00
|
|
|
|
2007-03-02 22:11:30 +01:00
|
|
|
Quite similarly, if `core.symlinks` configuration variable is set
|
2007-12-29 07:20:38 +01:00
|
|
|
to 'false' (see linkgit:git-config[1]), symbolic links are checked out
|
2007-03-02 22:11:30 +01:00
|
|
|
as plain files, and this command does not modify a recorded file mode
|
|
|
|
from symbolic link to regular file.
|
|
|
|
|
2006-02-12 10:48:47 +01:00
|
|
|
The command looks at `core.ignorestat` configuration variable. See
|
|
|
|
'Using "assume unchanged" bit' section above.
|
|
|
|
|
2008-07-28 08:31:28 +02:00
|
|
|
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]).
|
|
|
|
|
config: add core.untrackedCache
When we know that mtime on directory as given by the environment
is usable for the purpose of untracked cache, we may want the
untracked cache to be always used without any mtime test or
kernel name check being performed.
Also when we know that mtime is not usable for the purpose of
untracked cache, for example because the repo is shared over a
network file system, we may want the untracked-cache to be
automatically removed from the index.
Allow the user to express such preference by setting the
'core.untrackedCache' configuration variable, which can take
'keep', 'false', or 'true' and default to 'keep'.
When read_index_from() is called, it now adds or removes the
untracked cache in the index to respect the value of this
variable. So it does nothing if the value is `keep` or if the
variable is unset; it adds the untracked cache if the value is
`true`; and it removes the cache if the value is `false`.
`git update-index --[no-|force-]untracked-cache` still adds the
untracked cache to, or removes it, from the index, but this
shows a warning if it goes against the value of
core.untrackedCache, because the next time the index is read
the untracked cache will be added or removed if the
configuration is set to do so.
Also `--untracked-cache` used to check that the underlying
operating system and file system change `st_mtime` field of a
directory if files are added or deleted in that directory. But
because those tests take a long time, `--untracked-cache` no
longer performs them. Instead, there is now
`--test-untracked-cache` to perform the tests. This change
makes `--untracked-cache` the same as `--force-untracked-cache`.
This last change is backward incompatible and should be
mentioned in the release notes.
Helped-by: Duy Nguyen <pclouds@gmail.com>
Helped-by: Torsten Bögershausen <tboegi@web.de>
Helped-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
read-cache: Duy'sfixup
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-27 07:58:05 +01:00
|
|
|
The untracked cache extension can be enabled by the
|
|
|
|
`core.untrackedCache` configuration variable (see
|
|
|
|
linkgit:git-config[1]).
|
2005-12-06 06:13:03 +01:00
|
|
|
|
doc: dissuade users from trying to ignore tracked files
It is quite common for users to want to ignore the changes to a file
that Git tracks. Common scenarios for this case are IDE settings and
configuration files, which should generally not be tracked and possibly
generated from tracked files using a templating mechanism.
However, users learn about the assume-unchanged and skip-worktree bits
and try to use them to do this anyway. This is problematic, because
when these bits are set, many operations behave as the user expects, but
they usually do not help when git checkout needs to replace a file.
There is no sensible behavior in this case, because sometimes the data
is precious, such as certain configuration files, and sometimes it is
irrelevant data that the user would be happy to discard.
Since this is not a supported configuration and users are prone to
misuse the existing features for unintended purposes, causing general
sadness and confusion, let's document the existing behavior and the
pitfalls in the documentation for git update-index so that users know
they should explore alternate solutions.
In addition, let's provide a recommended solution to dealing with the
common case of configuration files, since there are well-known
approaches used successfully in many environments.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-01-22 04:45:42 +01:00
|
|
|
NOTES
|
|
|
|
-----
|
|
|
|
|
|
|
|
Users often try to use the assume-unchanged and skip-worktree bits
|
|
|
|
to tell Git to ignore changes to files that are tracked. This does not
|
|
|
|
work as expected, since Git may still check working tree files against
|
|
|
|
the index when performing certain operations. In general, Git does not
|
|
|
|
provide a way to ignore changes to tracked files, so alternate solutions
|
|
|
|
are recommended.
|
|
|
|
|
|
|
|
For example, if the file you want to change is some sort of config file,
|
|
|
|
the repository can include a sample config file that can then be copied
|
|
|
|
into the ignored name and modified. The repository can even include a
|
|
|
|
script to treat the sample file as a template, modifying and copying it
|
|
|
|
automatically.
|
|
|
|
|
2008-05-29 01:55:27 +02:00
|
|
|
SEE ALSO
|
2005-12-06 06:13:03 +01:00
|
|
|
--------
|
2007-12-29 07:20:38 +01:00
|
|
|
linkgit:git-config[1],
|
2011-09-21 08:21:50 +02:00
|
|
|
linkgit:git-add[1],
|
|
|
|
linkgit:git-ls-files[1]
|
2005-12-06 06:13:03 +01:00
|
|
|
|
2005-05-10 23:32:30 +02:00
|
|
|
GIT
|
|
|
|
---
|
2008-06-06 09:07:32 +02:00
|
|
|
Part of the linkgit:git[1] suite
|