1. ホーム
  2. git

[解決済み] Git プロジェクトのすべてのブランチで「grep 検索」を実行することはできますか?

2022-04-24 17:54:36

質問

を実行することは可能ですか? git grep Git コントロールソースのプロジェクトのすべてのブランチの内部で?あるいは、他に実行するコマンドがあるのでしょうか?

解決方法は?

質問 " コミットされたコードをgitの履歴からgrep(検索)する方法は? "を推奨しています。

 git grep <regexp> $(git rev-list --all)

これはすべてのコミットを検索し、すべてのブランチを含むはずです。

別の形としては

git rev-list --all | (
    while read revision; do
        git grep -F 'yourWord' $revision
    done
)

さらに多くの例が この記事 :

git が引数のサイズについて文句を言うほど大きなプロジェクトで上記を試したので、もしこの問題に遭遇したら、以下のようなことを行ってください。

git rev-list --all | (while read rev; do git grep -e <regexp> $rev; done)

(この回答の最後のセクションの代替案を参照してください。)

必要であれば、それらの設定を忘れないでください。

# Allow Extended Regular Expressions
git config --global grep.extendRegexp true
# Always Include Line Numbers
git config --global grep.lineNumber true

このエイリアスも役に立ちます。

git config --global alias.g "grep --break --heading --line-number"


2016年8月更新 R.M. がコメントで推奨しています。

<ブロッククオート

を手に入れました&quot。 fatal: bad flag '->' used after filename を試したところ git branch バージョンに変更しました。このエラーは HEAD というエイリアシング表記があります。

を追加することで解決しました。 sed '/->/d' の間にあるパイプで trxargs コマンドを使用します。

 git branch -a | tr -d \* | sed '/->/d' | xargs git grep <regexp>

ということです。

alias grep_all="git branch -a | tr -d \* | sed '/->/d' | xargs git grep"
grep_all <regexp>

これは、解決策を改善するものです。 チェルニー がありました。 提案された ということです。 git rev-list --all はやりすぎです。

より洗練されたコマンドにすることができます。

# Don't use this, see above
git branch -a | tr -d \* | xargs git grep <regexp>

これにより、ブランチ(リモートブランチを含む)のみを検索することができます。

<ブロッククオート

bash/zshのエイリアスを作成することもできます。

# Don't use this, see above  
alias grep_all="git branch -a | tr -d \* | xargs git grep"
grep_all <regexp>