Wie kann ich auf GitHub nach einer Commit-Nachricht suchen?

328

Nicht in einem Git-Repository , sondern speziell in GitHub - wie suche ich nur die Commit-Nachrichten eines bestimmten Repositorys / Zweigs?

ripper234
quelle
3
Ist das Repo öffentlich oder privat?
2
Wie wäre es mit der Suche nach Commit-Nachrichten in allen Gabeln? Versuchen Sie zu vermeiden, das Rad neu zu erfinden, wenn das Hauptlager über 100 Gabeln hat!
Daniel Sokolowski
Irgendwelche Änderungen seitdem?
Pavel Šimerda
Ich möchte die Netzwerk- Commits
durchsuchen

Antworten:

68

Ab 2017 ist es eine Funktionalität, die in GitHub selbst enthalten ist .

Die von ihnen verwendete Beispielsuche ist repo:torvalds/linux merge:false crypto policy

Geben Sie hier die Bildbeschreibung ein GIF-Bild von https://github.com/blog/2299-search-commit-messages

vartec
quelle
Ich erhalte einen Berechtigungsfehler bei der Suche nach einem privaten Repo, auf das ich Lese- / Schreibzugriff habe.
anon58192932
1
Ich habe fünf Minuten lang zugesehen und kann nicht herausfinden, wohin die Maus geht, nachdem sie nach unten und rechts gezoomt hat.
Kevin Krumwiede
1
@ KevinKrumwiede wahrscheinlich auf die Schaltfläche "Aufnahme beenden" haha
Corey Cole
Ich gab auf und benutzte "git log --all --grep = searhterm"
Edwin Evans
206

Früher war dies möglich, aber GitHub hat diese Funktion Mitte 2013 entfernt. Um dies lokal zu erreichen, können Sie Folgendes tun:

git log -g --grep=STRING

(Verwenden Sie die -gFlagge, wenn Sie andere Zweige und baumelnde Commits durchsuchen möchten.)

-g, --walk-reflogs
    Instead of walking the commit ancestry chain, walk reflog entries from
    the most recent one to older ones.
dsldsl
quelle
143
Warum zum Teufel haben sie es entfernt? Das ist eine sehr hilfreiche Funktion.
Josh Brown
1
Factor Mystic: I.want.spaces.in.this.string reicht normalerweise aus.
dbrower
11
Tipp Lassen Sie das -gFlag für die meisten Anwendungsfälle weg. Ich habe nicht zu viel darüber nachgedacht, aber mit -gscheint die Suche nur einen Monat zurück zu gehen. git log -g --grep=fixwährend in der developFiliale eines Repos, das ~ 8000 Commits über zwei Jahre hat, nur bis zum 2. Februar zurückreicht.
Dan Dascalescu
1
@DanDascalescu Seltsam, ich konnte Commits finden, die mindestens 5 Monate mit der -gFlagge zurückreichen .
Chrispy
134

Update (05.01.2017):

GitHub hat ein Update veröffentlicht, mit dem Sie jetzt in Commit-Nachrichten über die Benutzeroberfläche suchen können. Weitere Informationen finden Sie im Blog-Beitrag .


Ich hatte die gleiche Frage und kontaktierte gestern jemanden GitHub:

Da sie ihre Suchmaschine auf Elasticsearch umgestellt haben, ist es nicht möglich, über die GitHub-Benutzeroberfläche nach Commit-Nachrichten zu suchen. Diese Funktion steht jedoch auf der Wunschliste des Teams.

Leider gibt es derzeit kein Veröffentlichungsdatum für diese Funktion.

oktopus
quelle
7
+1 Sie haben mir in GitHub fruchtlose Zeit gespart und sich gefragt, wie ich das erreichen kann, was ich für eine offensichtliche Funktionalität gehalten habe. Also müssen wir jetzt das Repo lokal klonen, um stattdessen über die Kommandozeile zu grep. Meine Güte, das ist ein Fortschritt, oder?! ;)
McNab
68
Selbst die erweiterte Suche in der Web-Benutzeroberfläche ermöglicht keine Suche nach dem wichtigsten Feld - der eigentlichen Festschreibungsnachricht. Das ist absolut lächerlich IMO. Github bringt dich zusammen!
Brad Thomas
22
Ja. Vergessen Sie die Tatsache, dass sie einen Webdienst erstellt haben, der dazu beiträgt, Open Source-Software zu revolutionieren und bekannt zu machen. Die Tatsache, dass sie diese eine Funktion nicht haben, macht sie zu einem völligen Betrug!
Jon Cairns
12
Vielen Dank, dass Sie sich die Zeit genommen haben, den Inhalt Ihres Diskurses mit GitHub an einem leicht auffindbaren öffentlichen Ort zu veröffentlichen. Es ist absurd, dass dies der einzige Weg für die Öffentlichkeit ist, solche Informationen zu erhalten - es ist zutiefst dumm für GitHub, keinen öffentlichen Issue-Tracker zu haben -, aber angesichts dieser Dummheit ist das, was Sie hier getan haben, ein nützlicher Weg, um Hunderte von Informationen zu verhindern andere verschwenden Zeit damit, dieselbe Anfrage einzusenden. Vielen Dank für die Hunderte von Arbeitsstunden Produktivität, die Sie gespart haben.
Mark Amery
1
Nun, nicht viel besser als Atlasians öffentlicher Tracker, der voll von 7 Jahre alten offenen Ausgaben mit Tausenden von Upvotes ist ...
Askdesigners
58

Die kurze Antwort lautet: Sie können Commit-Nachrichten nicht direkt auf der Website github.com suchen. Vorerst empfehlen wir den Einheimischengit grep Lösung, die andere in diesem Thread vorgeschlagen haben.

Zu einem bestimmten Zeitpunkt bot GitHub eine git grepStilsuche über Commit-Nachrichten für ein einzelnes Repository an. Leider hat dieser Ansatz einen Denial-of-Service aufgedeckt, der einen Dateiserver unzugänglich machen könnte. Aus diesem Grund haben wir entferntgit grep Suche .

Nach aktuellen Schätzungen auf der Rückseite des Umschlags liegt die Anzahl der Commits in GitHub bei etwa 80 Milliarden. Obwohl Google-Ingenieure hinter unserem Rücken lachen, ist dies eine ziemlich große Anzahl von Dokumenten, die in ElasticSearch gespeichert werden müssen. Wir würden diesen Datensatz gerne durchsuchbar machen, aber es ist kein triviales Projekt.

TwP
quelle
2
+1. Das scheint zu bestätigen, was ich dachte, als ich meine Antwort schrieb : Festschreibungsnachrichten sind nicht indiziert: Sie arbeiten mit der Indizierung git diff's(dh dem Inhalt der
Festschreibungen
Wie wäre es einfach mit "Jump to Commit" -Button? Derzeit ist es über die URL - stackoverflow.com/a/12214817/817632 zugänglich, aber es gibt keine Schnittstelle dafür (nicht die ich kenne). Anwendungsfall - Suchen Sie irgendwo in bower.json anstelle der Version einen Commit-Hash und möchten Sie sehen, was dieser Commit genau bewirkt. Es wird einige Zeit beim Googeln sparen.
Olga
44

Dies wurde von GitHub entfernt. Ich benutze:

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

Geben Sie hier die Bildbeschreibung ein

Sie können auch nach Autor filtern:

$git log --all --oneline --author=rickhanlonii | grep "search query"
Rick Hanlon II
quelle
3
Dies funktionierte für mich, aber die am besten bewertete Antwort tat es nicht.
Makdad
21

Auf der Hilfeseite zum Suchen von Code scheint dies noch nicht möglich zu sein.

Sie können in Ihrem Repository nach Text suchen, einschließlich der Möglichkeit, Dateien oder Pfade für die Suche auszuwählen. Sie können jedoch nicht angeben, dass Sie in Commits suchen möchten.

Vielleicht ihnen das vorschlagen ?

Jon Cairns
quelle
18
Dies scheint der "Standard" -Anwendungsfall zu sein, wenn es darum geht, ein Repo zu durchsuchen. Besonders für jemanden, der ein neues Repository mit unzähligen Commits kennenlernt. Sie sollten auf jeden Fall in Betracht ziehen, dies hinzuzufügen.
Jose Browne
19

Sie können dies mit Repositorys tun, die von Google gecrawlt wurden (Ergebnisse variieren von Repository zu Repository).

Durchsuchen Sie alle Zweige aller gecrawlten Repositorys nach "Lizenz ändern".

Website "Lizenz ändern": https://github.com/*/*/commits

Durchsuchen Sie den Hauptzweig aller gecrawlten Repositorys nach "Lizenz ändern":

Website "Lizenz ändern": https://github.com/*/*/commits/master

Durchsuchen Sie den Hauptzweig aller gecrawlten Twitter-Repositorys nach "Lizenz ändern".

Website "Lizenz ändern": https://github.com/twitter/*/commits/master

Durchsuchen Sie alle Zweige des Twitter / some_project-Repositorys nach "Lizenz ändern".

Website "Lizenz ändern": https://github.com/twitter/some_project/commits

Technosaurus
quelle
4
@DZenBot Wenn es sich nicht um ein öffentliches Repo handelt, haben Sie wahrscheinlich bereits eine lokale Kopie für git grep. Ich habe diese Antwort nur für diejenigen bereitgestellt, die kein ganzes öffentliches Repo klonen möchten, um herauszufinden, wann eine Änderung vorgenommen wurde. Ich benutze es meistens, um Commits zu finden, die die Unterstützung für ältere GTK-Versionen entfernen oder wenn Lizenzen auf gpl3 geändert werden
Technosaurus
15

Update Januar 2017 (zwei Jahre später):

Sie können jetzt nach Commit-Nachrichten suchen ! (immer noch nur in der Hauptniederlassung)

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


Februar 2015: Ich bin mir nicht sicher, ob dies angesichts der aktuellen Basis der Suchinfrastruktur auf Elasticsearch (eingeführt im Januar 2013) jemals möglich sein könnte ) .

Als Antwort "aus glaubwürdigen und / oder offiziellen Quellen" hier ein Interview mit den GitHub-Mitarbeitern, die für die Einführung von Elasticsearch bei GitHub verantwortlich sind (August 2013).

Tim Pease : Wir haben zwei Dokumenttypen: Einer ist eine Quellcodedatei und der andere ist ein Repository. Git funktioniert so, dass Sie Commits haben und für jedes Commit einen Zweig haben. Repository-Dokumente verfolgen das letzte Commit für das jeweilige indizierte Repository. Wenn ein Benutzer ein neues Commit an Github weiterleitet, ziehen wir dieses Repository-Dokument aus elasticsearch. Wir sehen dann das zuletzt indizierte Commit und erhalten dann eine Liste aller Dateien, die zwischen diesem letzten Push und dem, was wir zuvor indiziert haben, geändert, hinzugefügt oder gelöscht wurden. Dann können wir einfach die geänderten Dokumente aktualisieren. Wir müssen nicht jedes Mal, wenn jemand pusht, den gesamten Quellcodebaum neu indizieren.

Andrew Cholakian: Ich nehme an , ihr indiziert nur den Hauptzweig.

Tim Pease: Richtig. Es ist nur der Leiter der Hauptniederlassung, den Sie dort erreichen werden, und das sind immer noch viele Daten, zwei Milliarden Dokumente, 30 Terabyte.

Andrew Cholakian: Das ist unglaublich groß.

[...]

Tim Pease: Wenn der Quellcode auf Push indiziert wird, ist dies ein Selbstheilungsprozess.
Wir haben dieses Repository-Dokument, das den letzten indizierten Commit verfolgt. Wenn wir es verpasst haben, verpassen wir zufällig drei Commits, bei denen diese Jobs fehlschlagen. Beim nächsten Commit sehen wir uns immer noch den Unterschied zwischen dem vorherigen Commit, den wir indiziert haben, und dem, den wir bei diesem neuen Push sehen.
Sie führen eine aus git diffund erhalten alle Dateien, die aktualisiert, gelöscht oder hinzugefügt wurden. Sie können einfach sagen: „Okay, wir müssen diese Dateien entfernen. Wir müssen diese Dateien und all das hinzufügen. “ Es ist selbstheilend und das ist der Ansatz, den wir bei so ziemlich der gesamten Architektur gewählt haben.

Das alles bedeutet, dass nicht alle Zweige des gesamten Repos mit diesem Ansatz indiziert würden.
Eine globale Suche nach Commit-Nachrichten ist derzeit nicht verfügbar.
Und Tim Pease selbst bestätigt, dass Commit-Nachrichten nicht indiziert sind .

Beachten Sie, dass es nicht unmöglich ist, eine eigene lokale Elasticsearch-Indizierung eines lokalen Klons zu erhalten: siehe " Durchsuchen eines Git-Repositorys mit ElasticSearch "

Für ein bestimmtes Repo bleibt es jedoch am einfachsten, es zu klonen und Folgendes zu tun:

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

(Weitere Optionen unter " So suchen Sie ein Git-Repository nach Commit-Nachricht? ")

VonC
quelle
7

Da dies aus GitHub entfernt wurde, verwende ich dies unter gitkLinux.

Gehen Sie vom Terminal zu Ihrem Repository und geben Sie ein gitk.

In der Mitte der GUI befindet sich ein Suchfeld. Es bietet eine gute Auswahl an Filtern:

Suchleiste

Bereich - Pfade enthalten, berühren, Zeichenfolge hinzufügen / entfernen, Zeilenübereinstimmung ändern

Übereinstimmungstyp - Exact / IgnCase / Regexp

Suchfelder - Alle Felder / Überschrift / Kommentare / Committer

Kirche
quelle
4

Wenn Sie eine lokale Version des Repositorys haben, können Sie dieses grobe Shell-Skript ausprobieren, das ich geschrieben habe, um die GitHub-Seiten für alle Commits zu öffnen, die Ihrem Suchbegriff entsprechen, und zwar in neuen Registerkarten in Ihrem Standardbrowser:

#!/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

Ersetzen Sie einfach durch https://github.com/RepoOwnerUserName/RepoName/die tatsächliche GitHub-URL Ihres Repositorys, speichern Sie das Skript irgendwo (z. B. als githubsearch.sh, machen Sie es ausführbar ( chmod +x githubsearch.sh) und fügen Sie dann den folgenden Alias ​​zu Ihrer ~/.bashrcDatei hinzu:

alias githubsearch='/path/to/githubsearch.sh'

Führen Sie dann von überall in Ihrem Git-Repository aus Folgendes am Terminal aus:

githubsearch "what you want to search for"

Bei Commits, die Ihrem Suchbegriff (ohne Berücksichtigung der Groß- und Kleinschreibung) entsprechen, werden die entsprechenden GitHub-Seiten in Ihrem Browser geöffnet. (Seien Sie gewarnt, dass wenn Ihr Suchbegriff in Hunderten von Commits erscheint, dies Ihren Browser zum Absturz bringen und die CPU Ihres PCs für eine Weile verschlingen kann.)

Mark Amery
quelle
0

Geben Sie ab Mitte 2019 einfach das, wonach Sie suchen möchten, in das Suchfeld oben links ein und klicken Sie dann auf "Commits".

Geben Sie hier die Bildbeschreibung ein

M3RS
quelle