Introduce "skip-worktree" bit in index, teach Git to get/set this bit
[gitweb.git] / Documentation / git-update-index.txt
index 1d9d81a702d26706047ae6ea29b4ca62ebe59460..a10f355b7cf6a11f936131a03fb9efab9ee5e2ea 100644 (file)
@@ -15,6 +15,7 @@ SYNOPSIS
             [--cacheinfo <mode> <object> <file>]\*
             [--chmod=(+|-)x]
             [--assume-unchanged | --no-assume-unchanged]
+            [--skip-worktree | --no-skip-worktree]
             [--ignore-submodules]
             [--really-refresh] [--unresolve] [--again | -g]
             [--info-only] [--index-info]
@@ -55,7 +56,7 @@ OPTIONS
         default behavior is to error out.  This option makes
        'git-update-index' continue anyway.
 
---ignore-submodules:
+--ignore-submodules::
        Do not try to update submodules.  This option is only respected
        when passed before --refresh.
 
@@ -78,9 +79,9 @@ OPTIONS
 
 --assume-unchanged::
 --no-assume-unchanged::
-       When these flags are specified, the object name recorded
+       When these flags are specified, the object names recorded
        for the paths are not updated.  Instead, these options
-       sets and unsets the "assume unchanged" bit for the
+       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
@@ -99,6 +100,13 @@ 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.
 
+--skip-worktree::
+--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
@@ -122,7 +130,7 @@ you will need to handle the situation manually.
        '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 conflicts with the entry being added are
+       that conflict with the entry being added are
        automatically removed with warning messages.
 
 --stdin::
@@ -304,6 +312,27 @@ M foo.c
 <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.
+
+
 Configuration
 -------------