Gitリポジトリのブランチと履歴を検索するためのツール

Gitリポジトリのブランチと履歴を検索するためのツール

私は、ファイル名とファイルの内容(find/など)に基づいてgrepGitリポジトリからファイルを検索できるツールやスクリプトの提案を探しています。現在チェックアウトされているブランチ内で検索できるだけでなく、そのブランチだけでなく他のブランチの履歴も検索できる必要があります。

私が持っているGitリポジトリの非常に具体的な例はチェックアウトです。dspinellis 'unix-history-repo。私はしばしば物事の過去の実装を見つけるためにそこで探していますが、しばしば必要なので、ファイルを追跡するのは痛いです。推測するどのブランチがあるかを確認する必要があります(このリポジトリには165のブランチがあります)。

このツールを使用して実行する操作の例あるwowコマンドを探す、初期BSD Unixの一部として存在する場合(存在する場合)、外部コマンドshまたは組み込みコマンドのいずれかです。cshこれを行うには、dspinellis Gitリポジトリの165分岐で、wow.*ファイル名パターンと特定の時点でC関数を含めることができるファイルを検索したいと思いました。wow

答え1

ハハ、私も何をしたのかを見てください...

私が使用するすべてのブランチでファイル名を見つけるには

git log --all --name-only --pretty=format:%H -- wow\*

wowどのグローブでも交換可能です。これはUnixの履歴ストアでかなり速く実行されます。フォーマットには一致するファイルが生成されたハッシュ値が表示されるため、この時点でツリーを調べてより詳細にナビゲートできます。

すべてのポイントでファイルの内容を取得するには、次のようにします。

git rev-list --all | xargs git grep "excited too"

すべてのコミットオブジェクトを一覧表示して検索します。 Unix 履歴ストアでは非常に遅いです。すべてのブランチをリストし、そこからgrepする方が高速です。

git grep "excited too" $(git branch -r | awk '{print $1}')

関連情報