Jak wyszukiwać w serwisie github, aby uzyskać dokładne dopasowania (np. Co robią cytaty dla Google)

217

Mogę wyszukiwać dokładne dopasowania z Google, używając cytatów takich jak "system <<-". Jak zrobić podobną rzecz dla github? Nie mogę sprawić, żeby działało.

Tylko uczeń
źródło

Odpowiedzi:

129

Nie możesz Oficjalne reguły wyszukiwania w GitHub :

Ze względu na złożoność wyszukiwania kodu istnieje kilka ograniczeń dotyczących sposobu wyszukiwania:

  • Uwzględniany jest tylko domyślny oddział. W większości przypadków będzie to mistrz oddziału.
  • Przeszukiwane są tylko pliki mniejsze niż 384 KB .
  • Podczas wyszukiwania kodu źródłowego zawsze należy podać co najmniej jedno wyszukiwane hasło. Na przykład wyszukiwanie language:gojest nieprawidłowe, podczas gdy amazing language:gojest.
  • Co najwyżej wyniki wyszukiwania mogą pokazywać dwa fragmenty z tego samego pliku, ale plik może zawierać więcej wyników.
  • Nie można użyć następujących symboli wieloznacznych jako części zapytania :
    . , : ; / \ ` ' " = * ! ? # $ & + ^ | ~ < > ( ) { } [ ]
    Wyszukiwanie po prostu zignoruje te symbole.

Obejście:

Jeśli chcesz przeszukać pojedyncze repozytorium, możesz je sklonować lokalnie i użyć grepdo znalezienia łańcucha dokładnie:

grep -r "system <<-" /repository_dir
DenisKolodin
źródło
353
To jest okropne. Dlaczego tego nie naprawią? Idealnie powinienem być w stanie wyszukiwać za pomocą wyrażenia regularnego. Gdzie mam to zaprotestować? :)
Daniel Darabos
10
Poprosiłem o wsparcie, a oni odpowiedzieli: „Możliwość ucieczki od znaków specjalnych w wyszukiwaniu GitHub jest często wymaganą funkcją. Chociaż nie mogę składać żadnych obietnic, podam +1 pomysłowi na naszej wewnętrznej liście żądań funkcji”. . Myślę, że to zależy od wielkości indeksu: zbyt wiele kodu zawiera github.
DenisKolodin
10
Uważam, że jest to wyzwanie związane z indeksowaniem. Sprawienie, by wyszukiwanie podwójnych cytatów działało, jest prawdopodobnie o rząd wielkości trudniejsze niż obecna implementacja. Wykonanie wyszukiwania wyrażeń regularnych jest prawdopodobnie trudniejsze o 1 rząd wielkości, a nawet może wymagać kłopotów .
Matt Kocaj,
14
co z dosłownymi ciągami znaków, które zawierają kropkę ... jak ldap.mycomp.com?!?!?! Nie potrzebuję wyrażenia regularnego, chcę tylko LITERALNEGO wyszukiwania ciągów
Jason
1
Nie jest to naprawione, ponieważ używają elasticsearch, dlatego powinni ponownie indeksować wszystkie dane w nowym polu, aby wziąć to pod uwagę, co oznacza dużo dysku.
Thomas Decaux,
44

Możesz używać Google bezpośrednio.

Co powiesz na to?

"your_string_to_search" site::https://github.com
"your_string_to_search" site::https://gist.github.com
mrgloom
źródło
81
Czy to nie zakłada, że ​​Google ma dostęp do Twojego repozytorium? Nie powinno tak być w przypadku prywatnych transakcji repo.
Joel B
1
działa wewnątrz repozytoriów, takich jak:"alias agi=" site::https://github.com/robbyrussell/oh-my-zsh
strony
1
@juanpastas czy możesz podać pełny przykład wyszukiwanego ciągu?
mrgloom
15
To miało więcej sensu, gdy Google nadal honorowało cytaty, aby wymusić dokładne wyszukiwanie.
Kylotan
1
@FullMetalFist Wygląda na to tak, na przykład"your_string_to_search" site:https://github.com filetype:cpp
mrgloom,
17

Dzisiaj starałem się znaleźć dokładne dopasowanie filter classw plikach nazwanych logback.xmlw dowolnym repozytorium na Githubie. I wymyśliłem następujące zapytanie, które spełniło zadanie.

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

Aby włączyć dokładne dopasowanie do cudzysłowów, należy śledzić wyszukiwanie za pomocą modyfikatora „in: file”. Dopasowania nie są dość dokładne, słowo „klasa” będzie musiało występować po słowie „filtr”, ale wydaje się, że między tymi dwoma słowami może znajdować się 0 lub więcej znaków spacji lub symboli.

czas przestoju
źródło
14
Nie widzę żadnej różnicy w zachowaniu podczas wyszukiwania z lub bez in:file.
Daniel Darabos
2
ja też nie, ale fakt, że „foo bar” w cudzysłowie szuka sąsiednich słów, jest dla mnie bardzo przydatną wiadomością
Beni Cherniavsky-Paskin
3

Dodając do odpowiedzi @ mrgloom , jeśli szukasz kodu w określonym języku programowania w Github za pomocą Google, możesz zrobić coś takiego w pasku wyszukiwania Google:

  • podaj konkretny ciąg, którego szukasz, używając operatora wyszukiwania „intext:”
  • dodaj interesujący Cię język programowania, używając operatora „ext:” (tj. „ext: py”, „ext: R”, „ext: rb” itp.)
  • szukaj we wszystkich publicznych repozytoriach w Github za pomocą operatora „site:” wspomnianego mrgloom.

Przykład:

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

Wyniki Google z przykładu

silviaegt
źródło
1
intext:".set(" ext:JS site:github.comnie działał: /
Aditya MP
Masz rację! Nie rozumiem, dlaczego ... Próbowałem intext:"set(" inurl:.js site:github.comi to trochę działa, ale nie bardzo
silviaegt
1
Czytałem więc dalej i najwyraźniej nawiasy są ignorowane podczas wyszukiwania w Google. Jednak nie rozumiem, dlaczego operator „ext” nie działa. Zgodnie z tym jest to nieudokumentowany alias dla „typu pliku”, ale nie wiadomo, dlaczego „js” nie byłby uważany za jeden
silviaegt