Cerca il codice all'interno di un progetto Github


272

C'è un modo per cercare qualcosa nel codice di un progetto Github?

Potrei estrarre la fonte e grep localmente, ma mi chiedevo se fosse possibile attraverso l'interfaccia web o un'alternativa di terze parti.

Idee?


anche checkout code.ohloh.net :)
obimod


Risposte:


255

Aggiornamento gennaio 2013: è arrivata una nuova ricerca! , basato su elasticsearch.org :

Una ricerca di stat all'interno del repository ruby ​​verrà espressa come stat repo:ruby/ruby, e ora funzionerà semplicemente con TM .
(il nome del repository non distingue tra maiuscole e minuscole: test repo:wordpress/wordpressrestituisce lo stesso di test repo:Wordpress/Wordpress)

inserisci qui la descrizione dell'immagine

Darà:

inserisci qui la descrizione dell'immagine

E hai molti altri esempi di ricerca, basati su follower , o su fork , o ...


Aggiornamento luglio 2012 (i vecchi tempi della ricerca di Lucene e l'indicizzazione del codice scadente, combinati con la GUI non funzionante, mantenuti qui per l'archivio):

La ricerca (basata su SolrQuerySyntax ) è ora più permissiva e il temuto " Invalid search query. Try quoting it." scompare quando si utilizza il selettore di ricerca predefinito "Tutto" :)

(Suppongo che possiamo tutti oltre Tim Pease , che aveva in uno dei suoi obiettivi "l'hacking su esperienze di ricerca migliorate per tutte le proprietà di GitHub ", e al momento ho citato questa domanda di StackTranslate.it ;)

Ecco un'illustrazione di un grep all'interno del codice ruby: cercherà repository e utenti, ma anche ciò che volevo cercare in primo luogo: il codice!

GitHub risultati di ricerca più permissivi


Risposta iniziale e illustrazione del precedente numero (settembre 2012 => marzo 2012)

È possibile utilizzare il modulo di ricerca avanzata GitHub :

  • Scegli Code, Repositorieso Usersdalla discesa e
  • utilizzare i prefissi corrispondenti elencati per quel tipo di ricerca .

Ad esempio, utilizzare la repo:username/repo-namedirettiva per limitare la ricerca a un repository di codice .
La Advanced Searchpagina " " iniziale include la sezione:

Ricerca codice :

La ricerca del codice esaminerà tutto il codice ospitato pubblicamente su GitHub. Puoi anche filtrare per:

  • la lingua language:
  • il nome del repository (incluso il nome utente) repo:
  • il percorso del file path:

Pertanto, se si seleziona il " Code" selettore di ricerca, la query che esegue l'interruzione per un testo all'interno di un repository funzionerà:

Selettore di buona ricerca


Ciò che è incredibilmente inutile da GitHub è che:

  • se si dimentica di inserire il selettore di ricerca corretto (qui " Code"), verrà visualizzato un messaggio di errore:
    " Invalid search query. Try quoting it."

Selettore errato per il filer di codice

  • il messaggio di errore non ti aiuta affatto.
    Nessun importo di " quoting it" ti farà uscire da questo errore.

  • una volta visualizzato questo messaggio di errore, non vengono visualizzate le sezioni che ricordano l'associazione corretta tra i selettori di ricerca (" Repositories", " Users" o " Language") e i filtri di ricerca (a destra) (qui " repo:").
    Ogni ulteriore tentativo che fai non visualizzerà quelle associazioni (selettori-filtri). Solo il messaggio di errore che vedi sopra ...
    L'unico modo per recuperare questi array è facendo clic Advance Searchsull'icona " ":

Icona di ricerca avanzata su GitHub

  • il " Everything" selettore di ricerca, che è quello predefinito, è in realtà quello sbagliato per tutti i filtri di ricerca! Tranne " language:" ...
    (Potresti immaginare / supporre che " Everything" ti aiuterebbe a scegliere qualsiasi selettore di ricerca effettivamente funzionante con il filtro di ricerca " repo:", ma no. Sarebbe troppo facile)

  • non è possibile specificare il selettore di ricerca desiderato solo attraverso il Advance Searchcampo " "!
    (ma puoi per " language:", anche se " Search Language" è un'altra casella combinata appena sotto " Search for" "digita" ...

Selettore di ricerca errato


Pertanto, l'esperienza dell'utente di solito è la seguente:

  • fai clic su " Advanced Search", dai un'occhiata a quelle sezioni di filtri e noti quello che vuoi usare: " repo:"
  • fai una prima ricerca avanzata " repo:jruby/jruby stat", ma con il selettore di ricerca predefinito " Everything"
    => FAIL! (e gli array che visualizzano l'associazione "Selettori-Filtri" sono spariti )
  • si nota che "Cerca" selettore di cose, selezionare la prima scelta " Repositories" ("Dah! Voglio cercare nei repository ...")
    => FAIL!
  • abbattuto, selezioni la prossima scelta di selettori (qui, " Users"), senza nemmeno guardare detto selettore, solo per provarlo ancora ...
    => FAIL!
  • "Fanculo, la ricerca di GitHub è interrotta ! Sono fuori di qui!"
    ...
    (La ricerca avanzata di GitHub in realtà non è interrotta. Solo la loro GUI è ...)

Quindi, per ricapitolare, se si desidera "cercare qualcosa all'interno del codice di un progetto Github", come l'OP Ben Humphreys , non dimenticare di selezionare il " Code" selettore di ricerca ...


sei sicuro, non ho provato repo:"jruby/jruby" stat repo:"jruby" stat jruby: statnessuno dei quali funziona
Tom H

@ Tom: a prima vista, potrebbe trattarsi di un bug sul lato GitHub, come commentato su superuser.com/a/179900/141
VonC

1
@DannyStaple Bene, sembrano essere a conoscenza del problema, se guardi alla missione descritta in github.com/blog/1116-tim-pease-is-a-githubber : " Molto probabilmente Tim sarà [...] hacking su esperienze di ricerca migliorate per tutte le proprietà di GitHub ". Assicurati di rispondere al loro tweet di GitHub ( twitter.com/#!/github/status/197070106768048128 ), come ho fatto io ( twitter.com/#!/VonC_/status/197565733830541313 )
VonC,

9
FWIW Ho contattato GitHub perché non ho ricevuto risultati di ricerca quando ho limitato le ricerche ai miei repository. Tim Pease ha risposto che stavano riscontrando difficoltà con il volume degli indici repo, quindi hanno migrato verso server di indici frammentati. Non è attivo l'ETA quando verranno migrati tutti i repository.
M. Dudley,

3
Ho appena usato il consiglio di questa risposta e funziona anche per me, ma ho un avvertimento da aggiungere. Il nome del repository dovrebbe essere sempre in minuscolo anche se GitHib lo elenca in qualsiasi altro modo in modo diverso. Ad esempio, (dopo aver impostato il menu a discesa Codice, ecc. Come sopra) prova la stessa ricerca con: repo: wordpress / wordpress vs repo: WordPress / WordPress ... solo il primo produrrà risultati.
Ethanpil,

22

I repository privati ​​recenti hanno un campo di ricerca per la ricerca in quel repository.

inserisci qui la descrizione dell'immagine

Sorprendentemente, sembra che questa funzionalità non sia disponibile per i repository pubblici.


1
Mi chiedo se questa sia una mossa poco commerciale per far passare le persone alla versione a pagamento? Non sembra github ma comunque.
Sylvain,

3
@Sylvain Non pensa che sia fatto come un incoraggiamento per l'aggiornamento, poiché anche dopo l'aggiornamento, non otterrai quel campo di ricerca per i repository pubblici. Invece, penso che la ricerca principale utilizzi un indice che non include repository privati, e quindi non perdi la funzionalità quando paghi un repository privato, hanno dovuto aggiungere un altro modo per cercare solo attraverso quel repository privato, quindi campo di testo.
avernet

2
Immagina che il loro overhead abbia un indice di ricerca per ogni riga di codice in ogni repository! Insane! Ecco perché lo fanno solo per repository privati ​​..
Jonny Nott,

1
La ricerca è ora nell'intestazione, come la ricerca globale.
Tib,

20

AGGIORNARE

L'hack del bookmarklet di seguito è interrotto a causa di problemi XHR e modifiche API.

Per fortuna, Github ora ha "Una ricerca di tutto il nuovo codice" che svolge egregiamente il lavoro.


Dai un'occhiata a questo voodoo: un'occhiata a codice utente di ricerca codice Github .

Segui le indicazioni lì, o se odi il gonfiore del tuo browser con script ed estensioni, usa il mio bundle con segnalibro dello script utente:

javascript:(function(){var s='https://github.com/skratchdot/github-code-search.user.js/raw/master/github-code-search.user.js',t='text/javascript',d=document,n=navigator,e;(e=d.createElement('script')).src=s;e.type=t;d.getElementsByTagName('head')[0].appendChild(e)})();doIt('');void('');

Salva la fonte sopra come URL di un nuovo segnalibro. Passare a qualsiasi repository Github, fare clic sul segnalibro e bam : ricerca del codice a-page, ajaxified .

CAVEAT Github deve indicizzare un repository prima di poterlo cercare.

Prima del Bookmarklet

Abracadabra...

Dopo: cerca nella seconda barra dei menu dopo le schede all'estrema sinistra: File, Commit, Branch ...

Ecco una ricerca di esempio dal repository delle specifiche ECMAScript 5.1 annotato:

Ricerca di esempio nel repository delle specifiche ECMAScript 5.1 annotato


Quando uso il plug-in (Chrome) funziona perfettamente nel repository scratchdot / github-code-search, ma non in nessun altro repository.
forforf,

Dovrebbe funzionare nella home page di qualsiasi repository. Forse stai provando da un'altra pagina? Ho pubblicato uno screenshot di una ricerca di esempio in un repository diverso nel mio post.
fny

Aha! In realtà ho scoperto perché quelle ricerche potrebbero non essere riuscite: un repository deve attendere il suo turno per l'indicizzazione. Dati i miliardi di repository attivi, sospetto che ci voglia un po 'di tempo.
fny

2
@ user456584 questa è una novità per me. Potresti voler informare anche Google e Mozilla .
fny

2
Ho capito perché il plugin non funziona, perché il nome del repository deve essere in minuscolo. (Vedi il mio commento alla risposta di VonC sopra). Ho già inviato una patch su GitHub, speriamo che l'autore originale lo veda. github.com/skratchdot/github-code-search.user.js/pull/5
ethanpil

10

Mentre la risposta di @ VonC funziona per alcuni repository, sfortunatamente per molti repository non puoi farlo adesso. Github semplicemente non li sta indicizzando (come commentato originariamente da @emddudley). Non lo hanno indicato da nessuna parte sul loro sito Web, ma ti diranno se chiedi supporto:

Da: Tim Pease
Abbiamo smesso di aggiungere il nuovo codice inserito nel nostro indice di ricerca codici. Il volume del codice ha superato il nostro attuale indice di ricerca e stiamo lavorando per passare a un'architettura di ricerca più scalabile. Mi dispiace per il fastidio. Non abbiamo una stima per quando questo nuovo indice di ricerca sarà attivo e funzionante, ma quando sarà pronto verrà pubblicato un post sul blog (https://github.com/blog).

Non c'è modo fastidioso di dire quali archivi non sono indicizzati se non la mancanza di risultati (che potrebbe anche derivare da una cattiva query).

Inoltre non c'è modo di rintracciare questo problema se non quello di aspettare che lo blog (o guardare qui su SO).

Da: Tim Pease
Temo che il tracker dei problemi sia interno, ma possiamo avvisarti non appena il nuovo indice di ricerca è attivo e funzionante.


Dovrebbero almeno menzionare che alcuni risultati della ricerca potrebbero essere omessi. Fa completamente schifo quando refactoring il codice e cerco occorrenze di codice che sono lì ma non menzionate da GitHub.
Nicodemuz,


0

Cerco il codice sorgente all'interno dei repository di Github con l' estensione gratuita per Chrome di Sourcegraph ... Ma prima ho scaricato Chrome , sapevo che altri browser lo supportano, come - e forse solo - Firefox.

Ho sfogliato i documenti di estensione Chrome di SourceForge e poi ho anche guardato quello che mi serviva per cercare i nomi delle directory con il motore di ricerca di Github stesso, leggendo alcuni dei documenti di ricerca di Codebase di Github

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.