web-dev-qa-db-ja.com

GitHubでコミットメッセージを検索するにはどうすればいいですか?

Gitリポジトリの ではなく ではなく、 GitHub の中で - 具体的には - どうすれば特定のリポジトリ/ブランチのコミットメッセージだけを検索できますか?

313
ripper234

2017年現在、 GitHub自体に含まれている機能です

彼らが使用している検索例はrepo:torvalds/linux merge:false crypto policyです。

enter image description here からのGIF https://github.com/blog/2299-search-commit-messages

58
vartec

以前はこれが可能でしたが、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. 
202
dsldsl

更新(2017/01/05):
Githubは、あなたが自分のUI内からコミットメッセージ内を検索できるようにするアップデートを公開しました。詳しくは、 ブログ投稿 をご覧ください。


私は同じ質問をし、昨日誰か@Githubに連絡しました。

検索エンジンをElasticSearchに切り替えたため、Github UIを使用してコミットメッセージを検索することはできません。しかし、その機能はチームのウィッシュリストにあります。

残念ながら、その機能のリリース日は今のところありません。

132
oktopus

簡単に言うと、github.comのWebサイトで直接コミットメッセージを検索することはできません。当分の間、このスレッドに関する他の人が提案したローカルのgit grep解決策をお勧めします。

ある時点で、GitHubは単一のリポジトリに対してコミットメッセージをgit grepスタイルで検索することを提案しました。残念ながら、このアプローチではファイルサーバーにアクセスできないサービス拒否攻撃が行われました。このため、git grep検索を削除しました。

現在の予想外の見積もりでは、GitHubでのコミット数は約800億マークに上ると推定されています。 Googleのエンジニアは私たちの背後で笑っていますが、これはElasticSearchに保存するためのかなり多数のドキュメントです。このデータセットを検索可能にしたいのですが、それは簡単なプロジェクトではありません。

56
TwP

これはGitHubから削除されました。私が使う:

$git log --all --oneline | grep "search query"

enter image description here

作者でフィルタすることもできます。

$git log --all --oneline --author=rickhanlonii | grep "search query"
44
Rick Hanlon II

コードを検索する ヘルプページ から、これはまだ不可能なようです。

検索するファイルやパスを選択する機能を含め、リポジトリ内のテキストを検索できますが、コミットで検索することを指定することはできません。

たぶん これを彼らに示唆します

21
Jon Cairns

これは、Googleによってクロールされたリポジトリを使用して実行できます(結果はリポジトリごとに異なります)。

クロールされたすべてのリポジトリのすべてのブランチで "ライセンスの変更"を検索します。

「ライセンス変更」サイト: https://github.com/*/*/commits

クロールされたすべてのリポジトリの「ライセンスの変更」の検索マスターブランチ

「ライセンス変更」サイト: https://github.com/*/*/commits/master

クロールされたすべてのTwitterリポジトリの「変更ライセンス」でマスターブランチを検索

「ライセンス変更」サイト: https://github.com/Twitter/*/commits/master

Twitter/some_projectリポジトリのすべてのブランチで "ライセンスの変更"を検索してください。

「ライセンス変更」サイト: https://github.com/Twitter/some_project/commits

19
technosaurus

2017年1月に更新 (2年後):

コミットメッセージを検索できます。 (それでもマスターブランチのみ)

https://cloud.githubusercontent.com/assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


2015年2月: Elasticsearch (1月に導入 に基づく)に基づく現在の検索インフラストラクチャを考慮すると、これが可能になる可能性があることはわからない2013 )。

GitHubでElasticsearchの紹介を担当したGitHub関係者との インタビュー「信頼できるおよび/または公式の情報源から引き出す」という回答として、 (8月) 2013)

Tim Pease:そこには2つのドキュメントタイプがあります。1つはソースコードファイル、もう1つはソースコードファイルです。一つはリポジトリです。 gitが機能する方法は、あなたがコミットを持っていて、コミットごとにブランチがあるということです。リポジトリ文書は、インデックス付けされた特定のリポジトリに対する最新のコミットを追跡します。ユーザーが新しいコミットをGithubにプッシュしたら、次にそのリポジトリ文書をelasticsearchから取得します。それから最後にインデックスが作成されたコミットを見てから、この最近のPushと以前にインデックスを作成したものとの間に変更、追加、または削除されたすべてのファイルのリストを取得します。それから先に進み、変更された文書を更新するだけです。誰かがプッシュするたびにソースコードツリー全体を再インデックス付けする必要はありません。

Andrew Cholakian:だから、あなただけがインデックスを付けます、私はマスターブランチだと思います。

Tim Pease:その通りです。それはあなたがそこに入ることになるのはマスターブランチの頭だけです、それでもまだそれはたくさんのデータ、20億文書、30テラバイトです。

Andrew Cholakian:それは実に巨大です。

[...]

Tim Pease:Pushのソースコードの索引付けでは、自己修復プロセスです。
最後のインデックス付きコミットを追跡するリポジトリ文書があります。失敗した場合、それらの仕事が失敗する3つのコミット、次のコミット、を見逃しても、前回のインデックス作成と今回の新しいPushで発生しているコミットとの違いを調べています。
git diffを実行すると、更新、削除、または追加されたすべてのファイルが手に入ります。あなたはただ言うことができます。さて、私たちはこれらのファイルを削除する必要があります。これは自己修復的なものであり、これが私たちが採用したアプローチのほとんどすべてのアーキテクチャに当てはまります。

すべてがすべての分岐すべてがそのアプローチで索引付けされることを意味するわけではありません。
グローバルコミットメッセージの検索は現在のところ利用できません。
そして Tim Pease自身がコミットメッセージがインデックスされていないことを確認します

ローカルクローンの独自のelasticsearchローカルインデックスを取得することは不可能ではないことに注意してください。「 ElasticSearchを使ったgitリポジトリの検索 」を参照してください。

しかし、特定のリポジトリでは、クローンを作成して次の操作を実行するのが最も簡単な方法です。

git log --all --grep='my search'

( " コミットメッセージでGitリポジトリを検索するにはどうすればいいですか? ")。

14
VonC

これはGithubから削除されたので、これを行うためにLinuxでgitkを使用しています。

端末からリポジトリに行き、gitkと入力してください。

Guiの真ん中には、検索ボックスがあります。それはフィルタの良い選択を提供します。

search bar

スコープ - 包含、パスの変更、文字列の追加/削除、行の一致の変更

マッチタイプ - 完全/無視/正規表現

検索フィールド - すべてのフィールド/見出し/コメント/コミッター

7
Kirk

Githubが機能を追加するまで、これはEclipse内からうまく機能します。

enter image description here

https://wiki.Eclipse.org/EGit/User_Guide#Searching_for_commits

6
chrismarx

もしあなたがUbuntu(あるいはおそらく他のUnix OS)で作業していてローカルバージョンのレポを持っているのなら、あなたの検索語にマッチするすべてのコミットに対して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が消費される可能性があることに注意してください。)

私はUbuntuでこれをテストしただけで、これが他のUnixベースのOS上で動作するかどうかを知るのに十分なシェルスクリプトについて知りません - 特にここで使ったものがBash特有かどうかわかりません。互換性情報を追加するには、コメントするか編集してください。

4
Mark Amery

2019年中頃の時点で、左上の検索ボックスに検索したいものをすべて入力してから、[コミット]をクリックします。

enter image description here

0
M3RS