git-grep

コマンド名

「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

バイナリファイルをテキストであるかのように処理します。

--textconv

テキストコンバージョンフィルター設定を優先します。

--no-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.quotePath」で説明されているように「異常な」文字を含むパス名が引用符で囲まれます(git-config[1]を参照)。

-o
--only-matching

一致するラインに一致する(空でない)部分のみを印刷し、そのような各部分を別々の出力ラインに印刷します。

-c
--count

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

--color[=<when>]

色付きの一致を表示します。値は常に(デフォルトで)「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

機能名を含む前のラインから次の機能名の前のラインまでの周囲のテキストを表示し、一致が見つかった機能全体を効果的に示します。

--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はデフォルトの演算オペレーターとなります。--and--orよりも優先されます。-eはすべてのパターンに使用する必要があります。

--all-match

--orと組み合わせて複数のパターン式を指定する場合、このフラグを指定して、すべてに一致するラインがあるファイルに一致を制限します。

-q
--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 \)

#defineMAX_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]パッケージソフトの一部

git公式ドキュメント

grep