355

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

4

14 に答える 14

215

以前はこれを行うことができましたが、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.
于 2013-10-23T19:59:26.910 に答える
21

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

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

多分これを彼らに提案しますか?

于 2013-08-08T09:42:39.463 に答える
19

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

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

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

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

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

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

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

「ライセンスの変更」について、twitter/some_project リポジトリのすべてのブランチを検索します。

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

于 2015-04-17T22:52:59.847 に答える
18

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

コミット メッセージを検索できるようになりました。(まだ master ブランチのみ)

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


2015 年 2 月: 現在のElasticsearchベースの検索インフラストラクチャ ( 2013 年 1 月に導入)を考慮すると、それが可能かどうかはわかりません。

「信頼できる情報源や公式情報源からの引用」という回答として、GitHub で Elasticsearch の導入を担当している GitHub 担当者へのインタビュー(2013 年 8 月)を次に示します。

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

Andrew Cholakian:ということで、皆さんは master ブランチだけをインデックスしていると思います。

ティム・ピーズ: そうですね。そこにアクセスするのは master ブランチの先頭だけですが、それでも大量のデータ、20 億のドキュメント、30 テラバイトです。

アンドリュー・チョラキアン: それはとてつもなく巨大です。

[...]

Tim Pease: プッシュ時にソース コードのインデックスを作成すると、自己修復プロセスになります。
最後にインデックスが作成されたコミットを追跡するリポジトリ ドキュメントがあります。失敗した場合は、ジョブが失敗した 3 つのコミットを逃しただけで、次のコミットが行われました。インデックスを作成した以前のコミットと、この新しいプッシュで表示されているコミットとの差分をまだ確認しています。
agit diffを実行すると、更新、削除、または追加されたすべてのファイルが取得されます。「これらのファイルを削除する必要があります。これらのファイルなどを追加する必要があります。」それは自己修復であり、それがほとんどすべてのアーキテクチャで採用されているアプローチです。

つまり、すべてのレポのすべてのブランチがそのアプローチでインデックス化されるわけではありません。 現在、グローバル コミット メッセージ検索は利用できません。 また、Tim Pease 自身も、コミット メッセージがインデックス化されていないことを確認しています。

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

ただし、特定のレポの場合、最も簡単なのは、それを複製して次のことを行うことです。

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

(「コミット メッセージで Git リポジトリを検索する方法」のその他のオプション)

于 2015-02-13T06:37:30.303 に答える
4

リポジトリのローカル バージョンをお持ちの場合は、私が書いたこの大まかなシェル スクリプトを試して、デフォルト ブラウザの新しいタブで検索用語に一致するすべてのコミットの 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/リポジトリの実際の G​​itHub 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 を消費する可能性があることに注意してください。)

于 2014-01-01T22:22:03.433 に答える