Rechercher du code dans un projet Github

272

Existe-t-il un moyen de rechercher quelque chose dans le code d'un projet Github?

Je pouvais extraire la source et la récupérer localement, mais je me demandais si c'était possible via l'interface Web ou une alternative tierce.

Des idées?

Ben Humphreys
la source
consultez également code.ohloh.net :)
obimod
Pour les dépôts
drorw
1
A ouvert une demande de fonctionnalité sur: github.com/isaacs/github/issues/1495
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Réponses:

255

Mise à jour janvier 2013: une toute nouvelle recherche est arrivée! , basé sur elasticsearch.org :

Une recherche de statistiques dans le référentiel rubis sera exprimée par stat repo:ruby/ruby, et fonctionnera maintenant simplement TM .
(le nom du dépôt n'est pas sensible à la casse: test repo:wordpress/wordpressrenvoie le même que test repo:Wordpress/Wordpress)

entrez la description de l'image ici

Va donner:

entrez la description de l'image ici

Et vous avez de nombreux autres exemples de recherche, basés sur des followers , ou sur des fourches , ou ...


Mise à jour de juillet 2012 (anciens jours de recherche Lucene et d'indexation de code médiocre, combinés à une interface graphique cassée, conservés ici pour les archives):

La recherche (basée sur SolrQuerySyntax ) est désormais plus permissive et le redouté " Invalid search query. Try quoting it." disparaît lorsque vous utilisez le sélecteur de recherche par défaut "Everything" :)

(Je suppose que nous pouvons tout ce que Tim Pease , qui avait dans l'un de ses objectifs "pirater des expériences de recherche améliorées pour toutes les propriétés GitHub ", et j'ai mentionné cette question de débordement de pile à l'époque;))

Voici une illustration d'un grep dans le code ruby: il recherchera les repos et les utilisateurs, mais aussi ce que je voulais rechercher en premier lieu: le code!

GitHub des résultats de recherche plus permissifs


Réponse initiale et illustration de l'ancien numéro (septembre 2012 => mars 2012)

Vous pouvez utiliser le formulaire de recherche avancée GitHub :

  • Choisissez Code, Repositoriesou Usersdans le menu déroulant et
  • utilisez les préfixes correspondants répertoriés pour ce type de recherche .

Par exemple, utilisez la repo:username/repo-namedirective pour limiter la recherche à un référentiel de code .
La Advanced Searchpage " " initiale comprend la section:

Recherche de code :

La recherche de code examinera tout le code hébergé publiquement sur GitHub. Vous pouvez également filtrer par:

  • la langue language:
  • le nom du référentiel (y compris le nom d'utilisateur) repo:
  • le chemin du fichier path:

Donc, si vous sélectionnez le Codesélecteur de recherche " ", votre requête recherchant un texte dans un référentiel fonctionnera:

Bon sélecteur de recherche


Ce qui est incroyablement inutile de GitHub est que:

  • si vous oubliez de mettre le bon sélecteur de recherche (ici " Code"), vous obtiendrez un message d'erreur:
    " Invalid search query. Try quoting it."

Mauvais sélecteur pour le fichier de code

  • le message d'erreur ne vous aide pas du tout.
    Aucun montant de " quoting it" ne vous permettra de sortir de cette erreur.

  • une fois que vous obtenez ce message d'erreur, vous ne recevez pas les sections vous rappelant la bonne association entre les sélecteurs de recherche (" Repositories", " Users" ou " Language") et les filtres de recherche (à droite) (ici " repo:").
    Toute tentative supplémentaire que vous effectuez n'affichera pas ces associations (sélecteurs-filtres). Seul le message d'erreur que vous voyez ci-dessus ...
    La seule façon de récupérer ces tableaux est en cliquant sur l' Advance Searchicône " ":

Icône de recherche avancée sur GitHub

  • le " Everything" sélecteur de recherche, qui est la valeur par défaut, est en fait le mauvais pour tous les filtres de recherche! Sauf " language:" ...
    (Vous pourriez imaginer / supposer que " Everything" vous aiderait à choisir le sélecteur de recherche qui fonctionne réellement avec le filtre de recherche " repo:", mais non. Ce serait trop facile)

  • vous ne pouvez pas spécifier le sélecteur de recherche que vous souhaitez Advance Searchuniquement via le champ " "!
    (mais vous pouvez le faire pour " language:", même si " Search Language" est une autre zone de liste déroulante juste en dessous du " Search for" 'type' ...)

Sélecteur de recherche incorrect


Ainsi, l'expérience de l'utilisateur est généralement la suivante:

  • vous cliquez sur " Advanced Search", jetez un œil sur ces sections de filtres et remarquez celui que vous souhaitez utiliser: " repo:"
  • vous effectuez une première recherche avancée " repo:jruby/jruby stat", mais avec le sélecteur de recherche par défaut " Everything"
    => FAIL! (et les tableaux affichant l'association "Sélecteurs-Filtres" ont disparu )
  • vous remarquez que "Search for" selector thingy, select the first choice " Repositories" ("Dah! Je veux chercher dans les dépôts ...")
    => FAIL!
  • abattu, vous sélectionnez le prochain choix de sélecteurs (ici, " Users"), sans même regarder ledit sélecteur, juste pour lui donner un autre essai ...
    => FAIL!
  • "Vissez ça, la recherche GitHub est cassée ! Je suis parti d'ici!"
    ...
    (La recherche avancée GitHub n'est en fait pas interrompue. Seule leur interface graphique est ...)

Donc, pour récapituler, si vous voulez "chercher quelque chose dans le code d'un projet Github", comme l'OP Ben Humphreys , n'oubliez pas de sélectionner le " Code" sélecteur de recherche ...

VonC
la source
êtes-vous sûr, j'ai essayé repo:"jruby/jruby" stat repo:"jruby" stat jruby: stataucun de ceux qui fonctionnent
Tom H
@TomH: à première vue, cela pourrait être un bug du côté de GitHub, comme commenté sur superuser.com/a/179900/141
VonC
1
@DannyStaple Eh bien, ils semblent être conscients du problème, si vous regardez la mission décrite dans github.com/blog/1116-tim-pease-is-a-githubber : "Tim sera très probablement [...] piratage des expériences de recherche améliorées pour toutes les propriétés GitHub ". Assurez-vous de répondre à leur tweet GitHub ( twitter.com/#!/github/status/197070106768048128 ), comme je l'ai fait ( twitter.com/#!/VonC_/status/197565733830541313 )
VonC
9
FWIW J'ai contacté GitHub parce que je n'ai obtenu aucun résultat de recherche lors de la restriction des recherches à mes repos. Tim Pease a répondu qu'ils rencontraient des difficultés avec le volume des index repo, ils ont donc migré vers des serveurs d'index fragmentés. Il n'y a pas d'ETA lorsque tous les dépôts seront migrés.
M. Dudley
3
Je viens d'utiliser les conseils de cette réponse et cela fonctionne aussi pour moi, mais j'ai une mise en garde à ajouter. Le nom du référentiel doit toujours être en minuscules même si GitHib le répertorie partout ailleurs d'une manière différente. Par exemple, (après avoir défini la liste déroulante Code, etc., comme ci-dessus), essayez la même recherche avec: repo: wordpress / wordpress vs repo: WordPress / WordPress ... seule la première donnera des résultats.
ethanpil
22

Les référentiels privés récents ont un champ de recherche pour rechercher dans ce référentiel.

entrez la description de l'image ici

Déconcertant, il semble que cette fonctionnalité ne soit pas disponible pour les référentiels publics.

Patrick Linskey
la source
1
Je me demande si c'est une décision commerciale modeste pour inciter les gens à passer à la version payante? Ne ressemble pas à github mais quand même.
Sylvain
3
@Sylvain Il ne pense pas que cela soit fait comme un encouragement à la mise à niveau, car même après la mise à niveau, vous n'obtiendrez pas ce champ de recherche pour les référentiels publics. Au lieu de cela, je pense que la recherche principale utilise un index qui n'inclut pas de référentiels privés, et donc vous ne perdez pas de fonctionnalité lorsque vous payez pour un référentiel privé, ils ont dû ajouter une autre façon de rechercher dans ce référentiel privé uniquement, d'où le supplément champ de texte.
avernet
2
Imaginez le surcoût d'eux ayant un index de recherche pour chaque ligne de code dans chaque dépôt! Insensé! C'est pourquoi ils ne le font que pour les dépôts privés ..
Jonny Nott
1
La recherche est maintenant dans l'en-tête, comme la recherche globale.
Tib
20

METTRE À JOUR

Le piratage du bookmarklet ci-dessous est interrompu en raison de problèmes XHR et de modifications de l'API.

Heureusement, Github a maintenant "Une toute nouvelle recherche de code" qui fait parfaitement le travail.


Découvrez ce vaudou: script utilisateur de recherche de code Github .

Suivez les instructions là-bas, ou si vous détestez gonfler votre navigateur avec des scripts et des extensions, utilisez mon bundle bookmarkified du script utilisateur:

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

Enregistrez la source ci-dessus en tant qu'URL d'un nouveau signet. Accédez à n'importe quel dépôt Github, cliquez sur le signet et bam : recherche de code ajaxified sur la page .

CAVEAT Github doit indexer un référentiel avant de pouvoir le rechercher.

Avant le Bookmarklet

Abracadabra...

Après - Regardez dans la deuxième barre de menu après les onglets les plus à gauche: Fichiers, Commits, Branches ...

Voici un exemple de recherche dans le référentiel de spécifications ECMAScript 5.1 annoté:

Exemple de recherche dans le référentiel de spécifications ECMAScript 5.1 annoté

fny
la source
Lorsque j'utilise le plugin (Chrome), cela fonctionne très bien dans le repo scratchdot / github-code-search, mais pas dans aucun autre repo.
forforf
Cela devrait fonctionner dans la page d'accueil de n'importe quel dépôt. Peut-être que vous essayez depuis une autre page? J'ai posté une capture d'écran d'un exemple de recherche dans un autre référentiel de mon message.
fny
Ah! J'ai en fait découvert pourquoi ces recherches peuvent avoir échoué: un dépôt doit attendre son tour pour l'indexation. Compte tenu du nombre de référentiels actifs, je soupçonne que cela prend un peu de temps.
fny
2
@ user456584 c'est nouveau pour moi. Vous voudrez peut-être également informer Google et Mozilla .
fny
2
J'ai compris pourquoi le plugin ne fonctionne pas, c'est parce que le nom du dépôt doit être en minuscules. (Voir mon commentaire sur la réponse de VonC ci-dessus). J'ai déjà soumis un patch sur GitHub, j'espère que l'auteur d'origine le verra. github.com/skratchdot/github-code-search.user.js/pull/5
ethanpil
10

Bien que la réponse de @ VonC fonctionne pour certains référentiels, malheureusement pour de nombreux référentiels, vous ne pouvez pas en ce moment. Github ne les indexe tout simplement pas (comme commenté à l'origine par @emddudley). Ils ne l'ont indiqué nulle part sur leur site Web, mais ils vous diront si vous demandez de l'aide:

De: Tim Pease
Nous avons cessé d'ajouter du code nouvellement poussé dans notre index de recherche de code. Le volume de code a dépassé notre index de recherche actuel et nous travaillons à passer à une architecture de recherche plus évolutive. Je suis désolé pour l'ennui. Nous n'avons pas d'estimation pour quand ce nouvel index de recherche sera opérationnel, mais quand il sera prêt, un article de blog sera publié (https://github.com/blog).

Malheureusement, il n'y a aucun moyen de savoir quels référentiels ne sont pas indexés à part le manque de résultats (qui pourraient également provenir d'une mauvaise requête).

Il n'y a également aucun moyen de suivre ce problème autre que d'attendre qu'ils bloguent (ou de regarder ici sur SO).

De: Tim Pease
Je crains que notre outil de suivi des problèmes ne soit interne, mais nous pouvons vous avertir dès que le nouvel index de recherche est opérationnel.

studgeek
la source
Ils devraient au moins mentionner que certains résultats de recherche peuvent être omis. Cela craint totalement lorsque je refactorise le code et que je recherche des occurrences de code qui sont là mais qui ne sont pas mentionnées par GitHub.
Nicodemuz
0

Je recherche le code source à l'intérieur des référentiels Github avec l' extension gratuite Sourcegraph Chrome ... Mais j'ai téléchargé Chrome d'abord , je savais que d'autres navigateurs le supportaient, comme - et peut-être seulement - Firefox.

J'ai parcouru les documents sur l'extension Chrome de SourceForge, puis j'ai également examiné ce dont j'avais besoin pour rechercher des noms de répertoire avec le moteur de recherche de Github lui-même, en lisant certains des documents de recherche Codebase de Github.

Tyler Curtis Jowers
la source