git grep を使う

2017年10月24日

git grep のオプションのまとめ記事です。

基本的な使い方

だいたい次のようにコマンドを与えれば良く、以下でピックアップして説明します。

git grep [<オプション>] <検索パターン> [<検索する場所>] [[--] <pathspec>]

オプション

ここでは知っていたら便利かもしれないものだけ取り上げます。

オプション 意味
-p または --show-function ヒットした行の前にある関数名を出力する
-C <num> ヒットした行の前後数行を出力する
--break --heading ヒットしたファイルのファイル名と、ヒットした行とを別々に出力する
-F 正規表現ではなく、素の文字列として検索する
-E 拡張正規表現として検索する

検索パターンの指定

オプション 意味
-e <pattern> 検索する文字列を指定する。複数指定した場合、いずれかにマッチするものを出力する。
--and, --or, --not, '(', ')' 複合検索。カッコはシェルで特別の意味を持たないようにエスケープすること。例えば、

git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)

検索する場所の指定

オプション 意味
デフォルト リポジトリに追加されているファイルの working tree を対象とする。
working tree を変更を加えている場合、リポジトリにコミットされている変更前の内容ではなく、変更された内容が検索対象になる。
リポジトリに追加されていないファイルは、対象にならない。
--cached working tree の代わりに index を検索する。
--untracked リポジトリに追加されていないファイルも対象にする。
.gitignore などで無視対象になっているものは除く。
--no-exclude-standard --untracked リポジトリに追加されていないファイルも対象にする。
.gitignore などで無視対象になっているものも含む。
--no-index gitの管理情報を使用しない。.git ディレクトリが存在しないようなディレクトリでも実行できる。
リビジョン (正確には <tree>) 指定したリビジョンのファイルを対象とする。–cached, –untracked, –no-index は指定できない。

検索するファイルの限定

pathspec を指定できます。シェルで展開されないように、シングルクォートで囲むと良いです。

指定方法 意味
'foo/bar/*.c' foo/bar 以下(サブティレクトリを含む)の *.c にマッチする(working direcutory からの相対パス)
':/foo/bar/*.c'
':/:foo/bar/*.c'
上と同様だが、リポジトリトップからのパス
':!hoge'
':!:hoge'
':(exclude)hoge'
hoge にマッチするものは除外する

Tags

About Author

koto

Leave a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Recent Comments

Social Media