ti-enxame.com

Pesquisar código dentro de um projeto do Github

Existe uma maneira de encontrar algo dentro de um código do projeto do Github?

Eu poderia puxar a fonte e grep-lo localmente, mas eu queria saber se é possível através da interface web ou uma alternativa de terceiros.

Idéias?

241
Ben Humphreys

Atualização de janeiro de 2013: a nova pesquisa chegou!, com base em - elasticsearch.org:

Uma busca por stat dentro do Ruby repo será expressa como stat repo:Ruby/ruby, e agora irá funcionarTM.
(o nome do repositório não faz distinção entre maiúsculas e minúsculas: test repo:wordpress/wordpress retorna o mesmo que test repo:Wordpress/Wordpress )

enter image description here

Darei:

enter image description here

E você tem muitos outros exemplos de pesquisa, baseados em seguidores , ou em garfos , ou ...


Atualização de julho de 2012 (antigos dias de pesquisa Lucene e indexação de código pobre, combinados com GUI quebrada, mantidos aqui para arquivamento):

A pesquisa (com base em SolrQuerySyntax ) é agora mais permissiva e o temido "Invalid search query. Try quoting it." desapareceu ao usar o default ​​seletor de pesquisa "Everything" :)

(Eu suponho que todos nós podemos Tim Pease, que tinha em um de seus objetivos "hacking em melhorada experiências de busca para todas as propriedades do GitHub ", e eu mencionei essa questão do Stack Overflow na época;))

Aqui está uma ilustração de um grep dentro do código Ruby: ele procura por repositórios e usuários, mas também para o que eu queria pesquisar em primeiro lugar: o código!

GitHub more permissive search results


Resposta inicial e ilustração da primeira edição (setembro de 2012 => março de 2012)

Você pode usar o formulário de pesquisa avançada do GitHub :

  • Escolha Code, Repositories ou Users no drop-down e
  • use os prefixos correspondentes listados para esse tipo de pesquisa .

Por exemplo, use a diretiva repo:username/repo-name para limitar a pesquisa a um código repositório.
A página inicial "Advanced Search" inclui a seção:

Code Pesquisar:

A pesquisa do código examinará todo o código hospedado publicamente no GitHub. Você também pode filtrar por:

  • o idioma language:
  • o nome do repositório (incluindo o nome de usuário) repo:
  • o caminho do arquivo path:

Portanto, se você selecionar o seletor de pesquisa "Code", sua consulta para um texto dentro de um repositório funcionará:

Good Search selector


O que é incrivelmente inútil do GitHub é que:

  • se você esquecer de colocar o seletor de busca correto (aqui "Code"), você receberá uma mensagem de erro:
    "Invalid search query. Try quoting it."

Wrong selector for the code filer

  • a mensagem de erro não ajuda em nada.
    Nenhuma quantidade de "quoting it" tirará você deste erro.

  • depois de receber essa mensagem de erro, você não verá as seções lembrando a associação correta entre a pesquisa seletores ("Repositories", "Users" ou "Language") e a pesquisa (à direita) filtros (aqui "repo:").
    Qualquer outra tentativa que você fizer não exibirá essas associações (seletores-filtros) de volta. Apenas a mensagem de erro que você vê acima ...
    A única maneira de recuperar esses arrays é clicando no ícone "Advance Search":

Advance Search Icon on GitHub

  • o seletor de pesquisa "Everything", que é o padrão, é na verdade o errado um para todos dos filtros de pesquisa! Exceto "language:" ...
    (Você poderia imaginar/assumir que "Everything" ajudaria você a escolher qualquer que seja o seletor de pesquisa que realmente funcione com o filtro de pesquisa "repo:", mas não. Isso seria fácil demais)

  • você não pode especificar o seletor de pesquisa desejado por meio do campo "Advance Search" sozinho!
    (mas você pode para "language:", mesmo que "Search Language" seja outra caixa de combinação logo abaixo do "Search for" 'digite' uma ...)

Wrong search selector


Então, a experiência do usuário geralmente é a seguinte:

  • você clica em "Advanced Search", observa essas seções de filtros e percebe uma que deseja usar: "repo:"
  • você faz uma primeira pesquisa avançada "repo:jruby/jruby stat", mas com o seletor de pesquisa padrão "Everything"
    => FAIL! (e os arrays que exibem a associação "Seletores-Filtros" são desaparecidos )
  • você percebe que "Search for" selector thingy, selecione o first ​​choice "Repositories" ("Dah! Eu quero pesquisar dentro de repositórios ...")
    => FAIL!
  • desanimado, você seleciona a próxima opção de seletores (aqui, "Users"), sem sequer olhar para o dito seletor, só para dar mais uma chance ...
    => FAIL!
  • "Dane-se, a busca no GitHub é quebrada ! Eu estou fora daqui!"
    ...
    (A pesquisa avançada do GitHub não está realmente quebrada. Apenas sua GUI é ...)

Então, para recapitular, se você quiser "grep para algo dentro de um código do projeto do Github", como o OP Ben Humphreys , não se esqueça de selecionar o seletor de pesquisa "Code" ...

241
VonC

Repositórios privados recentes têm um campo de pesquisa para pesquisar por esse repositório.

enter image description here

Surpreendentemente, parece que essa funcionalidade não está disponível para repositórios públicos.

22
Patrick Linskey

UPDATE

O hack de bookmarklet abaixo está quebrado devido a problemas de XHR e alterações na API.

Felizmente o Github agora tem "A Whole New Code Search" que faz o trabalho soberbamente.


Finalize este voodoo: Github code search userscript .

Siga as instruções lá, ou se você odeia inchar seu navegador com scripts e extensões, use o meu pacote bookmarkified do userscript:

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('');

Salve a fonte acima como o URL de um novo marcador. Navegue até qualquer repositório do Github, clique no marcador e bam : in-page, pesquisa de código ajaxificado .

CAVEAT O Github deve indexar um repo antes que você possa pesquisá-lo.

Before the Bookmarklet

Abracadabra...

After - Look in the second menubar after the leftmost tabs: Files, Commits, Branches...

Aqui está uma pesquisa de amostra do repositório de especificação ECMAScript 5.1 anotado:

Sample search in the annotated ECMAScript 5.1 specification repository

20
fny

Embora a resposta do @VonC funcione para alguns repositórios, infelizmente para muitos repositórios você não pode agora. O Github simplesmente não está indexando-os (como comentado originalmente por @emddudley). Eles não declararam isso em nenhum lugar de seu site, mas dirão se você pedir ajuda:

De: Tim Pease
Paramos de adicionar o código recém-enviado ao nosso índice de pesquisa de código. O volume de código superou nosso índice de pesquisa atual e estamos trabalhando para mudar para uma arquitetura de pesquisa mais escalonável. Sinto muito pelo aborrecimento. Nós não temos uma estimativa para quando este novo índice de pesquisa estará ativo e em execução, mas quando estiver pronto, um post no blog será publicado (https://github.com/blog).

Irritantemente, não há maneira de dizer quais repositórios não são indexados além da falta de resultados (o que também poderia ser de uma consulta incorreta).

Também não há como rastrear esse problema além de esperar que eles façam um blog (ou assistindo aqui no SO).

De: Tim Pease
Receio que nosso rastreador de problemas seja interno, mas podemos notificá-lo assim que o novo índice de pesquisa estiver em funcionamento.

10
studgeek

Google permite que você pesquise no projeto, mas não o código :(

site: https: //github.com/CreateJS/EaselJS test

2
crizCraig