Merge branch 'maint'
[gitweb.git] / Documentation / git-grep.txt
index 7b810dfda760a01c78667015f7c6214fcaeceae6..c5a5dad1ce27dde6c3846beaf7ab2f7aa8ed81c8 100644 (file)
@@ -11,13 +11,14 @@ SYNOPSIS
 [verse]
 'git-grep' [--cached]
           [-a | --text] [-I] [-i | --ignore-case] [-w | --word-regexp]
-          [-v | --invert-match]
-          [-E | --extended-regexp] [-G | --basic-regexp] [-F | --fixed-strings]
-          [-n] [-l | --files-with-matches] [-L | --files-without-match]
-          [-c | --count]
+          [-v | --invert-match] [-h|-H] [--full-name]
+          [-E | --extended-regexp] [-G | --basic-regexp]
+          [-F | --fixed-strings] [-n]
+          [-l | --files-with-matches] [-L | --files-without-match]
+          [-c | --count] [--all-match]
           [-A <post-context>] [-B <pre-context>] [-C <context>]
-          [-f <file>] [-e <pattern>]
-          [<tree>...]
+          [-f <file>] [-e] <pattern>
+          [--and|--or|--not|(|)|-e <pattern>...] [<tree>...]
           [--] [<path>...]
 
 DESCRIPTION
@@ -39,6 +40,9 @@ OPTIONS
        Ignore case differences between the patterns and the
        files.
 
+-I::
+       Don't match the pattern in binary files.
+
 -w | --word-regexp::
        Match the pattern only at word boundary (either begin at the
        beginning of a line, or preceded by a non-word character; end at
@@ -47,10 +51,27 @@ OPTIONS
 -v | --invert-match::
        Select non-matching lines.
 
+-h | -H::
+       By default, the command shows the filename for each
+       match.  `-h` option is used to suppress this output.
+       `-H` is there for completeness and does not do anything
+       except it overrides `-h` given earlier on the command
+       line.
+
+--full-name::
+       When run from a subdirectory, the command usually
+       outputs paths relative to the current directory.  This
+       option forces paths to be output relative to the project
+       top directory.
+
 -E | --extended-regexp | -G | --basic-regexp::
        Use POSIX extended/basic regexp for patterns.  Default
        is to use basic regexp.
 
+-F | --fixed-strings::
+       Use fixed strings for patterns (don't interpret pattern
+       as a regex).
+
 -n::
        Prefix the line number to matching lines.
 
@@ -68,17 +89,48 @@ OPTIONS
        line containing `--` between contiguous groups of
        matches.
 
+-<num>::
+       A shortcut for specifying -C<num>.
+
 -f <file>::
        Read patterns from <file>, one per line.
 
+-e::
+       The next parameter is the pattern. This option has to be
+       used for patterns starting with - and should be used in
+       scripts passing user input to grep.  Multiple patterns are
+       combined by 'or'.
+
+--and | --or | --not | ( | )::
+       Specify how multiple patterns are combined using Boolean
+       expressions.  `--or` is the default operator.  `--and` has
+       higher precedence than `--or`.  `-e` has to be used for all
+       patterns.
+
+--all-match::
+       When giving multiple pattern expressions combined with `--or`,
+       this flag is specified to limit the match to files that
+       have lines to match all of them.
+
 `<tree>...`::
        Search blobs in the trees for specified patterns.
 
-`--`::
+\--::
        Signals the end of options; the rest of the parameters
        are <path> limiters.
 
 
+Example
+-------
+
+git grep -e \'#define\' --and \( -e MAX_PATH -e PATH_MAX \)::
+       Looks for a line that has `#define` and either `MAX_PATH` or
+       `PATH_MAX`.
+
+git grep --all-match -e NODE -e Unexpected::
+       Looks for a line that has `NODE` or `Unexpected` in
+       files that have lines that match both.
+
 Author
 ------
 Originally written by Linus Torvalds <torvalds@osdl.org>, later