Pesquisar código dentro de um projeto Github


272

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

Eu poderia extrair a fonte e grep localmente, mas queria saber se é possível através da interface da Web ou de uma alternativa de terceiros.

Ideias?


Também checkout code.ohloh.net :)
obimod


1
Abriu uma solicitação de recurso em: github.com/isaacs/github/issues/1495
Ciro Santilli escreveu:

Respostas:


255

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

Uma pesquisa por stat no repositório ruby ​​será expressa como stat repo:ruby/rubye agora funcionará apenas como TM .
(o nome do repo não diferencia maiúsculas de minúsculas: test repo:wordpress/wordpressretorna o mesmo que test repo:Wordpress/Wordpress)

insira a descrição da imagem aqui

Darei:

insira a descrição da imagem aqui

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


Atualização em julho de 2012 (os velhos tempos de pesquisa do Lucene e indexação de código ruim, combinados com GUI quebrada, mantidos aqui para arquivamento):

A pesquisa (com base no SolrQuerySyntax ) agora é mais permissiva e o temido " Invalid search query. Try quoting it." desapareceu ao usar o seletor de pesquisa padrão "Tudo" :)

(Suponho que todos nós possamos, além de Tim Pease , que tinha um de seus objetivos "invadir experiências de pesquisa aprimoradas para todas as propriedades do GitHub " e mencionei essa pergunta sobre estouro de pilha na época;)

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

Resultados de pesquisa mais permissivos do GitHub


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

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

  • Escolha Code, Repositoriesou Usersa partir do drop-down e
  • use os prefixos correspondentes listados para esse tipo de pesquisa .

Por exemplo, use a repo:username/repo-namediretiva para limitar a pesquisa a um repositório de códigos .
A Advanced Searchpágina inicial " " inclui a seção:

Pesquisa de código :

A pesquisa de 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 " Code" seletor de pesquisa, sua consulta para um texto em um repositório funcionará:

Seletor de boa pesquisa


O que é incrivelmente inútil no GitHub é o seguinte:

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

Seletor incorreto para o arquivador de código

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

  • depois de receber a mensagem de erro, você não obtém as seções que lembram a associação correta entre os seletores de pesquisa (" Repositories", " Users" ou " Language") e os filtros de pesquisa (certos) (aqui " repo:").
    Qualquer outra tentativa que você fizer não exibirá essas associações (seletores-filtros) de volta. Somente a mensagem de erro exibida acima ...
    A única maneira de recuperar essas matrizes é clicando no Advance Searchícone " ":

Ícone de pesquisa avançada no GitHub

  • o " Everything" seletor de pesquisa, que é o padrão, é realmente o incorreto para todos os filtros de pesquisa! Exceto " language:" ...
    (Você pode imaginar / supor que " Everything" o ajudaria a escolher o seletor de pesquisa que realmente funciona com o filtro de pesquisa " repo:", mas não. Isso seria muito fácil)

  • você não pode especificar o seletor de pesquisa que deseja através do Advance Searchcampo " " sozinho!
    (mas você pode " language:", mesmo que " Search Language" seja outra caixa de combinação logo abaixo da " Search for" 'digite' uma ...)

Seletor de pesquisa incorreto


Portanto, a experiência do usuário geralmente é a seguinte:

  • você clica em " Advanced Search", olha as 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 as matrizes que exibem a associação "Seletores-Filtros" desapareceram )
  • você percebe que "Pesquisar por" seletor, selecione a primeira opção " Repositories" ("Dah! Eu quero pesquisar nos repositórios ...")
    => FAIL!
  • desanimado, você seleciona a próxima opção de seletores (aqui, " Users"), sem sequer olhar para o seletor, apenas para tentar mais uma vez ...
    => FAIL!
  • "Dane-se, a pesquisa do GitHub está quebrada ! Estou fora daqui!"
    ...
    (Na verdade, a pesquisa avançada do GitHub não está quebrada. Somente a GUI é ...)

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


você tem certeza, eu tentei repo:"jruby/jruby" stat repo:"jruby" stat jruby: statnenhum dos quais funciona #
6116 H Tom

@ TomH: à primeira vista, pode ser um bug no lado do GitHub, como comentado em superuser.com/a/179900/141
VonC 13/12

1
@DannyStaple Bem, eles parecem estar cientes do problema, se você olhar para a missão descrita em github.com/blog/1116-tim-pease-is-a-githubber : "Tim provavelmente estará [...] invadir experiências de pesquisa aprimoradas para todas as propriedades do GitHub ". Certifique-se de responder ao tweet do GitHub ( twitter.com/#!/github/status/197070106768048128 ), como eu fiz ( twitter.com/#!/VonC_/status/197565733830541313 )
VonC

9
FWIW Entrei em contato com o GitHub porque não obtive nenhum resultado de pesquisa ao restringir as pesquisas aos meus repositórios. Tim Pease respondeu que eles estavam tendo dificuldades com o volume de índices de recompra, então eles estavam migrando para servidores de índice fragmentados. Não há ETA ativado quando todos os repositórios serão migrados.
M. Dudley

3
Acabei de usar o conselho desta resposta e está funcionando para mim também, mas tenho uma ressalva a acrescentar. O nome do repositório deve sempre estar em letras minúsculas, mesmo que o GitHib o liste em qualquer outro lugar de uma maneira diferente. Por exemplo, (após definir o menu suspenso Código, etc, como acima), tente a mesma pesquisa com: repo: wordpress / wordpress vs repo: WordPress / WordPress ... apenas o primeiro produzirá resultados.
ethanpil

22

Repositórios particulares recentes têm um campo de pesquisa para pesquisar nesse repositório.

insira a descrição da imagem aqui

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


1
Gostaria de saber se esta é uma medida humilde comercial para fazer as pessoas atualizarem para a versão paga? Não soa como github, mas ainda assim.
214 Sylvain

3
@Sylvain Não acho que isso seja feito como um incentivo para a atualização, pois mesmo após a atualização, você não terá esse campo de pesquisa para repositórios públicos. Em vez disso, acho que a pesquisa principal usa um índice que não inclui repositórios particulares e, assim, você não perde a funcionalidade ao pagar por um repositório privado, eles tiveram que adicionar outra maneira de pesquisar apenas nesse repositório privado, daí o adicional campo de texto.
29512 avernet

2
Imagine a sobrecarga deles tendo um índice de pesquisa para cada linha de código em cada repositório! Insano! É por isso que eles só fazem isso para repos privadas ..
Jonny Nott

1
A pesquisa está agora no cabeçalho, igual à pesquisa global.
Tib

20

ATUALIZAR

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

Felizmente, o Github agora tem "Uma pesquisa de código totalmente nova", que faz o trabalho de maneira excelente.


Confira este vodu: pesquisa de código do Github userscript .

Siga as instruções lá ou, se você odeia inchar seu navegador com scripts e extensões, use meu pacote marcado como favorito do script de usuário:

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 : pesquisa de código ajaxificado in-page .

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

Antes do Bookmarklet

Abracadabra...

Depois - procure na segunda barra de menus após as guias mais à esquerda: Arquivos, Confirmações, Ramos ...

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

Amostra de pesquisa no repositório de especificação anotado do ECMAScript 5.1


Quando uso o plug-in (Chrome), ele funciona bem no repositório scratchdot / github-code-search, mas não em nenhum outro repositório.
forforf

Ele deve funcionar na página inicial de qualquer repositório. Talvez você esteja tentando em uma página diferente? Publiquei uma captura de tela de uma pesquisa de amostra em um repositório diferente em minha postagem.
FNY

Aha! Na verdade, descobri por que essas pesquisas falharam: um repositório deve esperar sua vez para indexar. Dado o zilhão de repositórios ativos, suspeito que isso demore um pouco.
FNY

2
@ user456584 são novidades para mim. Convém informar o Google e a Mozilla também.
FNY

2
Eu descobri por que o plugin não está funcionando, é porque o nome do repositório precisa estar em letras minúsculas. (Veja meu comentário à resposta do VonC acima). Eu já enviei um patch no GitHub, espero que o autor original o veja. github.com/skratchdot/github-code-search.user.js/pull/5
ethanpil

10

Embora a resposta do @ VonC funcione para alguns repositórios, infelizmente para muitos repositórios você não pode no momento. O Github simplesmente não os indexa (como comentado originalmente por @emddudley). Eles não declararam isso em nenhum lugar do site, mas informarão se você solicitar suporte:

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

Irritantemente, não há como saber quais repositórios não estão indexados, a não ser a falta de resultados (que também podem ser de uma consulta incorreta).

Também não há como rastrear esse problema além de esperar pelo blog (ou assistir aqui no SO).

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


Eles devem pelo menos mencionar que alguns resultados da pesquisa podem ser omitidos. É péssimo quando refato o código e procuro ocorrências de código que existem, mas não são mencionadas pelo GitHub.
Nicodemuz


0

Pesquisei o código-fonte dentro dos repositórios do Github com a extensão gratuita do Sourcegraph Chrome ... Mas baixei o Chrome Primeiro , eu sabia que outros navegadores o suportam, como - e talvez apenas - o Firefox.

Passei os olhos pelos documentos de extensão do Chrome do SourceForge e também procurei o que precisava para procurar nomes de diretório com o próprio mecanismo de pesquisa do Github, lendo alguns dos documentos de pesquisa em codebase do Github

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.