fsmonitor: add documentation for the fsmonitor extension.
This includes the core.fsmonitor setting, the fsmonitor integration hook, and the fsmonitor index extension. Also add documentation for the new fsmonitor options to ls-files and update-index. Signed-off-by: Ben Peart <benpeart@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
883e248b8a
commit
780494b1f5
@ -413,6 +413,13 @@ core.protectNTFS::
|
|||||||
8.3 "short" names.
|
8.3 "short" names.
|
||||||
Defaults to `true` on Windows, and `false` elsewhere.
|
Defaults to `true` on Windows, and `false` elsewhere.
|
||||||
|
|
||||||
|
core.fsmonitor::
|
||||||
|
If set, the value of this variable is used as a command which
|
||||||
|
will identify all files that may have changed since the
|
||||||
|
requested date/time. This information is used to speed up git by
|
||||||
|
avoiding unnecessary processing of files that have not changed.
|
||||||
|
See the "fsmonitor-watchman" section of linkgit:githooks[5].
|
||||||
|
|
||||||
core.trustctime::
|
core.trustctime::
|
||||||
If false, the ctime differences between the index and the
|
If false, the ctime differences between the index and the
|
||||||
working tree are ignored; useful when the inode change time
|
working tree are ignored; useful when the inode change time
|
||||||
|
@ -9,7 +9,7 @@ git-ls-files - Show information about files in the index and the working tree
|
|||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[verse]
|
||||||
'git ls-files' [-z] [-t] [-v]
|
'git ls-files' [-z] [-t] [-v] [-f]
|
||||||
(--[cached|deleted|others|ignored|stage|unmerged|killed|modified])*
|
(--[cached|deleted|others|ignored|stage|unmerged|killed|modified])*
|
||||||
(-[c|d|o|i|s|u|k|m])*
|
(-[c|d|o|i|s|u|k|m])*
|
||||||
[--eol]
|
[--eol]
|
||||||
@ -133,6 +133,11 @@ a space) at the start of each line:
|
|||||||
that are marked as 'assume unchanged' (see
|
that are marked as 'assume unchanged' (see
|
||||||
linkgit:git-update-index[1]).
|
linkgit:git-update-index[1]).
|
||||||
|
|
||||||
|
-f::
|
||||||
|
Similar to `-t`, but use lowercase letters for files
|
||||||
|
that are marked as 'fsmonitor valid' (see
|
||||||
|
linkgit:git-update-index[1]).
|
||||||
|
|
||||||
--full-name::
|
--full-name::
|
||||||
When run from a subdirectory, the command usually
|
When run from a subdirectory, the command usually
|
||||||
outputs paths relative to the current directory. This
|
outputs paths relative to the current directory. This
|
||||||
|
@ -16,9 +16,11 @@ SYNOPSIS
|
|||||||
[--chmod=(+|-)x]
|
[--chmod=(+|-)x]
|
||||||
[--[no-]assume-unchanged]
|
[--[no-]assume-unchanged]
|
||||||
[--[no-]skip-worktree]
|
[--[no-]skip-worktree]
|
||||||
|
[--[no-]fsmonitor-valid]
|
||||||
[--ignore-submodules]
|
[--ignore-submodules]
|
||||||
[--[no-]split-index]
|
[--[no-]split-index]
|
||||||
[--[no-|test-|force-]untracked-cache]
|
[--[no-|test-|force-]untracked-cache]
|
||||||
|
[--[no-]fsmonitor]
|
||||||
[--really-refresh] [--unresolve] [--again | -g]
|
[--really-refresh] [--unresolve] [--again | -g]
|
||||||
[--info-only] [--index-info]
|
[--info-only] [--index-info]
|
||||||
[-z] [--stdin] [--index-version <n>]
|
[-z] [--stdin] [--index-version <n>]
|
||||||
@ -111,6 +113,12 @@ you will need to handle the situation manually.
|
|||||||
set and unset the "skip-worktree" bit for the paths. See
|
set and unset the "skip-worktree" bit for the paths. See
|
||||||
section "Skip-worktree bit" below for more information.
|
section "Skip-worktree bit" below for more information.
|
||||||
|
|
||||||
|
--[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.
|
||||||
|
|
||||||
-g::
|
-g::
|
||||||
--again::
|
--again::
|
||||||
Runs 'git update-index' itself on the paths whose index
|
Runs 'git update-index' itself on the paths whose index
|
||||||
@ -201,6 +209,15 @@ will remove the intended effect of the option.
|
|||||||
`--untracked-cache` used to imply `--test-untracked-cache` but
|
`--untracked-cache` used to imply `--test-untracked-cache` but
|
||||||
this option would enable the extension unconditionally.
|
this option would enable the extension unconditionally.
|
||||||
|
|
||||||
|
--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.
|
||||||
|
|
||||||
\--::
|
\--::
|
||||||
Do not interpret any more arguments as options.
|
Do not interpret any more arguments as options.
|
||||||
|
|
||||||
@ -447,6 +464,34 @@ command reads the index; while when `--[no-|force-]untracked-cache`
|
|||||||
are used, the untracked cache is immediately added to or removed from
|
are used, the untracked cache is immediately added to or removed from
|
||||||
the index.
|
the index.
|
||||||
|
|
||||||
|
File System Monitor
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
This feature is intended to speed up git operations for repos that have
|
||||||
|
large working directories.
|
||||||
|
|
||||||
|
It enables git to work together with a file system monitor (see the
|
||||||
|
"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
|
||||||
|
linkgit:git-config[1]) than using the `--fsmonitor` 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.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.
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
@ -455,6 +455,34 @@ the name of the file that holds the e-mail to be sent. Exiting with a
|
|||||||
non-zero status causes 'git send-email' to abort before sending any
|
non-zero status causes 'git send-email' to abort before sending any
|
||||||
e-mails.
|
e-mails.
|
||||||
|
|
||||||
|
fsmonitor-watchman
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This hook is invoked when the configuration option core.fsmonitor is
|
||||||
|
set to .git/hooks/fsmonitor-watchman. It takes two arguments, a version
|
||||||
|
(currently 1) and the time in elapsed nanoseconds since midnight,
|
||||||
|
January 1, 1970.
|
||||||
|
|
||||||
|
The hook should output to stdout the list of all files in the working
|
||||||
|
directory that may have changed since the requested time. The logic
|
||||||
|
should be inclusive so that it does not miss any potential changes.
|
||||||
|
The paths should be relative to the root of the working directory
|
||||||
|
and be separated by a single NUL.
|
||||||
|
|
||||||
|
It is OK to include files which have not actually changed. All changes
|
||||||
|
including newly-created and deleted files should be included. When
|
||||||
|
files are renamed, both the old and the new name should be included.
|
||||||
|
|
||||||
|
Git will limit what files it checks for changes as well as which
|
||||||
|
directories are checked for untracked files based on the path names
|
||||||
|
given.
|
||||||
|
|
||||||
|
An optimized way to tell git "all files have changed" is to return
|
||||||
|
the filename '/'.
|
||||||
|
|
||||||
|
The exit status determines whether git will use the data from the
|
||||||
|
hook to limit its search. On error, it will fall back to verifying
|
||||||
|
all files and folders.
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
---
|
---
|
||||||
|
@ -295,3 +295,22 @@ The remaining data of each directory block is grouped by type:
|
|||||||
in the previous ewah bitmap.
|
in the previous ewah bitmap.
|
||||||
|
|
||||||
- One NUL.
|
- One NUL.
|
||||||
|
|
||||||
|
== File System Monitor cache
|
||||||
|
|
||||||
|
The file system monitor cache tracks files for which the core.fsmonitor
|
||||||
|
hook has told us about changes. The signature for this extension is
|
||||||
|
{ 'F', 'S', 'M', 'N' }.
|
||||||
|
|
||||||
|
The extension starts with
|
||||||
|
|
||||||
|
- 32-bit version number: the current supported version is 1.
|
||||||
|
|
||||||
|
- 64-bit time: the extension data reflects all changes through the given
|
||||||
|
time which is stored as the nanoseconds elapsed since midnight,
|
||||||
|
January 1, 1970.
|
||||||
|
|
||||||
|
- 32-bit bitmap size: the size of the CE_FSMONITOR_VALID bitmap.
|
||||||
|
|
||||||
|
- An ewah bitmap, the n-th bit indicates whether the n-th index entry
|
||||||
|
is not CE_FSMONITOR_VALID.
|
||||||
|
Loading…
Reference in New Issue
Block a user