设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
修补
调试
电子邮件
外部系统
服务器管理员
指南
管理
底层命令
- 2.45.1 → 2.47.0 无更改
- 2.45.0 04/29/24
- 2.43.1 → 2.44.2 无更改
- 2.43.0 11/20/23
- 2.38.1 → 2.42.3 无更改
- 2.38.0 10/02/22
- 2.32.1 → 2.37.7 无更改
- 2.32.0 06/06/21
- 2.30.1 → 2.31.8 无更改
- 2.30.0 12/27/20
- 2.29.1 → 2.29.3 无更改
- 2.29.0 10/19/20
- 2.27.1 → 2.28.1 无更改
- 2.27.0 06/01/20
- 2.26.1 → 2.26.3 无更改
- 2.26.0 03/22/20
- 2.25.2 → 2.25.5 无更改
- 2.25.1 02/17/20
- 2.24.1 → 2.25.0 无更改
- 2.24.0 11/04/19
- 2.22.1 → 2.23.4 无更改
- 2.22.0 06/07/19
- 2.20.1 → 2.21.4 无更改
- 2.20.0 12/09/18
- 2.19.1 → 2.19.6 无更改
- 2.19.0 09/10/18
- 2.18.1 → 2.18.5 无更改
- 2.18.0 06/21/18
- 2.16.6 → 2.17.6 无更改
- 2.15.4 无更改
- 2.14.6 12/06/19
- 2.13.7 无更改
- 2.12.5 09/22/17
- 2.10.5 → 2.11.4 无更改
- 2.9.5 07/30/17
- 2.8.6 07/30/17
- 2.7.6 无更改
- 2.6.7 05/05/17
- 2.2.3 → 2.5.6 无更改
- 2.1.4 12/17/14
- 2.0.5 12/17/14
概要
git grep [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp] [-v | --invert-match] [-h|-H] [--full-name] [-E | --extended-regexp] [-G | --basic-regexp] [-P | --perl-regexp] [-F | --fixed-strings] [-n | --line-number] [--column] [-l | --files-with-matches] [-L | --files-without-match] [(-O | --open-files-in-pager) [<pager>]] [-z | --null] [ -o | --only-matching ] [-c | --count] [--all-match] [-q | --quiet] [--max-depth <depth>] [--[no-]recursive] [--color[=<when>] | --no-color] [--break] [--heading] [-p | --show-function] [-A <post-context>] [-B <pre-context>] [-C <context>] [-W | --function-context] [(-m | --max-count) <num>] [--threads <num>] [-f <file>] [-e] <pattern> [--and|--or|--not|(|)|-e <pattern>…] [--recurse-submodules] [--parent-basename <basename>] [ [--[no-]exclude-standard] [--cached | --untracked | --no-index] | <tree>…] [--] [<pathspec>…]
选项
- --cached
-
不搜索工作树中跟踪的文件,而搜索索引文件中注册的 Blob。
- --untracked
-
除了搜索工作树中跟踪的文件外,还搜索未跟踪的文件。
- --no-index
-
搜索当前目录中不受 Git 管理的文件,或忽略当前目录受 Git 管理。这与使用指定的
-r
选项运行常规grep(1)
实用程序非常相似,但具有一些额外的好处,例如使用路径规范模式来限制路径;有关更多信息,请参阅 gitglossary[7] 中的“路径规范”条目。此选项不能与
--cached
或--untracked
一起使用。另请参阅下面“配置”中的grep.fallbackToNoIndex
。 - --no-exclude-standard
-
通过不遵守
.gitignore
机制来搜索忽略的文件。仅在与--untracked
一起使用时才有用。 - --exclude-standard
-
不关注通过
.gitignore
机制指定的忽略文件。仅当使用--no-index
在当前目录中搜索文件时才有用。 - --recurse-submodules
-
递归搜索存储库中处于活动状态并已签出的每个子模块。当与 <tree> 选项结合使用时,所有子模块输出的前缀将是父项目的 <tree> 对象的名称。此选项不能与
--untracked
一起使用,并且如果指定了--no-index
,则无效。 - -a
- --text
-
将二进制文件视为文本文件进行处理。
- --textconv
-
遵守 textconv 过滤器设置。
- --no-textconv
-
不遵守 textconv 过滤器设置。这是默认设置。
- -i
- --ignore-case
-
忽略模式和文件之间的大小写差异。
- -I
-
不匹配二进制文件中的模式。
- --max-depth <depth>
-
对于命令行上给定的每个 <pathspec>,最多下降 <depth> 个目录级别。值为 -1 表示没有限制。如果 <pathspec> 包含活动通配符,则忽略此选项。换句话说,如果“a*”匹配名为“a*”的目录,“*”将按字面意思匹配,因此 --max-depth 仍然有效。
- -r
- --recursive
-
与
--max-depth=-1
相同;这是默认设置。 - --no-recursive
-
与
--max-depth=0
相同。 - -w
- --word-regexp
-
仅在单词边界匹配模式(要么以行的开头开始,要么以非单词字符开头;以行的结尾结束或以非单词字符结尾)。
- -v
- --invert-match
-
选择不匹配的行。
- -h
- -H
-
默认情况下,该命令会显示每个匹配项的文件名。
-h
选项用于抑制此输出。-H
出于完整性考虑而存在,除了覆盖命令行中较早给出的-h
外,它不执行任何操作。 - --full-name
-
当从子目录运行时,该命令通常输出相对于当前目录的路径。此选项强制路径相对于项目顶级目录输出。
- -E
- --extended-regexp
- -G
- --basic-regexp
-
对模式使用 POSIX 扩展/基本正则表达式。默认情况下使用基本正则表达式。
- -P
- --perl-regexp
-
对模式使用与 Perl 兼容的正则表达式。
这些类型正则表达式的支持是可选的编译时依赖项。如果 Git 没有编译这些支持,则提供此选项会导致它终止。
- -F
- --fixed-strings
-
对模式使用固定字符串(不要将模式解释为正则表达式)。
- -n
- --line-number
-
在匹配行之前添加行号。
- --column
-
添加匹配行开头第一个匹配项的 1 索引字节偏移量。
- -l
- --files-with-matches
- --name-only
- -L
- --files-without-match
-
不显示每个匹配行,而只显示包含(或不包含)匹配项的文件名。为了与 git diff 更好地兼容,
--name-only
是--files-with-matches
的同义词。 - -O[<pager>]
- --open-files-in-pager[=<pager>]
-
在分页器中打开匹配文件(而不是 grep 的输出)。如果分页器恰好是“less”或“vi”,并且用户只指定了一个模式,则第一个文件会自动定位到第一个匹配项。
pager
参数是可选的;如果指定,则必须将其粘贴到选项上,不能有空格。如果未指定pager
,则将使用默认分页器(请参阅 git-config[1] 中的core.pager
)。 - -z
- --null
-
在输出中使用 \0 作为路径名的分隔符,并逐字打印它们。没有此选项,具有“特殊”字符的路径名将被引用,如配置变量
core.quotePath
所解释(请参阅 git-config[1])。 - -o
- --only-matching
-
仅打印匹配行的匹配(非空)部分,每个部分都在单独的输出行上。
- -c
- --count
-
不显示每个匹配行,而显示匹配行的数量。
- --color[=<when>]
-
显示彩色匹配项。该值必须始终为(默认值)、从不或自动。
- --no-color
-
关闭匹配突出显示,即使配置文件将默认值设置为输出颜色。与
--color=never
相同。 - --break
-
在来自不同文件的匹配项之间打印空行。
- --heading
-
在该文件中的匹配项上方显示文件名,而不是在每行显示的开头显示。
- -p
- --show-function
-
显示包含匹配函数名称的前一行,除非匹配行本身就是函数名称。名称的确定方式与
git diff
确定补丁块头的方式相同(请参阅gitattributes[5]中的“定义自定义块头”)。 - -<num>
- -C <num>
- --context <num>
-
显示<num>行前导和尾随行,并在匹配的连续组之间放置一行包含
--
的内容。 - -A <num>
- --after-context <num>
-
显示<num>行尾随行,并在匹配的连续组之间放置一行包含
--
的内容。 - -B <num>
- --before-context <num>
-
显示<num>行前导行,并在匹配的连续组之间放置一行包含
--
的内容。 - -W
- --function-context
-
显示从包含函数名称的前一行到下一个函数名称前一行的周围文本,有效地显示找到匹配项的整个函数。函数名称的确定方式与
git diff
确定补丁块头的方式相同(请参阅gitattributes[5]中的“定义自定义块头”)。 - -m <num>
- --max-count <num>
-
限制每个文件的匹配数量。当使用
-v
或--invert-match
选项时,搜索将在指定数量的不匹配项后停止。值为-1将返回无限结果(默认值)。值为0将立即以非零状态退出。 - --threads <num>
-
要使用的
grep
工作线程数。有关更多信息,请参阅“线程说明”和“配置”中的grep.threads
。 - -f <file>
-
从<file>中读取模式,每行一个。
通过<file>传递模式允许提供包含\0的搜索模式。
并非所有模式类型都支持包含\0的模式。如果给定的模式类型不支持此类模式,Git将出错。针对PCRE v2后端编译的
--perl-regexp
模式类型对这些类型的模式具有最广泛的支持。在2.23.0之前的Git版本中,包含\0的模式将被静默视为固定。这从未记录在案,例如,包含\0的非ASCII模式与
--ignore-case
之间也存在奇怪且未记录的交互。在将来的版本中,我们可能会学习支持更多搜索后端中包含\0的模式,在此之前,当相关的模式类型不支持它们时,我们将终止。
- -e
-
下一个参数是模式。此选项必须用于以
-
开头的模式,并且应在将用户输入传递给grep的脚本中使用。多个模式通过或组合。 - --and
- --or
- --not
- ( … )
-
使用布尔表达式指定如何组合多个模式。
--or
是默认运算符。--and
的优先级高于--or
。所有模式都必须使用-e
。 - --all-match
-
当给出使用
--or
组合的多个模式表达式时,指定此标志以将匹配限制为具有匹配所有模式的行。 - -q
- --quiet
-
不输出匹配行;而是当有匹配项时以状态0退出,当没有匹配项时以非零状态退出。
- <tree>…
-
不搜索工作树中跟踪的文件,而是在给定的树中搜索blob。
- --
-
表示选项结束;其余参数是<pathspec>限制符。
- <pathspec>…
-
如果给出,则将搜索限制为至少与一个模式匹配的路径。支持前导路径匹配和glob(7)模式。
有关<pathspec>语法的更多详细信息,请参阅gitglossary[7]中的“pathspec”条目。
示例
-
git grep 'time_t' -- '*.[ch]'
-
在工作目录及其子目录中所有跟踪的.c和.h文件中查找
time_t
。 -
git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)
-
查找包含
#define
以及MAX_PATH
或PATH_MAX
的行。 -
git grep --all-match -e NODE -e Unexpected
-
查找在包含匹配这两者的行的文件中包含
NODE
或Unexpected
的行。 -
git grep solution -- :^Documentation
-
查找
solution
,排除Documentation
中的文件。
线程说明
当使用--open-files-in-pager
时,将忽略--threads
选项(以及grep.threads
配置),强制单线程执行。
当使用grep对象存储(使用--cached
或提供树对象)时,如果给定--textconv
并且存在太多文本转换,则使用多个线程运行可能会比单线程运行慢。因此,如果在这种情况下遇到性能低下,则可能需要使用--threads=1
。
配置
本节中此行以下的所有内容都从git-config[1]文档中选择性地包含。内容与那里找到的内容相同
- grep.lineNumber
-
如果设置为true,则默认启用
-n
选项。 - grep.column
-
如果设置为true,则默认启用
--column
选项。 - grep.patternType
-
设置默认匹配行为。使用basic、extended、fixed或perl值将分别启用
--basic-regexp
、--extended-regexp
、--fixed-strings
或--perl-regexp
选项,而值default将使用grep.extendedRegexp
选项在basic和extended之间进行选择。 - grep.extendedRegexp
-
如果设置为true,则默认启用
--extended-regexp
选项。当grep.patternType
选项设置为除default以外的值时,将忽略此选项。 - grep.threads
-
要使用的grep工作线程数。如果未设置(或设置为0),Git将使用与可用逻辑核心数量相同的线程数。
- grep.fullName
-
如果设置为true,则默认启用
--full-name
选项。 - grep.fallbackToNoIndex
-
如果设置为true,如果在git存储库之外执行
git grep
,则回退到git grep --no-index
。默认为false。
Git
是git[1]套件的一部分