ないのGitリポジトリ内ではなく、中のGitHub特に-どのように私は、特定のリポジトリ/ブランチのコミットメッセージを検索するには?
ないのGitリポジトリ内ではなく、中のGitHub特に-どのように私は、特定のリポジトリ/ブランチのコミットメッセージを検索するには?
回答:
彼らが使用する検索例は次のとおりです。 repo:torvalds/linux merge:false crypto policy
以前はこれを行うことができましたが、GitHubは2013年半ばのある時点でこの機能を削除しました。これをローカルで実現するには、次のようにします。
git log -g --grep=STRING
(-g
他のブランチやダングリングコミットを検索する場合は、フラグを使用します。)
-g, --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from
the most recent one to older ones.
-g
最も一般的な使用例では、フラグを省略します。私はこれについてあまり詳しく調べていませんが、を使用する-g
と、検索は1か月しか遡らないようです。git log -g --grep=fix
しながら、develop
2年間にわたる〜8000回のコミットを持っているレポの枝だけにまでさかのぼる2月2と行く
-g
フラグを付けて少なくとも5か月前のコミットを見つけることができました。
アップデート(2017/01/05):
GitHubが更新を公開し、UI内からコミットメッセージ内を検索できるようになりました。詳細については、ブログ投稿を参照してください。
同じ質問があり、昨日GitHubに連絡しました:
検索エンジンをElasticsearchに切り替えたため、GitHub UIを使用してコミットメッセージを検索することはできません。しかし、その機能はチームのウィッシュリストにあります。
残念ながら、現時点ではその機能のリリース日はありません。
簡単に言えば、github.com Webサイトでコミットメッセージを直接検索することはできません。当面はgit grep
、このスレッドの他のユーザーが提案したローカルソリューションをお勧めします。
ある時点で、GitHubはgit grep
単一のリポジトリのコミットメッセージに対してスタイル検索を提供していました。残念ながら、このアプローチにより、ファイルサーバーにアクセスできなくなる可能性のあるサービス拒否攻撃が行われました。このため、git grep
検索を削除しました。
現在の推定値では、GitHubでのコミット数は800億マーク前後と推定されています。Googleのエンジニアは後ろで笑いますが、これはElasticSearchに保存するかなり大量のドキュメントです。このデータセットを検索可能にしたいのですが、簡単なプロジェクトではありません。
これはGitHubから削除されました。私が使う:
$git log --all --oneline | grep "search query"
著者でフィルタリングすることもできます。
$git log --all --oneline --author=rickhanlonii | grep "search query"
コード検索のヘルプページから、これはまだ可能ではないようです。
検索するファイルまたはパスを選択する機能を含め、リポジトリ内のテキストを検索できますが、コミットで検索するように指定することはできません。
多分これを彼らに提案しますか?
これは、Googleによってクロールされたリポジトリを使用して実行できます(結果はリポジトリによって異なります)。
「ライセンスの変更」サイト:https : //github.com/*/*/commits
「ライセンスの変更」サイト:https : //github.com/*/*/commits/master
「ライセンスの変更」サイト:https : //github.com/twitter/*/commits/master
「ライセンスの変更」サイト:https : //github.com/twitter/some_project/commits
2017年1月の更新(2年後):
コミットメッセージを検索できるようになりました!(まだmasterブランチのみ)
2015年2月:Elasticsearchに基づく現在の検索インフラストラクチャベース(2013年1月に導入)を考慮すると、それが可能かどうかはわかりません)を。
「信頼できるソースまたは公式ソースから引き出す」ための回答として、GitHubでElasticsearchを導入する担当のGitHub担当者へのインタビューを示します(2013年8月)
Tim Pease:そこには2つのドキュメントタイプがあります。1つはソースコードファイルで、もう1つはリポジトリです。gitが機能する方法は、コミットがあり、コミットごとにブランチがあることです。リポジトリドキュメントは、インデックスが付けられた特定のリポジトリの最新のコミットを追跡します。ユーザーが新しいコミットをGithubにプッシュすると、そのリポジトリドキュメントがelasticsearchからプルされます。次に、最後にインデックス化されたコミットを確認し、この最近のプッシュと以前にインデックス化したものとの間に変更、追加、または削除されたすべてのファイルのリストを取得します。次に、変更されたドキュメントを更新します。誰かがプッシュするたびに、ソースコードツリー全体のインデックスを再作成する必要はありません。
Andrew Cholakian:つまり、皆さんはインデックスのみを作成していると思います。
Tim Pease:正解です。そこに入るのはmasterブランチのヘッドだけですが、それでも大量のデータ、20億のドキュメント、30テラバイトです。
Andrew Cholakian:それはものすごく巨大です。
[...]
Tim Pease:プッシュでソースコードのインデックスを作成すると、それは自己修復プロセスになります。
最後にインデックス付けされたコミットを追跡するリポジトリドキュメントがあります。失敗した場合、たまたまこれらのジョブが失敗する3つのコミット、つまり次のコミットが失敗した場合でも、インデックスに登録した以前のコミットと、この新しいプッシュで確認したコミットとの差異を調べています。
実行するgit diff
と、更新、削除、または追加されたすべてのファイルが取得されます。「さて、これらのファイルを削除する必要があります。これらのファイルをすべて追加する必要があります。」これは自己修復機能であり、これがほとんどすべてのアーキテクチャで採用したアプローチです。
つまり、すべてのリポジトリのすべてのブランチがそのアプローチでインデックス付けされるわけではありません。
現在、グローバルコミットメッセージ検索は利用できません。
そしてティム・ピース自身も、コミット・メッセージが索引付けされていないことを確認しています。
ローカルクローンの独自のelasticsearchローカルインデックスを取得することは不可能ではないことに注意してください。「ElasticSearchによるgitリポジトリの検索」を参照してください。
しかし、特定のレポについては、それを複製して以下を実行するのが最も簡単です。
git log --all --grep='my search'
(「コミットメッセージでGitリポジトリを検索する方法」のその他のオプション?)
これは、GitHubが機能を追加するまで、Eclipse内からうまく機能します。
リポジトリのローカルバージョンがある場合は、デフォルトのブラウザーの新しいタブで、検索用語に一致するすべてのコミットのGitHubページを開くために私が書いた次の粗雑なシェルスクリプトを試してみるとよいでしょう。
#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done
https://github.com/RepoOwnerUserName/RepoName/
リポジトリの実際のGitHub URLに置き換えて、スクリプトをどこかに保存し(例:としてgithubsearch.sh
、実行可能(chmod +x githubsearch.sh
)にして)、次のエイリアスを~/.bashrc
ファイルに追加します。
alias githubsearch='/path/to/githubsearch.sh'
次に、Gitリポジトリの任意の場所から、ターミナルでこれを実行します。
githubsearch "what you want to search for"
(大文字と小文字を区別しない)検索用語に一致するコミットでは、対応するGitHubページがブラウザーで開かれます。(検索用語が数百のコミットに表示される場合、これはブラウザをクラッシュさせ、しばらくの間PCのCPUを消費する可能性があることに注意してください。)