Wyszukaj kod w projekcie Github


272

Czy istnieje sposób na grep dla czegoś w kodzie projektu Github?

Mógłbym pobrać źródło i grepować je lokalnie, ale zastanawiałem się, czy jest to możliwe za pośrednictwem interfejsu internetowego lub innej firmy.

Pomysły?


również kasa code.ohloh.net :)
obimod 16.04.13

W przypadku repozytoriów
drorw

Odpowiedzi:


255

Aktualizacja ze stycznia 2013: nadeszła nowa wyszukiwarka! , na podstawie elasticsearch.org :

Wyszukiwanie statystyk w repozytorium ruby ​​zostanie wyrażone jako stat repo:ruby/rubyi będzie teraz działać tylko w trybie TM .
(w nazwie repozytorium nie jest rozróżniana test repo:wordpress/wordpresswielkość liter: zwraca to samo co test repo:Wordpress/Wordpress)

wprowadź opis zdjęcia tutaj

Da:

wprowadź opis zdjęcia tutaj

I masz wiele innych przykładów wyszukiwania, opartych na obserwatorach , widelcach lub ...


Aktualizacja z lipca 2012 r. (Dawne czasy wyszukiwania Lucene i słabe indeksowanie kodu, w połączeniu ze zepsutym interfejsem GUI, zachowano tutaj w celu archiwizacji):

Wyszukiwanie (oparte na SolrQuerySyntax ) jest teraz bardziej liberalne, a przerażające „ Invalid search query. Try quoting it.” zniknęło przy użyciu domyślnego selektora wyszukiwania „Wszystko” :)

(Podejrzewam, że możemy wszyscy oprócz Tima Pease'a , który w jednym z jego celów „hakował ulepszone funkcje wyszukiwania dla wszystkich właściwości GitHub ”, i wspominałem wtedy o tym przepełnieniu stosu ;))

Oto ilustracja grepa w kodzie ruby: będzie szukał repozytoriów i użytkowników, ale także tego, co chciałem przeszukać: kod!

GitHub bardziej liberalne wyniki wyszukiwania


Pierwsza odpowiedź i ilustracja poprzedniego wydania (wrzesień 2012 => marzec 2012)

Możesz użyć formularza wyszukiwania zaawansowanego GitHub :

  • Wybierz Code, Repositoriesczy Usersz listy rozwijanej i
  • użyj odpowiednich prefiksów wymienionych dla tego typu wyszukiwania .

Na przykład użyj repo:username/repo-namedyrektywy, aby ograniczyć wyszukiwanie do repozytorium kodu .
Początkowa Advanced Searchstrona „ ” zawiera sekcję:

Wyszukiwanie kodu :

Wyszukiwanie kodu przejrzy cały kod hostowany publicznie na GitHub. Możesz także filtrować według:

  • język language:
  • nazwa repozytorium (w tym nazwa użytkownika) repo:
  • ścieżka do pliku path:

Jeśli więc wybierzesz Codeselektor wyszukiwania „ ”, wyszukiwanie grep dla tekstu w repozytorium będzie działać:

Dobry selektor wyszukiwania


Co jest niezwykle pomocne z GitHub jest to, że:

  • jeśli zapomnisz umieścić właściwy selektor wyszukiwania (tutaj „ Code”), pojawi się komunikat o błędzie:
    Invalid search query. Try quoting it.

Niepoprawny selektor dla filtru kodu

  • komunikat o błędzie w ogóle ci nie pomaga.
    Żadna liczba „ quoting it” nie spowoduje usunięcia tego błędu.

  • po pojawieniu się tego komunikatu o błędzie nie są wyświetlane sekcje przypominające o prawidłowym powiązaniu między selektorami wyszukiwania („ Repositories”, „ Users” lub „ Language”) a (prawymi) filtrami wyszukiwania (tutaj „ repo:”).
    Każda kolejna próba, której dokonasz, nie spowoduje wyświetlenia tych powiązań (selektorów-filtrów). Tylko komunikat o błędzie widoczny powyżej ...
    Jedynym sposobem na odzyskanie tych tablic jest kliknięcie Advance Searchikony „ ”:

Ikona wyszukiwania zaawansowanego w serwisie GitHub

  • W „ Everything” selektor wyszukiwania, który jest domyślnym, jest rzeczywiście źle jeden dla wszystkich filtrów wyszukiwania! Poza „ language:” ...
    (Można wyobrazić / zakładamy, że „ Everything” pomoże Ci wybrać cokolwiek wyszukiwania selektor faktycznie działa z „filtr repo:”, ale nope. To byłoby zbyt łatwe)

  • nie możesz określić wybranego selektora wyszukiwania tylko w polu „ Advance Search”!
    (ale możesz dla „ language:”, mimo że „ Search Language” to kolejne pole kombi tuż pod „ Search for” „typ”…)

Błędny selektor wyszukiwania


Tak więc wrażenia użytkownika są zwykle następujące:

  • klikniesz „ Advanced Search”, przejrzysz te sekcje filtrów i zauważysz, że chcesz użyć: „ repo:
  • wykonujesz pierwsze wyszukiwanie zaawansowane „ repo:jruby/jruby stat”, ale z domyślnym selektorem wyszukiwania „ Everything
    => FAIL! (i tablice wyświetlające powiązanie „Selektory-filtry” zniknęły )
  • zauważysz, że selektor „Szukaj”, wybierz pierwszy wybór „ Repositories” („Dah! Chcę wyszukiwać w repozytoriach ...”)
    => FAIL!
  • odrzucony, wybierasz następny wybór selektorów (tutaj „ Users”), nawet nie patrząc na wspomniany selektor, tylko po to, aby spróbować jeszcze raz ...
    => FAIL!
  • „Pieprzyć to, wyszukiwanie w GitHub zostało przerwane ! Nie ma mnie tutaj!”
    ...
    (Wyszukiwanie zaawansowane GitHub nie jest zepsute. Tylko ich GUI jest ...)

Podsumowując, jeśli chcesz „szukać czegoś w kodzie projektu Github”, tak jak OP Ben Humphreys , nie zapomnij wybrać „ Code” selektora wyszukiwania…


czy jesteś pewien, że repo:"jruby/jruby" stat repo:"jruby" stat jruby: statnie próbowałem żadnego z nich
Tom H

@TomH: na pierwszy rzut oka może to być błąd po stronie GitHub, skomentowany na superuser.com/a/179900/141
VonC

1
@DannyStaple Cóż, wydaje się , że zdają sobie sprawę z problemu, jeśli spojrzysz na misję opisaną w github.com/blog/1116-tim-pease-is-a-githubber : „Tim najprawdopodobniej będzie [...] włamanie w celu poprawy jakości wyszukiwania dla wszystkich właściwości GitHub ". Pamiętaj, aby odpowiedzieć na ich tweet GitHub ( twitter.com/#!/github/status/197070106768048128 ), tak jak ja ( twitter.com/#!/VonC_/status/197565733830541313 )
VonC

9
FWIW Skontaktowałem się z GitHub, ponieważ nie otrzymałem żadnych wyników wyszukiwania podczas ograniczania wyszukiwania do moich repozytoriów. Tim Pease odpowiedział, że mieli problemy z liczbą indeksów repo, więc przeprowadzili migrację na podzielone serwery indeksów. Nie ma ETA, kiedy migrowane będą wszystkie repozytoria.
M. Dudley,

3
Właśnie skorzystałem z porady zawartej w tej odpowiedzi i dla mnie też działa, ale mam jedno zastrzeżenie do dodania. Nazwa repo powinna zawsze być pisana małymi literami, nawet jeśli GitHib wymienia ją wszędzie indziej w inny sposób. Na przykład (po ustawieniu menu rozwijanego Kod itp., Jak wyżej) spróbuj tego samego wyszukiwania za pomocą: repo: wordpress / wordpress vs repo: WordPress / WordPress ... tylko pierwszy przyniesie wyniki.
ethanpil

22

Ostatnie prywatne repozytoria mają pole wyszukiwania do przeszukiwania tego repozytorium.

wprowadź opis zdjęcia tutaj

Dziwnie wygląda na to, że ta funkcja nie jest dostępna dla publicznych repozytoriów.


1
Zastanawiam się, czy jest to mało komercyjny krok, aby skłonić ludzi do przejścia na wersję płatną? Nie brzmi jak github, ale nadal.
Sylvain

3
@Sylvain Nie wydaje się, aby zrobiono to jako zachętę do aktualizacji, ponieważ nawet po aktualizacji nie pojawi się to pole wyszukiwania publicznych repozytoriów. Zamiast tego uważam, że wyszukiwanie główne korzysta z indeksu, który nie obejmuje prywatnych repozytoriów, a więc nie tracisz funkcjonalności podczas płacenia za prywatne repozytorium, musieli dodać inny sposób przeszukiwania tylko tego prywatnego repozytorium, stąd dodatkowe pole tekstowe.
avernet

2
Wyobraź sobie, że narzuty te mają indeks wyszukiwania dla każdej linii kodu w każdym repozytorium! Szalony! Dlatego robią to tylko dla prywatnych repozytoriów.
Jonny Nott

1
Wyszukiwanie jest teraz w nagłówku, tak samo jak wyszukiwanie globalne.
Tib

20

AKTUALIZACJA

Poniższy hack bookmarkletu jest zepsuty z powodu problemów XHR i zmian API.

Na szczęście Github ma teraz „Całkiem nowe wyszukiwanie kodów”, które doskonale wykonuje to zadanie.


Sprawdź to voodoo: skrypt użytkownika do wyszukiwania kodu Github .

Postępuj zgodnie ze wskazówkami tam, lub jeśli nie lubisz nadużywać przeglądarki za pomocą skryptów i rozszerzeń, użyj mojego bukmacherskiego pakietu skryptu użytkownika:

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

Zapisz powyższe źródło jako adres URL nowej zakładki. Przejdź do dowolnego repozytorium Github, kliknij zakładkę i bam : in-page, szukaj kodu zlefikowanego .

CAVEAT Github musi zaindeksować repozytorium, zanim będzie można go przeszukać.

Przed Bookmarklet

Abrakadabra...

Po - Zajrzyj do drugiego paska menu po najbardziej lewych kartach: Pliki, zatwierdzenia, gałęzie ...

Oto przykładowe wyszukiwanie z adnotowanego repozytorium specyfikacji ECMAScript 5.1:

Przykładowe wyszukiwanie w adnotowanym repozytorium specyfikacji ECMAScript 5.1


Kiedy używam wtyczki (Chrome), działa ona dobrze w repozytorium scratchdot / github-code-search, ale nie działa w żadnym innym repozytorium.
dla

Powinien działać na stronie głównej każdego repozytorium. Być może próbujesz z innej strony? W swoim poście zamieściłem zrzut ekranu z przykładowego wyszukiwania w innym repozytorium.
fny

Aha! Naprawdę odkryłem, dlaczego te wyszukiwania mogły się nie powieść: repo musi czekać na swoją kolej na indeksowanie. Biorąc pod uwagę zillion aktywnych repozytoriów, podejrzewam, że zajmuje to trochę czasu.
pieprzyć

2
@ user456584 to dla mnie nowość. Możesz również powiadomić Google i Mozillę .
fny

2
Zrozumiałem, dlaczego wtyczka nie działa, ponieważ nazwa repozytorium musi być pisana małymi literami. (Zobacz mój komentarz do odpowiedzi VonC powyżej). Już przesłałem łatkę na GitHub, mam nadzieję, że oryginalny autor ją zobaczy. github.com/skratchdot/github-code-search.user.js/pull/5
ethanpil 11.01.2013

10

Podczas gdy odpowiedź @ VonC działa w przypadku niektórych repozytoriów, niestety w przypadku wielu repozytoriów nie możesz teraz. Github po prostu ich nie indeksuje (jak pierwotnie skomentował @emddudley). Nie podali tego nigdzie na swojej stronie, ale powiedzą ci, jeśli poprosisz o wsparcie:

Od: Tim Pease
Przestaliśmy dodawać nowo wypchnięty kod do naszego indeksu wyszukiwania kodu. Objętość kodu przerosła nasz obecny indeks wyszukiwania i pracujemy nad przejściem do bardziej skalowalnej architektury wyszukiwania. Przepraszam za irytację. Nie mamy oszacowania, kiedy ten nowy indeks wyszukiwania zostanie uruchomiony, ale kiedy będzie gotowy, opublikowany zostanie post na blogu (https://github.com/blog).

Irytujące jest to, że nie ma sposobu, aby stwierdzić, które repozytoria nie są indeksowane, poza brakiem wyników (które również mogą wynikać ze złego zapytania).

Nie ma też innego sposobu na śledzenie tego problemu niż czekanie na blogu (lub oglądanie tutaj na SO).

Od: Tim Pease
Obawiam się, że nasz moduł do śledzenia problemów jest wewnętrzny, ale możemy Cię powiadomić, gdy tylko pojawi się nowy indeks wyszukiwania.


Powinny przynajmniej wspomnieć, że niektóre wyniki wyszukiwania mogą zostać pominięte. Jest to całkowicie do bani, gdy refaktoryzuję kod i szukam wystąpień kodu, które są tam, ale nie wspomniane przez GitHub.
Nikodemuz


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.