Non in un repository Git , ma piuttosto in GitHub in particolare: come posso cercare solo i messaggi di commit di un repository / ramo specifico?
Non in un repository Git , ma piuttosto in GitHub in particolare: come posso cercare solo i messaggi di commit di un repository / ramo specifico?
Risposte:
A partire dal 2017 è una funzionalità inclusa in GitHub stesso .
La ricerca di esempio usata da loro è repo:torvalds/linux merge:false crypto policy
Immagine GIF da https://github.com/blog/2299-search-commit-messages
Prima eri in grado di farlo, ma GitHub ha rimosso questa funzione a metà 2013. Per ottenere ciò a livello locale, puoi fare:
git log -g --grep=STRING
(Usa la -gbandiera se vuoi cercare altri rami e commit penzolanti.)
-g, --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from
the most recent one to older ones.
-gbandiera per i casi d'uso più comuni. Non ho studiato molto questo, ma con -g, la ricerca sembra tornare indietro di un solo mese. git log -g --grep=fixmentre nel developramo di un repository che ha ~ 8000 impegni per due anni, risale solo al 2 febbraio.
-gbandiera.
Aggiornamento (2017/01/05):
GitHub ha pubblicato un aggiornamento che ti consente ora di cercare all'interno dei messaggi di commit dall'interfaccia utente. Vedi post sul blog per maggiori informazioni.
Ho avuto la stessa domanda e ho contattato qualcuno GitHub ieri:
Poiché hanno cambiato il loro motore di ricerca in Elasticsearch, non è possibile cercare messaggi di commit utilizzando l'interfaccia utente di GitHub. Ma quella caratteristica è nella lista dei desideri della squadra.
Sfortunatamente non esiste una data di rilascio per quella funzione in questo momento.
La risposta breve è che non è possibile cercare i messaggi di commit direttamente su github.com nel sito Web. Per il momento raccomandiamo la git grepsoluzione locale proposta da altri su questo thread.
A un certo punto GitHub ha offerto una git grepricerca di stile sui messaggi di commit per un singolo repository. Sfortunatamente, questo approccio ha rivelato un diniego di servizio che potrebbe rendere inaccessibile un file server. Per questo motivo, abbiamo rimosso la git grepricerca.
Le attuali stime sul retro della dotazione mettono il numero di commit in GitHub da qualche parte intorno agli 80 miliardi. Sebbene gli ingegneri di Google ridano alle nostre spalle, questo è un numero piuttosto elevato di documenti da archiviare in ElasticSearch. Ci piacerebbe rendere questo set di dati ricercabile, ma non è un progetto banale.
git diff's(ovvero il contenuto dei commit, non i metadati del commit)
Questo è stato rimosso da GitHub. Io uso:
$git log --all --oneline | grep "search query"

Puoi anche filtrare per autore:
$git log --all --oneline --author=rickhanlonii | grep "search query"
Dalla pagina di aiuto sulla ricerca del codice , sembra che questo non sia ancora possibile.
Puoi cercare il testo nel tuo repository, inclusa la possibilità di scegliere file o percorsi in cui cercare, ma non puoi specificare che vuoi cercare in commit.
Forse suggerisci questo a loro ?
Puoi farlo con i repository sottoposti a scansione da Google (i risultati variano da repository a repository).
sito "cambia licenza": https://github.com/*/*/commits
sito "cambia licenza": https://github.com/*/*/commits/master
sito "cambia licenza": https://github.com/twitter/*/commits/master
sito "cambia licenza": https://github.com/twitter/some_project/commits
Aggiornamento gennaio 2017 (due anni dopo):
Ora puoi cercare i messaggi di commit ! (ancora solo nel ramo principale)
Febbraio 2015: non sono sicuro che ciò possa mai essere possibile, considerando l'attuale base dell'infrastruttura di ricerca su Elasticsearch (introdotta a gennaio 2013 ).
Come risposta "attingendo da fonti credibili e / o ufficiali", ecco un'intervista fatta con le persone di GitHub incaricate di presentare Elasticsearch a GitHub (agosto 2013)
Tim Pease : Abbiamo due tipi di documenti: uno è un file di codice sorgente e l'altro è un repository. Il modo in cui git funziona è che hai commit e hai un ramo per ogni commit. I documenti del repository tengono traccia del commit più recente per quel particolare repository che è stato indicizzato. Quando un utente invia un nuovo commit a Github, estraiamo quel documento del repository da elasticsearch. Vediamo quindi il commit indicizzato più di recente e quindi otteniamo un elenco di tutti i file che sono stati modificati, aggiunti o eliminati tra questo push recente e ciò che abbiamo precedentemente indicizzato. Quindi possiamo andare avanti e aggiornare semplicemente quei documenti che sono stati modificati. Non dobbiamo reindicizzare l'intero albero del codice sorgente ogni volta che qualcuno spinge.
Andrew Cholakian: Quindi, supponete , ragazzi, solo il ramo principale.
Tim Pease: corretto. È solo il capo del ramo principale che entrerai lì e ci sono ancora molti dati, due miliardi di documenti, 30 terabyte.
Andrew Cholakian: È incredibilmente enorme.
[...]
Tim Pease: con l'indicizzazione del codice sorgente su push, è un processo di auto-guarigione.
Abbiamo quel documento di repository che tiene traccia dell'ultimo commit indicizzato. Se ci siamo persi, ci capita di perdere tre commit in cui falliscono quei lavori, il prossimo commit che arriva, stiamo ancora osservando la differenza tra il precedente commit che abbiamo indicizzato e quello che stiamo vedendo con questa nuova spinta.
Fai ungit diffe ottieni tutti i file che sono stati aggiornati, eliminati o aggiunti. Puoi solo dire: "Va bene, dobbiamo rimuovere questi file. Dobbiamo aggiungere questi file e tutto il resto. " È autorigenerante e questo è l'approccio che abbiamo adottato praticamente con tutta l'architettura.
Ciò significa che non tutti i rami di tutti i repository verranno indicizzati con questo approccio.
Una ricerca globale di messaggi di commit non è al momento disponibile.
E lo stesso Tim Pease conferma che i messaggi di commit non sono indicizzati .
Si noti che non è impossibile ottenere la propria indicizzazione locale di elasticsearch di un clone locale: consultare " Ricerca di un repository git con ElasticSearch "
Ma per un repository specifico, il più semplice rimane per clonarlo e fare un:
git log --all --grep='my search'
(Altre opzioni in " Come cercare un repository Git tramite il messaggio di commit? ")
Dato che questo è stato rimosso da GitHub, sto usando gitkLinux per farlo.
Dal terminale vai al tuo repository e digita gitk.
Nel mezzo della GUI, c'è una casella di ricerca. Offre una buona selezione di filtri:

Ambito: contenente, toccando percorsi, aggiungendo / rimuovendo una stringa, cambiando la corrispondenza della linea
Tipo di corrispondenza - Esatto / IgnCase / Regexp
Cerca campi - Tutti i campi / Titolo / Commenti / Committer
Funziona bene da Eclipse , fino a quando GitHub non aggiunge la funzione:

Se hai una versione locale del repository, potresti provare questo script di shell grezza che ho scritto per aprire le pagine GitHub per tutti i commit che corrispondono al termine di ricerca in nuove schede nel browser predefinito:
#!/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
Sostituisci semplicemente https://github.com/RepoOwnerUserName/RepoName/con l'URL GitHub effettivo del tuo repository, salva lo script da qualche parte (ad es. Come githubsearch.sh, rendilo eseguibile ( chmod +x githubsearch.sh) e quindi aggiungi il seguente alias al tuo ~/.bashrcfile:
alias githubsearch='/path/to/githubsearch.sh'
Quindi, da qualsiasi parte del repository Git, basta farlo sul terminale:
githubsearch "what you want to search for"
e qualsiasi commit che corrisponda al termine di ricerca (senza distinzione tra maiuscole e minuscole) avrà le pagine GitHub corrispondenti aperte nel browser. (Tieni presente che se il termine di ricerca appare in centinaia di commit, questo potrebbe causare l'arresto anomalo del browser e il consumo della CPU del PC per un po '.)