directory search
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
characters

命名

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]           [-l | --files-with-matches] [-L | --files-without-match]           [(-O | --open-files-in-pager) [<pager>]]           [-z | --null]           [-c | --count] [--all-match] [-q | --quiet]           [--max-depth <depth>]           [--color[=<when>] | --no-color]           [--break] [--heading] [-p | --show-function]           [-A <post-context>] [-B <pre-context>] [-C <context>]           [-W | --function-context]           [--threads <num>]           [-f <file>] [-e] <pattern>           [--and|--or|--not|(|)|-e <pattern>…]           [--recurse-submodules] [--parent-basename <basename>]           [ [--[no-]exclude-standard] [--cached | --no-index | --untracked] | <tree>…]           [--] [<pathspec>…]

描述

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

组态

grep.lineNumber

如果设置为 true ,则-n默认启用选项。

grep.patternType

设置默认的匹配行为。使用值basicextendedfixed,或perl将启用--basic-regexp--extended-regexp--fixed-strings,或--perl-regexp相应的选项,而值default将返回到默认匹配行为。

grep.extendedRegexp

如果设置为 true,则--extended-regexp默认启用选项。当该grep.patternType选项设置为非时,该选项将被忽略default

grep.threads

要使用的 grep 工作线程数。如果未设置(或设置为0),则默认使用8个线程(现在)。

grep.fullName

如果设置为 true ,则--full-name默认启用选项。

grep.fallbackToNoIndex

如果设置为 true ,则回退到 git grep --no-index,如果 git grep 在 git 存储库之外执行。默认为 false 。

选项

--cached

搜索工作树中的追踪文件,而不是搜索索引文件中注册的斑点。

--no-index

搜索当前目录中不受 Git 管理的文件。

--untracked

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

--no-exclude-standard

通过不尊重.gitignore机制来搜索被忽略的文件。只用于--untracked

--exclude-standard

不要关注通过.gitignore机制指定的忽略文件。仅在使用当前目录搜索文件时有用--no-index

--recurse-submodules

递归搜索已在存储库中初始化并检出的每个子模块。当与 <tree> 选项结合使用时,所有子模块输出的前缀将是父项目的 <tree> 对象的名称。

--parent-basename <basename>

仅限内部使用。为了使用 --recurse-submodules 选项产生统一的输出,可以使用此选项将父级的 <tree> 对象的基名称提供给子模块,以便子模块可以将其输出与父级名称相加,而不是使用 SHA1 子模块。

-a   --text

像处理文本一样处理二进制文件。

--textconv

尊重 textconv 过滤器设置。

--no-textconv

不要兑现 textconv 过滤器设置。这是默认设置。

-i   --ignore-case

忽略模式和文件之间的大小写区别。

-I

不匹配二进制文件中的模式。

--max-depth <depth>

对于命令行中给出的每个 <pathspec> ,最多下降 <depth> 级别的目录。负值意味着没有限制。如果 <pathspec> 包含活动通配符,则忽略此选项。换句话说,如果 “a *” 匹配名为 “a *” 的目录,则“*”的字面匹配如此 -  max-depth 仍然有效。

-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

在行号前加上匹配的行。

-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)。如果寻呼机恰好是 “较少” 或 “vi” ,并且用户只指定一个模式,则第一个文件将自动定位在第一个匹配位置。该pager论点是可选的; 如果指定,它必须粘贴到选项没有空格。如果pager未指定,将使用默认寻呼机(请参阅core.pager git-config [1] )。

-z   --null

输出 \ 0 而不是通常跟在文件名后的字符。

-c   --count

显示匹配的行数,而不是显示每条匹配的行。

--color=<when>

显示结果为彩色。该值必须 always(默认),never 或 auto 。

--no-color

关闭匹配突出显示,即使配置文件将默认设置为彩色输出。和--color=never一样。

--break

在不同文件的匹配之间打印空行。

--heading

在文件的上方显示文件名,而不是在每个显示的行的开头。

-p   --show-function

显示包含匹配函数名称的上一行,除非匹配行是函数名称本身。该名称的确定方式与git diff制作补丁大小标头的方式相同(请参阅Defining a custom hunk-header gitattributes [5])。

-<num>   -C <num>   --context <num>

显示 <num> 前导和尾部线条,并放置包含--连续的匹配组之间的线条。

-A <num>   --after-context <num>

显示 <num> 尾随线,并--在连续的匹配组之间放置一行。

-B <num>   --before-context <num>

显示 <num> 引出线,并--在相邻的匹配组之间放置一行。

-W   --function-context

显示前一行中包含函数名称的周围文本,直到下一个函数名称之前的文本,从而有效地显示找到匹配的整个函数。

--threads <num>

要使用的 grep 工作线程数。参见grep.threadsCONFIGURATION获取更多信息。

-f <file>

从 <file> 中读取模式,每行一个。

-e

下一个参数是模式。这个选项必须用于模式的开头,-并且应该在将用户输入传递给 grep 的脚本中使用。多个模式组合在一起or

--and   --or   --not   ( … )

指定如何使用布尔表达式组合多个模式。--or是默认的运营商。--and--or优先。-e必须用于所有模式。

--all-match

将多个模式表达式结合使用时--or,会指定此标志以将匹配限制为具有与其匹配的所有行的文件。

-q   --quiet

不要输出匹配的行; 取而代之的是,当状态0出现匹配时退出,当不存在时退出非零状态。

<tree>…

而不是在工作树中搜索跟踪文件,搜索给定树中的斑点。

--

表示选项结束; 其余的参数是 <pathspec> 限制器。

<pathspec>…

如果给定,则将搜索限制为至少匹配一个模式的路径。两个前导路径匹配并支持 glob(7)模式。

有关 <pathspec> 语法的更多详细信息,请参阅pathspec gitglossary [7]中的条目。

例子

git grep 'time_t' -- '*.[ch]'

查找time_t在所有跟踪的 .c 和 .h 文件在工作目录及其子目录。

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中的文件。

Previous article: Next article: