Git
English ▾ トピック ▾ 最新バージョン ▾ git-grep は 2.45.0 で最後に更新されました

NAME

git-grep - パターンに一致する行を出力する

SYNOPSIS

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

DESCRIPTION

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

OPTIONS

--cached

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

--untracked

作業ツリー内の追跡対象ファイルの検索に加えて、追跡されていないファイルも検索します。

--no-index

Gitによって管理されていない、または現在のディレクトリがGitによって管理されていることを無視して、現在のディレクトリ内のファイルを検索します。これは、-rオプションが指定された通常のgrep(1)ユーティリティを実行することと非常によく似ていますが、パスを制限するためにパス仕様パターンを使用するなど、いくつかの追加の利点があります。詳細については、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 がそれらのサポート付きでコンパイルされなかった場合、このオプションを提供すると、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.quotePathgit-config[1]を参照)で説明されているように引用符で囲まれます。

-o
--only-matching

一致する行の一致する(空でない)部分のみを、そのような各部分を別々の出力行で出力します。

-c
--count

一致するすべての行を表示する代わりに、一致する行の数を表示します。

--color[=<when>]

色付きの一致を表示します。値は、常に(デフォルト)、never、またはautoである必要があります。

--no-color

設定ファイルでデフォルトがカラー出力の場合でも、一致箇所の強調表示をオフにします。--color=never と同じです。

--break

異なるファイルからのマッチの間に行を空けます。

--heading

表示する各行の先頭ではなく、ファイル内のマッチの上部にファイル名を表示します。

-p
--show-function

マッチした行が関数名自体でない限り、マッチの関数名を含む前の行を表示します。名前は git diff がパッチのhunkヘッダーを判断するのと同じ方法で決定されます(gitattributes[5]カスタムhunk-headerの定義を参照してください)。

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

先頭と末尾の行を <num> 行表示し、連続するマッチのグループ間に -- を含む行を配置します。

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

末尾の行を <num> 行表示し、連続するマッチのグループ間に -- を含む行を配置します。

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

先頭の行を <num> 行表示し、連続するマッチのグループ間に -- を含む行を配置します。

-W
--function-context

関数名を含む前の行から、次の関数名の直前の行まで、周辺のテキストを表示します。これにより、マッチが見つかった関数全体が効果的に表示されます。関数名は、git diff がパッチのhunkヘッダーを判断するのと同じ方法で決定されます(gitattributes[5]カスタムhunk-headerの定義を参照してください)。

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

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

--threads <num>

使用する grep ワーカー スレッドの数。「スレッドに関する注記」と「設定」の grep.threads を参照してください。

-f <file>

<file> からパターンを 1 行ずつ読み取ります。

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

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

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

今後のバージョンでは、より多くの検索バックエンドで \0 を含むパターンをサポートすることを学習する可能性がありますが、それまでは、問題のパターン タイプがそれらをサポートしていない場合、終了します。

-e

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

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

ブール式を使用して、複数のパターンをどのように組み合わせるかを指定します。--or はデフォルトの演算子です。--and--or より優先順位が高くなります。-e は、すべてのパターンに使用する必要があります。

--all-match

--or で結合された複数のパターン式を指定する場合、このフラグは、それらすべてに一致する行を持つファイルに一致を制限するために指定されます。

-q
--quiet

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

<tree>…​

ワーキングツリー内の追跡対象ファイルを検索する代わりに、指定されたツリー内の blob を検索します。

--

オプションの終了を通知します。残りのパラメータは <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 \)

#defineMAX_PATH または PATH_MAX のいずれかを持つ行を検索します。

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

両方に一致する行を持つファイルで NODE または Unexpected を持つ行を検索します。

git grep solution -- :^Documentation

Documentation 内のファイルを除外して、solution を検索します。

スレッドに関する注記

--threads オプション(および grep.threads 設定)は、--open-files-in-pager が使用されている場合は無視され、シングルスレッドでの実行が強制されます。

オブジェクトストア(--cached またはツリーオブジェクトを指定して)を grep する場合、--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