oneway_diff: handle removed sparse directories
[alt-git.git] / Documentation / git-grep.txt
blob3d393fbac1bb3323c41ea2b74f6bba8f8ca39c00
1 git-grep(1)
2 ===========
4 NAME
5 ----
6 git-grep - Print lines matching a pattern
9 SYNOPSIS
10 --------
11 [verse]
12 'git grep' [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp]
13            [-v | --invert-match] [-h|-H] [--full-name]
14            [-E | --extended-regexp] [-G | --basic-regexp]
15            [-P | --perl-regexp]
16            [-F | --fixed-strings] [-n | --line-number] [--column]
17            [-l | --files-with-matches] [-L | --files-without-match]
18            [(-O | --open-files-in-pager) [<pager>]]
19            [-z | --null]
20            [ -o | --only-matching ] [-c | --count] [--all-match] [-q | --quiet]
21            [--max-depth <depth>] [--[no-]recursive]
22            [--color[=<when>] | --no-color]
23            [--break] [--heading] [-p | --show-function]
24            [-A <post-context>] [-B <pre-context>] [-C <context>]
25            [-W | --function-context]
26            [--threads <num>]
27            [-f <file>] [-e] <pattern>
28            [--and|--or|--not|(|)|-e <pattern>...]
29            [--recurse-submodules] [--parent-basename <basename>]
30            [ [--[no-]exclude-standard] [--cached | --no-index | --untracked] | <tree>...]
31            [--] [<pathspec>...]
33 DESCRIPTION
34 -----------
35 Look for specified patterns in the tracked files in the work tree, blobs
36 registered in the index file, or blobs in given tree objects.  Patterns
37 are lists of one or more search expressions separated by newline
38 characters.  An empty string as search expression matches all lines.
41 OPTIONS
42 -------
43 --cached::
44         Instead of searching tracked files in the working tree, search
45         blobs registered in the index file.
47 --no-index::
48         Search files in the current directory that is not managed by Git.
50 --untracked::
51         In addition to searching in the tracked files in the working
52         tree, search also in untracked files.
54 --no-exclude-standard::
55         Also search in ignored files by not honoring the `.gitignore`
56         mechanism. Only useful with `--untracked`.
58 --exclude-standard::
59         Do not pay attention to ignored files specified via the `.gitignore`
60         mechanism.  Only useful when searching files in the current directory
61         with `--no-index`.
63 --recurse-submodules::
64         Recursively search in each submodule that is active and
65         checked out in the repository.  When used in combination with the
66         <tree> option the prefix of all submodule output will be the name of
67         the parent project's <tree> object. This option has no effect
68         if `--no-index` is given.
70 -a::
71 --text::
72         Process binary files as if they were text.
74 --textconv::
75         Honor textconv filter settings.
77 --no-textconv::
78         Do not honor textconv filter settings.
79         This is the default.
81 -i::
82 --ignore-case::
83         Ignore case differences between the patterns and the
84         files.
86 -I::
87         Don't match the pattern in binary files.
89 --max-depth <depth>::
90         For each <pathspec> given on command line, descend at most <depth>
91         levels of directories. A value of -1 means no limit.
92         This option is ignored if <pathspec> contains active wildcards.
93         In other words if "a*" matches a directory named "a*",
94         "*" is matched literally so --max-depth is still effective.
96 -r::
97 --recursive::
98         Same as `--max-depth=-1`; this is the default.
100 --no-recursive::
101         Same as `--max-depth=0`.
103 -w::
104 --word-regexp::
105         Match the pattern only at word boundary (either begin at the
106         beginning of a line, or preceded by a non-word character; end at
107         the end of a line or followed by a non-word character).
109 -v::
110 --invert-match::
111         Select non-matching lines.
113 -h::
114 -H::
115         By default, the command shows the filename for each
116         match.  `-h` option is used to suppress this output.
117         `-H` is there for completeness and does not do anything
118         except it overrides `-h` given earlier on the command
119         line.
121 --full-name::
122         When run from a subdirectory, the command usually
123         outputs paths relative to the current directory.  This
124         option forces paths to be output relative to the project
125         top directory.
127 -E::
128 --extended-regexp::
129 -G::
130 --basic-regexp::
131         Use POSIX extended/basic regexp for patterns.  Default
132         is to use basic regexp.
134 -P::
135 --perl-regexp::
136         Use Perl-compatible regular expressions for patterns.
138 Support for these types of regular expressions is an optional
139 compile-time dependency. If Git wasn't compiled with support for them
140 providing this option will cause it to die.
142 -F::
143 --fixed-strings::
144         Use fixed strings for patterns (don't interpret pattern
145         as a regex).
147 -n::
148 --line-number::
149         Prefix the line number to matching lines.
151 --column::
152         Prefix the 1-indexed byte-offset of the first match from the start of the
153         matching line.
155 -l::
156 --files-with-matches::
157 --name-only::
158 -L::
159 --files-without-match::
160         Instead of showing every matched line, show only the
161         names of files that contain (or do not contain) matches.
162         For better compatibility with 'git diff', `--name-only` is a
163         synonym for `--files-with-matches`.
165 -O[<pager>]::
166 --open-files-in-pager[=<pager>]::
167         Open the matching files in the pager (not the output of 'grep').
168         If the pager happens to be "less" or "vi", and the user
169         specified only one pattern, the first file is positioned at
170         the first match automatically. The `pager` argument is
171         optional; if specified, it must be stuck to the option
172         without a space. If `pager` is unspecified, the default pager
173         will be used (see `core.pager` in linkgit:git-config[1]).
175 -z::
176 --null::
177         Use \0 as the delimiter for pathnames in the output, and print
178         them verbatim. Without this option, pathnames with "unusual"
179         characters are quoted as explained for the configuration
180         variable core.quotePath (see linkgit:git-config[1]).
182 -o::
183 --only-matching::
184         Print only the matched (non-empty) parts of a matching line, with each such
185         part on a separate output line.
187 -c::
188 --count::
189         Instead of showing every matched line, show the number of
190         lines that match.
192 --color[=<when>]::
193         Show colored matches.
194         The value must be always (the default), never, or auto.
196 --no-color::
197         Turn off match highlighting, even when the configuration file
198         gives the default to color output.
199         Same as `--color=never`.
201 --break::
202         Print an empty line between matches from different files.
204 --heading::
205         Show the filename above the matches in that file instead of
206         at the start of each shown line.
208 -p::
209 --show-function::
210         Show the preceding line that contains the function name of
211         the match, unless the matching line is a function name itself.
212         The name is determined in the same way as `git diff` works out
213         patch hunk headers (see 'Defining a custom hunk-header' in
214         linkgit:gitattributes[5]).
216 -<num>::
217 -C <num>::
218 --context <num>::
219         Show <num> leading and trailing lines, and place a line
220         containing `--` between contiguous groups of matches.
222 -A <num>::
223 --after-context <num>::
224         Show <num> trailing lines, and place a line containing
225         `--` between contiguous groups of matches.
227 -B <num>::
228 --before-context <num>::
229         Show <num> leading lines, and place a line containing
230         `--` between contiguous groups of matches.
232 -W::
233 --function-context::
234         Show the surrounding text from the previous line containing a
235         function name up to the one before the next function name,
236         effectively showing the whole function in which the match was
237         found. The function names are determined in the same way as
238         `git diff` works out patch hunk headers (see 'Defining a
239         custom hunk-header' in linkgit:gitattributes[5]).
241 --threads <num>::
242         Number of grep worker threads to use.
243         See `grep.threads` in 'CONFIGURATION' for more information.
245 -f <file>::
246         Read patterns from <file>, one per line.
248 Passing the pattern via <file> allows for providing a search pattern
249 containing a \0.
251 Not all pattern types support patterns containing \0. Git will error
252 out if a given pattern type can't support such a pattern. The
253 `--perl-regexp` pattern type when compiled against the PCRE v2 backend
254 has the widest support for these types of patterns.
256 In versions of Git before 2.23.0 patterns containing \0 would be
257 silently considered fixed. This was never documented, there were also
258 odd and undocumented interactions between e.g. non-ASCII patterns
259 containing \0 and `--ignore-case`.
261 In future versions we may learn to support patterns containing \0 for
262 more search backends, until then we'll die when the pattern type in
263 question doesn't support them.
265 -e::
266         The next parameter is the pattern. This option has to be
267         used for patterns starting with `-` and should be used in
268         scripts passing user input to grep.  Multiple patterns are
269         combined by 'or'.
271 --and::
272 --or::
273 --not::
274 ( ... )::
275         Specify how multiple patterns are combined using Boolean
276         expressions.  `--or` is the default operator.  `--and` has
277         higher precedence than `--or`.  `-e` has to be used for all
278         patterns.
280 --all-match::
281         When giving multiple pattern expressions combined with `--or`,
282         this flag is specified to limit the match to files that
283         have lines to match all of them.
285 -q::
286 --quiet::
287         Do not output matched lines; instead, exit with status 0 when
288         there is a match and with non-zero status when there isn't.
290 <tree>...::
291         Instead of searching tracked files in the working tree, search
292         blobs in the given trees.
294 \--::
295         Signals the end of options; the rest of the parameters
296         are <pathspec> limiters.
298 <pathspec>...::
299         If given, limit the search to paths matching at least one pattern.
300         Both leading paths match and glob(7) patterns are supported.
302 For more details about the <pathspec> syntax, see the 'pathspec' entry
303 in linkgit:gitglossary[7].
305 EXAMPLES
306 --------
308 `git grep 'time_t' -- '*.[ch]'`::
309         Looks for `time_t` in all tracked .c and .h files in the working
310         directory and its subdirectories.
312 `git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)`::
313         Looks for a line that has `#define` and either `MAX_PATH` or
314         `PATH_MAX`.
316 `git grep --all-match -e NODE -e Unexpected`::
317         Looks for a line that has `NODE` or `Unexpected` in
318         files that have lines that match both.
320 `git grep solution -- :^Documentation`::
321         Looks for `solution`, excluding files in `Documentation`.
323 NOTES ON THREADS
324 ----------------
326 The `--threads` option (and the grep.threads configuration) will be ignored when
327 `--open-files-in-pager` is used, forcing a single-threaded execution.
329 When grepping the object store (with `--cached` or giving tree objects), running
330 with multiple threads might perform slower than single threaded if `--textconv`
331 is given and there're too many text conversions. So if you experience low
332 performance in this case, it might be desirable to use `--threads=1`.
334 CONFIGURATION
335 -------------
337 grep.lineNumber::
338         If set to true, enable `-n` option by default.
340 grep.column::
341         If set to true, enable the `--column` option by default.
343 grep.patternType::
344         Set the default matching behavior. Using a value of 'basic', 'extended',
345         'fixed', or 'perl' will enable the `--basic-regexp`, `--extended-regexp`,
346         `--fixed-strings`, or `--perl-regexp` option accordingly, while the
347         value 'default' will return to the default matching behavior.
349 grep.extendedRegexp::
350         If set to true, enable `--extended-regexp` option by default. This
351         option is ignored when the `grep.patternType` option is set to a value
352         other than 'default'.
354 grep.threads::
355         Number of grep worker threads to use. If unset (or set to 0), Git will
356         use as many threads as the number of logical cores available.
358 grep.fullName::
359         If set to true, enable `--full-name` option by default.
361 grep.fallbackToNoIndex::
362         If set to true, fall back to git grep --no-index if git grep
363         is executed outside of a git repository.  Defaults to false.
368 Part of the linkgit:git[1] suite