コマンド名
「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] [--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>…]
説明
ワークツリーの追跡ファイル、インデックスファイルに登録されているブロブ、または指定されたツリーオブジェクトのブロブで指定されたパターンを探します。パターンは改ライン文字で区切られた1つ以上の検索式のリストです。検索式としての空の文字ラインはすべてのラインに一致します。
構成
grep.lineNumber
「true」に設定されている場合、デフォルトで-n
オプションを有効にします。
grep.column
「true」に設定されている場合、デフォルトで--column
オプションを有効にします。
grep.patternType
デフォルトの一致動作を設定します。「basic」、「extended」、「fixed」、または「perl」の値を使用すると、それに応じて--basic-regexp
、--extended-regexp
、--fixed-strings
、もしくは--perl-regexp
オプションが有効になり、デフォルト値はデフォルトマッチング動作に戻ります。
grep.extendedRegexp
「 true」に設定されている場合、デフォルトで--extended-regexp
オプションを有効にします。grep.patternType
オプションがデフォルト以外の値に設定されている場合、このオプションは無視されます。
grep.threads
使用する「grep」ワーカースレッドの数です。設定されていない(または0に設定されている)場合、Gitは使用可能なロジカルコアの数と同じ数のスレッドを使用します。
grep.fullName
「 true」に設定されている場合、デフォルトで--full-name
オプションを有効にします。
grep.fallbackToNoIndex
「true」に設定されている場合、「git grep」がgitリポジトリの外部で実行されると、「git grep–no-index」にフォールバックします。デフォルトは「false」となっています。
オプション
--cached
ワークツリーで追跡されたファイルを検索する代わりに、インデックスファイルに登録されているブロブを検索します。
--no-index
Gitによって管理されていない現在のディレクトリ内のファイルを検索します。
--untracked
ワークツリーで追跡されたファイルを検索するだけでなく、追跡されていないファイルも検索します。
--no-exclude-standard
また.gitignore
メカニズムを使用しないことにより、無視されたファイルを検索します。--untracked
でのみ役立ちます。
--exclude-standard
.gitignore
メカニズムを介して指定された無視されたファイルには注意を払わないでください。--no-index
を使用して現在のディレクトリ内のファイルを検索する場合にのみ役立ちます。
--recurse-submodules
アクティブでリポジトリにチェックアウトされている各サブモジュールを再帰的に検索します。 <tree>オプションと組み合わせて使用すると、すべてのサブモジュール出力のプレフィックスはペアレントプロジェクトの<tree>オブジェクトの名前になります。--no-index
が指定されている場合、このオプションは効果がありません。
-a
--text
--text
バイナリファイルをテキストであるかのように処理します。
--textconv
テキストコンバージョンフィルター設定を優先します。
--no-textconv
テキストコンバージョンフィルター設定を優先します。これがデフォルトです。
-i
--ignore-case
--ignore-case
パターンとファイルの大文字と小文字の違いは無視します。
-I
バイナリファイルのパターンと一致させません。
--max-depth <depth>
コマンドラインで指定された<pathspec>ごとにディレクトリの最大<depth>レベルで降順させます。-1の値は制限がないことを意味します。<pathspec>にアクティブなワイルドカードが含まれている場合、このオプションは無視されます。つまり「a *」が「a *」という名前のディレクトリと一致する場合、「*」は文字通り一致するため、「-max-depth」は引き続き有効となります。
-r
--recursive
--recursive
--max-depth=-1
と同じです。これがデフォルトとなります。
--no-recursive
--max-depth=0
と同じです。
--max-depth=0
と同じです。-w
--word-regexp
--word-regexp
パターンは単語の境界でのみ一致します(ラインの先頭で開始するか、単語以外の文字が前に付きます。ラインの終わりで終わるか、単語以外の文字がそれに続きます)。
-v
--invert-match
--invert-match
一致しないラインを選択します。
-h
-H
-H
デフォルトではコマンドは一致するたびにファイル名を表示します。-h
オプションはこの出力を抑制するために使用されます。-H
は完全にするためであり、コマンドラインで前に指定した-h
を上書きする以外は何もしません。
--full-name
サブディレクトリから実行する場合、コマンドは通常、現在のディレクトリからの相対パスを出力します。このオプションはプロジェクトの最上位ディレクトリを基準にしてパスを強制的に出力します。
-E
--extended-regexp
-G
--basic-regexp
--extended-regexp
-G
--basic-regexp
パターンには「POSIX」拡張/基本正規表現を使用します。デフォルトでは基本的な正規表現を使用します。
-P
--perl-regexp
--perl-regexp
パターンにはPerl互換の正規表現を使用してください。
これらのタイプの正規表現のサポートはオプションのコンパイル時の依存関係となります。Gitがサポート付きでコンパイルされていない場合、このオプションを提供するとGitが停止します。
-F
--fixed-strings
--fixed-strings
パターンには固定文字列を使用します(パターンを正規表現として解釈しないでください)。
-n
--line-number
--line-number
一致するラインの前にライン番号をプレフィックスします。
--column
一致するラインの先頭から最初に一致する1インデックス付きバイトオフセットをプレフィックスします。
-l
--files-with-matches
--name-only
-L
--files-without-match
--files-with-matches
--name-only
-L
--files-without-match
一致したすべてのラインを表示する代わりに一致を含む(または含まない)ファイルの名前のみを表示します。「git diff」との互換性を高めるために、--name-only
は--files-with-matches
の同義語です。
-O[<pager>]
--open-files-in-pager[=<pager>]
--open-files-in-pager[=<pager>]
一致するファイルをページャーで開きます(「grep」の出力ではありません)。ポケットベルが「less」または「vi」であり、ユーザーが1つのパターンのみを指定した場合、最初のファイルは自動的に最初の一致に配置されます。pager
引数はオプションです。指定する場合、スペースなしでオプションに固定する必要があります。pager
が指定されていない場合、デフォルトのページャーが使用されます(git-config[1]のcore.pager
を参照)。
-z
--null
--null
出力のパス名の区切り文字として「\ 0」を使用し、逐語的に出力します。このオプションがないと、構成変数「core.quotePath」で説明されているように「異常な」文字を含むパス名が引用符で囲まれます(git-config[1]を参照)。
-o
--only-matching
--only-matching
一致するラインに一致する(空でない)部分のみを印刷し、そのような各部分を別々の出力ラインに印刷します。
-c
--count
--count
一致するすべてのラインを表示する代わりに、一致するラインの数を表示します。
--color[=<when>]
色付きの一致を表示します。値は常に(デフォルトで)「never」または「auto」である必要があります。
--no-color
構成ファイルがデフォルトでカラー出力としている場合、一致するハイライトをオフにします。--color=never
と同じです。
--break
異なるファイルからの一致の間に空のラインを印刷します。
--heading
表示されている各ラインの先頭ではなく、そのファイルの一致の上にファイル名を表示します。
-p
--show-function
--show-function
一致するラインが機能名自体でない限り、一致する機能名を含む前のラインを表示します。名前は「git diff」がパッチハンクヘッダーを処理するのと同じ方法で決定されます(gitattributes[5]でのカスタムハンクヘッダーの定義を参照)。
-<num>
-C <num>
--context <num>
-C <num>
--context <num>
<num>の先頭ラインと末尾ラインを表示し、--
を含むラインを連続する一致グループの間に配置します。
-A <num>
--after-context <num>
--after-context <num>
<num>の末尾ラインを表示し、--
を含むラインを連続する一致グループの間に配置します。
-B <num>
--before-context <num>
--before-context <num>
<num>の先頭ラインを表示し、--
を含むラインを連続する一致グループの間に配置します。
-W
--function-context
--function-context
機能名を含む前のラインから次の機能名の前のラインまでの周囲のテキストを表示し、一致が見つかった機能全体を効果的に示します。
--threads <num>
使用する「grep」ワーカースレッドの数です。詳細については「CONFIGURATION」のgrep.threads
を参照してください。
-f <file>
<file>から1ラインに1つずつパターンを読み取ります。
<file>を介してパターンをパスすると、「\ 0」を含む検索パターンを提供します。
すべてのパターンタイプが「\ 0」を含むパターンをサポートしているわけではありません。特定のパターンタイプがそのようなパターンをサポートできない場合、Gitはエラーとなります。「PCRE v2」バックエンドに対してコンパイルされた場合、--perl-regexp
パターンタイプはこれらのタイプのパターンを最も広くサポートしています。
2.23.0より前のバージョンのGitでは「\ 0」を含むパターンは黙って修正されたと見なされていました。これは決して文書化されていませんでした。例えば、「\ 0」と--ignore-case
を含む非ASCIIパターンの間で文書化されていない相互作用もありました。
将来のバージョンではより多くの検索バックエンドのために「\ 0」を含むパターンをサポートする可能性があります。それまでは問題のパターンタイプがそれらをサポートしない場合、機能しません。
-e
次のパラメータはパターンとなります。このオプションは-で始まるパターンに使用する必要があり、ユーザー入力を「grep」にパスするスクリプトで使用する必要があります。複数のパターンはまたはで結合されます。
--and
--or
--not
--or
--not
( … )
ブール式を使用して、複数のパターンを組み合わせる方法を指定します。--or
はデフォルトの演算オペレーターとなります。--and
は--or
よりも優先されます。-e
はすべてのパターンに使用する必要があります。
--all-match
--or
と組み合わせて複数のパターン式を指定する場合、このフラグを指定して、すべてに一致するラインがあるファイルに一致を制限します。
-q
--quiet
--quiet
一致したラインを出力しないようにしま。その代わりに一致する場合はステータス「0」で終了し、一致しない場合はステータスがゼロ以外で終了します。
<tree>…
ワークツリーで追跡されたファイルを検索する代わりに、指定されたツリーでブロブを検索します。
—
オプションの終了を通知します。残りのパラメーターは<pathspec>リミッターとなります。
<pathspec>…
指定されている場合、検索を少なくとも1つのパターンに一致するパスに制限します。両方の先行パスが一致し、「glob(7)」パターンがサポートされます。
<pathspec>シンタックスの詳細については「gitglossary[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
Documentation
内のファイルを除いて、solution
を探します。
スレッドに関する注記
--open-files-in-pager
が使用されている場合、--threads
オプション(および「grep.threads」構成)は無視され、シングルスレッドの実行がなされます。
オブジェクトストアをグレップする場合(--cached
またはツリーオブジェクトを指定)、--textconv
が指定され、テキスト変換が多すぎる場合、複数のスレッドで実行するとシングルスレッドよりもパフォーマンスが低下する可能性があります。したがって、この場合にパフォーマンスが低下する場合は、--threads=1
を使用することが望ましい場合があります。
GIT
git[1]パッケージソフトの一部