Comment rechercher sur github pour obtenir des correspondances exactes (comme ce que font les citations pour Google)

221

Je peux rechercher des correspondances exactes de Google en utilisant des guillemets comme "system <<-". Comment faire la même chose pour github? Je ne peux pas le faire fonctionner.

Juste un apprenant
la source

Réponses:

131

Tu ne peux pas. Les règles de recherche officielles de GitHub :

En raison de la complexité de la recherche de code, il existe quelques restrictions sur la façon dont les recherches sont effectuées:

  • Seule la branche par défaut est prise en compte. Dans la plupart des cas, ce sera le maître branche.
  • Seuls les fichiers inférieurs à 384 Ko sont consultables.
  • Vous devez toujours inclure au moins un terme de recherche lors de la recherche de code source. Par exemple, la recherche de language:gon'est pas valide, tandis que l' amazing language:goest.
  • Tout au plus, les résultats de la recherche peuvent afficher deux fragments du même fichier, mais il peut y avoir plus de résultats dans le fichier.
  • Vous ne pouvez pas utiliser les caractères génériques suivants dans le cadre de votre requête de recherche :
    . , : ; / \ ` ' " = * ! ? # $ & + ^ | ~ < > ( ) { } [ ]
    La recherche ignorera simplement ces symboles.

Solution de contournement:

Si vous devez rechercher dans un seul référentiel, vous pouvez le cloner localement et utiliser greppour trouver la chaîne exactement:

grep -r "system <<-" /repository_dir
DenisKolodin
la source
355
C'est terrible. Pourquoi ne le réparent-ils pas? Idéalement, je devrais pouvoir chercher avec une expression régulière. Où dois-je aller pour protester contre cela? :)
Daniel Darabos
10
J'ai demandé un soutien et ils ont répondu: "La possibilité d'échapper des caractères spéciaux dans la recherche GitHub est une fonctionnalité fréquemment demandée. Bien que je ne puisse faire aucune promesse, je +1 l'idée sur notre liste interne de demande de fonctionnalités." . Je pense que cela dépend de la taille de l'index: trop de code contient github.
DenisKolodin
10
Je pense que c'est un défi d'indexation. Faire fonctionner la recherche mot à mot entre guillemets est probablement un ordre de grandeur plus difficile que l'implémentation actuelle. Faire une recherche regex est probablement plus difficile> 1 ordre de grandeur ou même demander des ennuis .
Matt Kocaj
15
qu'en est-il des chaînes littérales qui contiennent des points ... comme ldap.mycomp.com?!?!?! Je n'ai pas besoin d'une expression régulière, je veux juste une recherche de chaînes
Jason
1
Ce n'est pas fixe car ils utilisent elasticsearch, ils doivent donc réindexer toutes les données avec un nouveau champ pour les prendre en considération, cela signifie beaucoup de disque.
Thomas Decaux
44

Vous pouvez utiliser Google directement.

Que dis-tu de ça?

"your_string_to_search" site::https://github.com
"your_string_to_search" site::https://gist.github.com
mrgloom
la source
81
Cela ne suppose-t-il pas que Google a accès à votre repo? Cela ne devrait pas être le cas pour les dépôts privés.
Joel B
1
cela fonctionne à l'intérieur des dépôts, comme:"alias agi=" site::https://github.com/robbyrussell/oh-my-zsh
sites
1
@juanpastas pouvez-vous donner un exemple complet de chaîne de recherche?
mrgloom
15
Cela avait plus de sens lorsque Google a toujours honoré les citations pour forcer une recherche exacte.
Kylotan
1
@FullMetalFist On dirait que oui, par exemple"your_string_to_search" site:https://github.com filetype:cpp
mrgloom
17

Aujourd'hui, j'essayais de rechercher une correspondance exacte des filter classfichiers nommés logback.xmldans n'importe quel dépôt sur Github. Et je suis venu avec la requête suivante qui a fait le travail.

"filter class" in:file filename:logback.xml

Pour permettre des correspondances exactes avec des guillemets, vous devez suivre votre recherche avec le modificateur "in: file". Les correspondances ne sont pas tout à fait exactes, le mot "classe" devra suivre le mot "filtre", mais il semble qu'il puisse y avoir 0 ou plusieurs espaces ou symboles entre les deux mots.

cessationoftime
la source
14
Je ne vois aucune différence de comportement lors de la recherche avec ou sans in:file.
Daniel Darabos
2
moi non plus, mais le fait que "foo bar" entre guillemets recherche des mots adjacents est une nouvelle très utile pour moi
Beni Cherniavsky-Paskin
4

Ajoutant à la réponse de @ mrgloom , si vous recherchez du code dans un langage de programmation spécifique dans Github en utilisant Google, vous pouvez faire quelque chose comme ceci dans la barre de recherche de Google:

  • indiquez la chaîne spécifique que vous recherchez à l'aide de l'opérateur de recherche "intext:"
  • ajoutez le langage de programmation qui vous intéresse en utilisant l'opérateur "ext:" (ie "ext: py", "ext: R", "ext: rb", etc.)
  • recherche dans tous les dépôts publics dans Github en utilisant l'opérateur "site:" mentionné mrgloom.

Exemple:

intext:"%% 2 == 0" ext:R site:github.com

Résultats Google de l'exemple

silviaegt
la source
1
intext:".set(" ext:JS site:github.comn'a pas fonctionné: /
Aditya MP
Vous avez raison! Je ne comprends pas pourquoi ... j'ai essayé intext:"set(" inurl:.js site:github.comet ça marche un peu, mais pas vraiment
silviaegt
1
J'ai donc continué à lire et apparemment les parenthèses sont ignorées dans les recherches Google. Cependant, je ne comprends pas pourquoi l'opérateur "ext" ne fonctionne pas. Selon cela, il s'agit d'un alias non documenté pour "filetype", mais je ne sais pas pourquoi "js" ne serait pas considéré comme un
silviaegt