Nicht in einem Git-Repository, sondern speziell in GitHub - wie suche ich nur nach den Commit-Nachrichten eines bestimmten Repository/Zweigs?
Antworten
Zu viele Anzeigen?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)
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 eingit 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?")
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?
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
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:
Bereich - Enthaltend, Pfade berühren, Zeichenfolge hinzufügen/entfernen, Übereinstimmung der Zeilen ändern
Übereinstimmungstyp - Genau/IgnCase/Regexp
Suchfelder - Alle Felder/Überschrift/Kommentare/Committer