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选项非常相似,但有一些额外的好处,例如使用 pathspec 模式限制路径。 此选项不能与--cached或--untracked一起使用。--no-exclude-standard- 也搜索被忽略的文件,不遵守.gitignore机制。仅与--untracked一起使用。--exclude-standard- 不注意通过.gitignore机制指定的被忽略文件。仅在使用--no-index搜索当前目录中的文件时有用。--recurse-submodules- 在仓库中活动且已检出的每个子模块中递归搜索。-a,--text- 将二进制文件视为文本处理。--textconv- 遵守 textconv 过滤器设置。--no-textconv- 不遵守 textconv 过滤器设置。这是默认值。-i,--ignore-case- 忽略模式和文件之间的大小写差异。-I- 不匹配二进制文件中的模式。--max-depth <depth>- 对于命令行上给出的每个 <pathspec>,最多下降 <depth> 层目录。值 -1 表示无限制。-r,--recursive- 与--max-depth=-1相同;这是默认值。--no-recursive- 与--max-depth=0相同。-w,--word-regexp- 仅在单词边界匹配模式。-v,--invert-match- 选择不匹配的行。-h- 默认情况下,命令显示每个匹配的文件名。-h选项用于禁止此输出。-H- 为了完整性而存在,除了覆盖命令行上先前给出的-h外不做任何事情。--full-name- 从子目录运行时,命令通常输出相对于当前目录的路径。此选项强制输出相对于项目顶级目录的路径。-E,--extended-regexp- 对模式使用 POSIX 扩展正则表达式。默认是使用基本正则表达式。-G,--basic-regexp- 对模式使用 POSIX 基本正则表达式。-P,--perl-regexp- 对模式使用 Perl 兼容的正则表达式。对这些类型正则表达式的支持是可选的编译时依赖项。-F,--fixed-strings- 对模式使用固定字符串(不将模式解释为正则表达式)。-n,--line-number- 在匹配行前加上行号。--column- 在匹配行前加上从匹配行开头开始的第一个匹配的 1 索引字节偏移。-l,--files-with-matches,--name-only- 不显示每个匹配的行,仅显示包含匹配的文件的名称。-L,--files-without-match- 不显示每个匹配的行,仅显示不包含匹配的文件的名称。-O[<pager>],--open-files-in-pager[=<pager>]- 在分页器中打开匹配的文件(不是 'grep' 的输出)。如果分页器恰好是 "less" 或 "vi",并且用户只指定了一个模式,第一个文件自动定位在第一个匹配处。-z,--null- 使用 \0 作为输出中路径名的分隔符,并逐字打印它们。-o,--only-matching- 仅打印匹配行的匹配(非空)部分,每个这样的部分在单独的输出行上。-c,--count- 不显示每个匹配的行,而是显示匹配的行数。--color[=<when>]- 显示彩色匹配。值必须是 always(默认)、never 或 auto。--no-color- 关闭匹配突出显示,即使配置文件给出默认彩色输出。与--color=never相同。--break- 在不同文件的匹配之间打印空行。--heading- 在该文件的匹配上方显示文件名,而不是在每个显示行的开头。-p,--show-function- 显示包含匹配函数名的前一行,除非匹配行本身是函数名。-<num>,-C <num>,--context <num>- 显示 <num> 个前导和尾随行,并在连续的匹配组之间放置包含--的行。-A <num>,--after-context <num>- 显示 <num> 个尾随行。-B <num>,--before-context <num>- 显示 <num> 个前导行。-W,--function-context- 显示从包含函数名的前一行到下一个函数名之前的周围文本,有效地显示找到匹配的整个函数。-m <num>,--max-count <num>- 限制每个文件的匹配数。使用-v或--invert-match选项时,搜索在指定数量的不匹配后停止。值 -1 将返回无限结果(默认)。值 0 将以非零状态立即退出。--threads <num>- 要使用的grep工作线程数。-f <file>- 从 <file> 读取模式,每行一个。通过 <file> 传递模式允许提供包含 \0 的搜索模式。-e- 下一个参数是模式。此选项必须用于以-开头的模式,应在将用户输入传递给 grep 的脚本中使用。多个模式通过 'or' 组合。--and,--or,--not,( ... )- 指定如何使用布尔表达式组合多个模式。--or是默认运算符。--and的优先级高于--or。所有模式都必须使用-e。--all-match- 当给出与--or组合的多个模式表达式时,指定此标志以将匹配限制为具有匹配所有这些模式的行的文件。-q,--quiet- 不输出匹配的行;而是在有匹配时以状态 0 退出,没有匹配时以非零状态退出。<tree>...- 不搜索工作树中的跟踪文件,而是搜索给定树中的 blob。--- 表示选项结束;其余参数是 <pathspec> 限制器。<pathspec>...- 如果给出,将搜索限制为匹配至少一个模式的路径。支持前导路径匹配和 glob(7) 模式。
示例
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。
配置
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 grep在 git 仓库外部执行,则回退到git grep --no-index。默认为 false。
Git
git(1) 套件的一部分
