中文 (简体) ▾ 主题 ▾ 最新版本 ▾ git-grep 最后更新于 2.45.0

名称

git-grep - 打印匹配模式的行

概要

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>…​]

描述

在工作树中跟踪的文件、索引文件中注册的 blob 或给定树对象中的 blob 中查找指定的模式。模式是由换行符分隔的一个或多个搜索表达式的列表。空字符串作为搜索表达式匹配所有行。

选项

--cached

不搜索工作树中跟踪的文件,而是搜索索引文件中注册的 blob。

--untracked

除了搜索工作树中跟踪的文件外,还搜索未跟踪的文件。

--no-index

在当前目录中搜索不受 Git 管理的文件,或忽略当前目录受 Git 管理的情况。这与运行常规 grep(1) 实用程序并指定其 -r 选项非常相似,但具有一些额外的优点,例如使用路径规范模式来限制路径;有关更多信息,请参阅 gitglossary[7] 中的 *pathspec* 条目。

此选项不能与 --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>]

显示彩色匹配项。值必须始终为 always(默认)、never 或 auto。

--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_PATHPATH_MAX 的行。

git grep --all-match -e NODE -e Unexpected

查找包含 NODEUnexpected 的行,这些文件包含与两者都匹配的行。

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

设置默认匹配行为。使用 basicextendedfixedperl 值将分别启用 --basic-regexp--extended-regexp--fixed-strings--perl-regexp 选项,而值 default 将使用 grep.extendedRegexp 选项在 basicextended 之间进行选择。

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] 套件的一部分

scroll-to-top