Come posso cercare un messaggio di commit su GitHub?


328

Non in un repository Git , ma piuttosto in GitHub in particolare: come posso cercare solo i messaggi di commit di un repository / ramo specifico?


3
Il repository è pubblico o privato?

2
Che ne dici di cercare un messaggio di commit in tutte le forcelle? Cercando di evitare di reinventare la ruota quando il repository principale ha oltre 100 forcelle!
Daniel Sokolowski il

Qualche cambiamento da allora?
Pavel Šimerda,

Voglio cercare la rete si impegna
frumbert l'

Risposte:


68

A partire dal 2017 è una funzionalità inclusa in GitHub stesso .

La ricerca di esempio usata da loro è repo:torvalds/linux merge:false crypto policy

inserisci qui la descrizione dell'immagine Immagine GIF da https://github.com/blog/2299-search-commit-messages


Viene visualizzato un errore di autorizzazione durante la ricerca di un repository privato a cui ho accesso in lettura / scrittura.
anon58192932

1
Ho guardato per cinque minuti e non riesco a capire dove va il mouse dopo che si è ridotto verso il basso e verso destra.
Kevin Krumwiede,

1
@KevinKrumwiede probabilmente al pulsante "stop recording" haha
Corey Cole

Ho rinunciato e ho usato "git log --all --grep = searhterm"
Edwin Evans,

206

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.

143
perché diamine l'hanno rimosso? Questa è una funzione davvero utile.
Josh Brown,

1
Fattore mistico: di solito I.want.spaces.in.this.string.
dbrower,

11
Suggerimento omettere la -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.
Dan Dascalescu

1
@DanDascalescu Strano, sono stato in grado di trovare commit che risalgono a almeno 5 mesi con la -gbandiera.
Chrispy,

134

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.


7
+1 Mi hai risparmiato tempo inutile in GitHub chiedendoti come ottenere ciò che suppongo sarebbe una funzionalità ovvia. Quindi ora dobbiamo clonare il repository localmente per grep tramite la riga di comando. Accidenti, sono progressi eh ?! ;)
McNab il

68
Anche la loro ricerca avanzata nell'interfaccia utente Web non consente la ricerca nel campo più importante: il messaggio di commit effettivo. Questo è assolutamente ridicolo IMO. Github mette insieme i tuoi atti!
Brad Thomas,

22
Sì. Dimentica il fatto che hanno creato un servizio web che aiuta a rivoluzionare e diffondere il software open source, il fatto che non dispongano di questa funzionalità lo rende un vero truffatore!
Jon Cairns,

12
Grazie per aver dedicato del tempo a pubblicare il contenuto del tuo discorso con GitHub in un luogo pubblico facilmente reperibile. È assurdo che questo sia l'unico modo per il pubblico di ottenere tali informazioni - è profondamente stupido per GitHub non avere un tracker di problemi pubblici - ma in presenza di tale stupidità, quello che hai fatto qui è un modo utile per prevenire centinaia di altri da perdere tempo inviando la stessa richiesta. Grazie per le centinaia di ore uomo di produttività che hai risparmiato.
Mark Amery,

1
Beh, non molto meglio del tracker pubblico di Atlasian, che è pieno di numeri aperti di 7 anni con migliaia di voti positivi ...
Askdesigners

58

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.


2
+1. Ciò sembra confermare ciò che pensavo scrivendo la mia risposta : il messaggio di commit non è indicizzato: stai lavorando con l'indicizzazione git diff's(ovvero il contenuto dei commit, non i metadati del commit)
VonC

Che ne dici del pulsante "salta per eseguire il commit"? Attualmente è accessibile dall'URL - stackoverflow.com/a/12214817/817632 ma non esiste un'interfaccia per esso (non che io sappia). Caso d'uso: trova un hash di commit da qualche parte in bower.json invece della versione e vuoi vedere esattamente cosa fa questo commit. Ti farà risparmiare un po 'di tempo su Google.
Olga,

44

Questo è stato rimosso da GitHub. Io uso:

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

inserisci qui la descrizione dell'immagine

Puoi anche filtrare per autore:

$git log --all --oneline --author=rickhanlonii | grep "search query"

3
Questo ha funzionato per me, ma la risposta più votata no.
Makkad,

21

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 ?


18
Questo sembra il caso d'uso più "predefinito" quando si tratta di cercare in un repository. Soprattutto per qualcuno che arriva a conoscere un nuovo repository con tonnellate di commit. Dovrebbero assolutamente prendere in considerazione l'aggiunta di questo.
Jose Browne,

19

Puoi farlo con i repository sottoposti a scansione da Google (i risultati variano da repository a repository).

Cerca in tutti i rami di tutti i repository sottoposti a scansione per "modifica licenza"

sito "cambia licenza": https://github.com/*/*/commits

Cerca nel ramo master di tutti i repository sottoposti a scansione per "modifica licenza":

sito "cambia licenza": https://github.com/*/*/commits/master

Cerca nel ramo principale di tutti i repository di Twitter sottoposti a scansione per "modifica licenza"

sito "cambia licenza": https://github.com/twitter/*/commits/master

Cerca in tutti i rami del repository twitter / some_project "modifica licenza"

sito "cambia licenza": https://github.com/twitter/some_project/commits


4
@DZenBot se non si tratta di un repository pubblico, allora probabilmente hai già una copia locale per git grep, ho appena dato questa risposta a coloro che non vogliono clonare un intero repository pubblico per capire quando sono state apportate alcune modifiche. Lo uso principalmente per trovare commit che rimuovono il supporto per le versioni precedenti di gtk o quando le licenze cambiano in gpl3
technosaurus

15

Aggiornamento gennaio 2017 (due anni dopo):

Ora puoi cercare i messaggi di commit ! (ancora solo nel ramo principale)

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


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 un git 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? ")


7

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:

Barra di ricerca

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



4

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 '.)


0

A partire dalla metà del 2019, digita tutto ciò che desideri cercare nella casella di ricerca in alto a sinistra, quindi fai clic su "Impegni".

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.