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