Nicht in einem Git-Repository , sondern speziell in GitHub - wie suche ich nur die Commit-Nachrichten eines bestimmten Repositorys / Zweigs?
Nicht in einem Git-Repository , sondern speziell in GitHub - wie suche ich nur die Commit-Nachrichten eines bestimmten Repositorys / Zweigs?
Antworten:
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
GIF-Bild von https://github.com/blog/2299-search-commit-messages
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 -g
Flagge, 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.
-g
Flag für die meisten Anwendungsfälle weg. Ich habe nicht zu viel darüber nachgedacht, aber mit -g
scheint die Suche nur einen Monat zurück zu gehen. git log -g --grep=fix
während in der develop
Filiale eines Repos, das ~ 8000 Commits über zwei Jahre hat, nur bis zum 2. Februar zurückreicht.
-g
Flagge zurückreichen .
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.
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 grep
Stilsuche ü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.
git diff's
(dh dem Inhalt der
Dies wurde von GitHub entfernt. Ich benutze:
$git log --all --oneline | grep "search query"
Sie können auch nach Autor filtern:
$git log --all --oneline --author=rickhanlonii | grep "search query"
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 ?
Sie können dies mit Repositorys tun, die von Google gecrawlt wurden (Ergebnisse variieren von Repository zu Repository).
Website "Lizenz ändern": https://github.com/*/*/commits
Website "Lizenz ändern": https://github.com/*/*/commits/master
Website "Lizenz ändern": https://github.com/twitter/*/commits/master
Website "Lizenz ändern": https://github.com/twitter/some_project/commits
Update Januar 2017 (zwei Jahre später):
Sie können jetzt nach Commit-Nachrichten suchen ! (immer noch nur in der Hauptniederlassung)
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 ausgit diff
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 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? ")
Da dies aus GitHub entfernt wurde, verwende ich dies unter gitk
Linux.
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:
Bereich - Pfade enthalten, berühren, Zeichenfolge hinzufügen / entfernen, Zeilenübereinstimmung ändern
Übereinstimmungstyp - Exact / IgnCase / Regexp
Suchfelder - Alle Felder / Überschrift / Kommentare / Committer
Dies funktioniert gut in Eclipse , bis GitHub die Funktion hinzufügt:
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 ~/.bashrc
Datei 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.)