英語 ▾ トピック ▾ 最新バージョン ▾ 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>…​]

説明

作業ツリー内の追跡ファイル、インデックスファイルに登録されたブロブ、または指定されたツリーオブジェクト内のブロブで、指定されたパターンを探します。パターンは、改行文字で区切られた1つ以上の検索式のリストです。検索式として空の文字列は、すべての行に一致します。

オプション

--cached

作業ツリー内の追跡ファイルを検索する代わりに、インデックスファイルに登録されたブロブを検索します。

--untracked

作業ツリー内の追跡ファイルに加えて、未追跡ファイルも検索します。

--no-index

現在のディレクトリ内の、Gitによって管理されていないファイル、または現在のディレクトリがGitによって管理されていることを無視してファイルを検索します。これは、通常のgrep(1)ユーティリティを-rオプションを指定して実行するのとかなり似ていますが、パスを制限するためにパス指定パターンを使用するなどの追加の利点があります。詳細については、gitglossary[7]pathspecエントリを参照してください。

このオプションは、--cachedまたは--untrackedと同時に使用することはできません。また、以下のCONFIGURATIONgrep.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」で、ユーザーが1つのパターンのみを指定した場合、最初のファイルは自動的に最初のマッチに配置されます。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ワーカーのスレッド数。詳細については、THREADSに関する注意事項CONFIGURATIONgrep.threadsを参照してください。

-f <file>

<file>からパターンを読み込みます(1行に1つ)。

<file>を介してパターンを渡すことで、\0を含む検索パターンを提供できます。

すべてのパターンタイプが\0を含むパターンをサポートしているわけではありません。特定のパターンタイプがそのようなパターンをサポートできない場合、Gitはエラーを発生させます。PCRE v2バックエンドに対してコンパイルされた場合の--perl-regexpパターンタイプは、これらの種類のパターンに対して最も広範なサポートを提供します。

Gitの2.23.0より前のバージョンでは、\0を含むパターンは黙示的に固定と見なされていました。これは決して文書化されておらず、例えば\0を含む非ASCIIパターンと--ignore-caseの間には奇妙で文書化されていない相互作用もありました。

将来のバージョンでは、より多くの検索バックエンドで\0を含むパターンをサポートするようになるかもしれませんが、それまでは、該当するパターンタイプがそれらをサポートしない場合、終了します。

-e

次のパラメータはパターンです。このオプションは、-で始まるパターンに使用する必要があり、ユーザー入力をgrepに渡すスクリプトで使用すべきです。複数のパターンはorで結合されます。

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

ブール式を使用して複数のパターンを結合する方法を指定します。--orがデフォルトの演算子です。--and--orよりも高い優先順位を持ちます。すべてのパターンに対して-eを使用する必要があります。

--all-match

--orと組み合わせて複数のパターン式を与える場合、このフラグは、それらすべてに一致する行を持つファイルにマッチを限定するために指定されます。

-q
--quiet

一致した行を出力しません。代わりに、一致があった場合はステータス0で、ない場合は非ゼロステータスで終了します。

<tree>…​

作業ツリー内の追跡ファイルを検索する代わりに、指定されたツリー内のブロブを検索します。

--

オプションの終わりを示します。残りのパラメータは<pathspec>リミッターです。

<pathspec>…​

指定された場合、検索を少なくとも1つのパターンに一致するパスに限定します。先行するパスの一致と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内のファイルは除外します。

スレッドに関する注意事項

--threadsオプション(およびgrep.threads設定)は、--open-files-in-pagerが使用される場合、単一スレッド実行を強制するため無視されます。

オブジェクトストアをgrepする場合(--cachedを使用するか、ツリーオブジェクトを指定する場合)、--textconvが与えられ、テキスト変換が多すぎる場合、複数スレッドで実行すると単一スレッドよりもパフォーマンスが低下する可能性があります。したがって、このケースで低パフォーマンスが発生する場合は、--threads=1を使用することが望ましいかもしれません。

設定

このセクションのこの行より下のすべての内容は、git-config[1]のドキュメンテーションから選択的に含まれています。内容はそちらで見つかるものと同じです。

grep.lineNumber

trueに設定すると、デフォルトで-nオプションが有効になります。

grep.column

trueに設定すると、デフォルトで--columnオプションが有効になります。

grep.patternType

デフォルトのマッチング動作を設定します。値としてbasicextendedfixed、またはperlを使用すると、それぞれ--basic-regexp--extended-regexp--fixed-strings、または--perl-regexpオプションが有効になります。一方、値defaultは、basicextendedのどちらかを選択するためにgrep.extendedRegexpオプションを使用します。

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]スイートの一部

scroll-to-top