日本語 ▾ トピック ▾ 最新版 ▾ 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]Defining a custom hunk-headerを参照)。

-m <num>
--max-count <num>

ファイルごとの一致数を制限します。-vまたは--invert-matchオプションを使用すると、指定された数の非一致後に検索が停止します。値-1は無制限の結果を返します(デフォルト)。値0は、ゼロ以外のステータスですぐに終了します。

--threads <num>

使用するgrepワーカー・スレッドの数です。詳細については、NOTES ON THREADS および CONFIGURATIONgrep.threadsを参照してください。

-f <file>

<file>からパターンを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内のファイルは除外します。

スレッドに関する注意

--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

デフォルトのマッチング動作を設定します。値としてbasicextendedfixed、またはperlを使用すると、それぞれ--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 grep が Git リポジトリの外部で実行されたときに、git grep --no-index にフォールバックします。デフォルトは false です。

GIT

git[1]スイートの一部

scroll-to-top