390 Stimmen

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

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

22voto

VonC Punkte 1117238

Aktualisierung Januar 2023: (acht Jahre später)

Mit dem GitHub CLI gh v2.22.0 (Jan. 2023) können Sie innerhalb Ihres lokalen geklonten GitHub-Repositorys suchen:

Siehe gh search commits:

Beispiele:

# nach Commits suchen, die die Keywords "readme" und "typo" enthalten
$ gh search commits readme typo

# nach Commits suchen, die die Phrase "bug fix" enthalten
$ gh search commits "bug fix"

# nach Commits suchen, die von Benutzer "monalisa" erstellt wurden
$ gh search commits --committer=monalisa

Aktualisierung Januar 2017 (zwei Jahre später):

Sie können jetzt nach Commit-Nachrichten suchen! (nur noch im Master-Zweig)

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


Februar 2015: Ohne die aktuelle Suchinfrastruktur auf Elasticsearch (eingeführt im Januar 2013) könnte das wohl nie möglich sein.

Als Antwort "basierend auf glaubwürdigen und/oder offiziellen Quellen" hier ein Interview mit den für die Einführung von Elasticsearch bei GitHub verantwortlichen Personen (August 2013)

Tim Pease: Wir haben zwei Dokumentenarten: Eine ist eine Quellcodedatei und die andere ist ein Repository. Die Art und Weise, wie git funktioniert, ist, dass Sie Commits haben und für jeden Commit einen Branch haben. Repository-Dokumente halten den zuletzt indexierten Commit für das jeweilige Repository fest. Wenn ein Benutzer einen neuen Commit bei Github einreicht, ziehen wir dann dieses Repository-Dokument von Elasticsearch. Dann sehen wir den zuletzt indexierten Commit und erhalten eine Liste aller Dateien, die zwischen diesem letzten Push und dem zuvor indexierten Commit geändert, hinzugefügt oder gelöscht wurden. Dann können wir einfach nur die Dokumente aktualisieren, die sich geändert haben. Wir müssen nicht jedes Mal den gesamten Quellcodebaum neu indexieren, wenn jemand etwas einreicht.

Andrew Cholakian: Sie indexieren, nehme ich an, nur den Master-Zweig.

Tim Pease: Richtig. Es ist nur der Kopf des Master-Zweigs, der in diesem Dokument enthalten ist, und das sind immer noch viele Daten, zwei Milliarden Dokumente, 30 Terabyte.

Andrew Cholakian: Das ist unglaublich groß.

[...]

Tim Pease: Mit dem Indexieren des Quellcodes bei einem Push handelt es sich um einen selbstheilenden Prozess.
Wir haben dieses Repository-Dokument, das den zuletzt indexierten Commit verfolgt. Wenn wir also zufällig drei Commits verpassen, bei denen diese Jobs fehlschlagen, nehmen wir den nächsten Commit, schauen uns immer noch die Differenz zwischen dem zuvor indexierten Commit und dem aktuellen Push an.
Sie führen also ein git diff durch und 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 hinzufügen, und all das." Es ist selbstheilend und das ist der Ansatz, den wir ziemlich genau bei der gesamten Architektur verfolgt haben.

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

Beachten Sie, dass es nicht unmöglich ist, eine lokale Elasticsearch-Indizierung eines lokalen Clones zu erstellen: siehe "Suche in einem Git-Repository mit ElasticSearch"

Aber für ein bestimmtes Repo bleibt es am einfachsten, es zu klonen und Folgendes auszuführen:

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

(Weitere Optionen unter "Wie sucht man in einem Git-Repository nach Commit-Nachrichten?")

21voto

Jon Cairns Punkte 11567

Von der Hilfeseite zu Code-Suche scheint es, dass dies noch nicht möglich ist.

Sie können nach Text in Ihrem Repository suchen, einschließlich der Möglichkeit, Dateien oder Pfade zum Suchen auszuwählen, aber Sie können nicht angeben, dass Sie in Commits suchen möchten.

Vielleicht schlagen Sie dies ihnen vor?

19voto

technosaurus Punkte 7371

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

Durchsuchen Sie alle Zweige aller gecrawlten Repositories nach "Lizenz ändern"

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

Durchsuchen Sie den Master-Zweig aller gecrawlten Repositories nach "Lizenz ändern":

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

Durchsuchen Sie den Master-Zweig aller gecrawlten Twitter-Repositories nach "Lizenz ändern"

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

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

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

10voto

M3RS Punkte 5441

Stand Mitte 2019

  1. geben Sie Ihre Abfrage in das linke Suchfeld oben ein
  2. klicken Sie auf Enter
  3. klicken Sie auf "Commits"

Screenshot:

Bildbeschreibung hier eingeben

7voto

Kirk Punkte 507

Da dies von GitHub entfernt wurde, benutze ich auf Linux gitk dafür.

Gehe im Terminal zu deinem Repository und tippe gitk.

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

Suchleiste

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

Übereinstimmungstyp - Genau/IgnCase/Regexp

Suchfelder - Alle Felder/Überschrift/Kommentare/Committer

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X