Jak mogę wyszukać komunikat zatwierdzenia w GitHub?


328

Nie w repozytorium Git , a konkretnie w GitHub - jak wyszukiwać tylko komunikaty zatwierdzenia określonego repozytorium / gałęzi?


3
Czy repo jest publiczne czy prywatne?

2
Co powiesz na wyszukiwanie komunikatów zatwierdzania we wszystkich widłach? Próbujesz uniknąć ponownego wynalezienia koła, gdy główne repozytorium ma ponad 100 widelców!
Daniel Sokołowski,

Jakieś zmiany od tego czasu?
Pavel Šimerda,

Chcę przeszukać sieciowe zatwierdzenia
frumbert

Odpowiedzi:


68

Od 2017 roku jest to funkcja zawarta w samym GitHub .

Użyte przez nich wyszukiwanie przykładowe to repo:torvalds/linux merge:false crypto policy

wprowadź opis zdjęcia tutaj Obraz GIF z https://github.com/blog/2299-search-commit-messages


Podczas wyszukiwania prywatnego repozytorium, do którego mam dostęp do odczytu / zapisu, pojawia się błąd uprawnień.
anon58192932,

1
Oglądam od pięciu minut i nie mogę zrozumieć, dokąd idzie mysz po zmniejszeniu i przesunięciu w prawo.
Kevin Krumwiede

1
@KevinKrumwiede prawdopodobnie do przycisku „zatrzymaj nagrywanie” haha
Corey Cole

Zrezygnowałem i użyłem „git log --all --grep = searhterm”
Edwin Evans

206

Kiedyś byłeś w stanie to zrobić, ale GitHub usunął tę funkcję w pewnym momencie w połowie 2013 roku. Aby to osiągnąć lokalnie, możesz:

git log -g --grep=STRING

(Użyj -gflagi, jeśli chcesz przeszukać inne gałęzie i wiszące zatwierdzenia.)

-g, --walk-reflogs
    Instead of walking the commit ancestry chain, walk reflog entries from
    the most recent one to older ones.

143
dlaczego do cholery to usunęli? To bardzo przydatna funkcja.
Josh Brown

1
Factor Mystic: I.want.spaces.in. ten ciąg zwykle wystarcza.
dbrower

11
Wskazówka: pomiń -gflagę w najczęstszych przypadkach użycia. Nie zastanawiałem się zbytnio, ale -gwydaje się, że wyszukiwanie sięga zaledwie jednego miesiąca. git log -g --grep=fixpodczas gdy w developgałęzi repozytorium, która obejmuje ~ 8000 zobowiązań, obejmuje dwa lata, sięga zaledwie 2 lutego
Dan Dascalescu

1
@DanDascalescu Dziwne, byłem w stanie znaleźć zobowiązania cofające się co najmniej o 5 miesięcy z -gflagą.
Chrispy

134

Aktualizacja (2017/01/05):

GitHub opublikował aktualizację, która pozwala teraz wyszukiwać w komunikatach zatwierdzeń z poziomu ich interfejsu użytkownika. Zobacz post na blogu, aby uzyskać więcej informacji.


Miałem to samo pytanie i wczoraj skontaktowałem się z kimś z GitHub:

Ponieważ zmienili wyszukiwarkę na Elasticsearch, wyszukiwanie komunikatów zatwierdzania za pomocą interfejsu GitHub nie jest możliwe. Ale ta funkcja znajduje się na liście życzeń zespołu.

Niestety obecnie nie ma daty wydania tej funkcji.


7
+1 Zaoszczędziłeś mi bezowocny czas w GitHubie, zastanawiając się, jak osiągnąć to, co według mnie byłoby oczywistą funkcjonalnością. Musimy teraz sklonować repo lokalnie, aby grep za pomocą wiersza poleceń zamiast tego. Jezu, to postęp, prawda ?! ;)
McNab

68
Nawet ich zaawansowane wyszukiwanie w interfejsie internetowym nie pozwala na wyszukiwanie w najważniejszym polu - w rzeczywistym komunikacie zatwierdzenia. To absolutnie absurdalne IMO. Github przygotuj się do gry!
Brad Thomas

22
Tak. Zapomnij o tym, że stworzyli usługę internetową, która pomaga zrewolucjonizować i popularyzować oprogramowanie typu open source, a fakt, że nie mają tej jednej funkcji, sprawia, że ​​jest to kompletne oszustwo!
Jon Cairns

12
Dziękujemy za poświęcenie czasu na opublikowanie treści swojego dyskursu w GitHub w łatwo dostępnym miejscu publicznym. Absurdem jest to, że jest to jedyny sposób na uzyskanie takich informacji przez społeczeństwo - to głupie, że GitHub nie ma publicznego narzędzia do śledzenia problemów - ale w obliczu takiej głupoty to, co tutaj zrobiłeś, jest użytecznym sposobem zapobiegania setkom inni marnują czas na wysyłanie tego samego żądania. Dziękujemy za setki roboczogodzin zaoszczędzonej pracy.
Mark Amery

1
Nie znacznie lepiej niż publiczny tracker Atlasiana, który jest pełen 7-letnich otwartych problemów z tysiącami głosów pozytywnych ...
Askdesigners

58

Krótka odpowiedź brzmi: nie można przeszukiwać wiadomości zatwierdzających bezpośrednio na stronie github.com. Na razie zalecamy lokalne git greprozwiązanie zaproponowane przez innych w tym wątku.

W pewnym momencie GitHub zaoferował git grepwyszukiwanie stylu dla komunikatów zatwierdzania dla pojedynczego repozytorium. Niestety takie podejście ujawniło atak typu „odmowa usługi”, który może uniemożliwić dostęp do serwera plików. Z tego powodu usunęliśmy git grepwyszukiwanie.

Obecne szacunki z tyłu koperty stawiają liczbę zatwierdzeń w GitHubie na poziomie około 80 miliardów. Chociaż inżynierowie Google śmieją się za naszymi plecami, jest to dość duża liczba dokumentów do przechowywania w ElasticSearch. Chcielibyśmy umożliwić wyszukiwanie tego zestawu danych, ale nie jest to trywialny projekt.


2
+1. To wydaje się potwierdzać to, co myślałem, pisząc moją odpowiedź : komunikat zatwierdzenia nie jest indeksowany: pracujesz z indeksowaniem git diff's(co oznacza zawartość zatwierdzeń, a nie metadane zatwierdzenia)
VonC

A może po prostu przycisk „przeskocz, by zatwierdzić”? Obecnie jest dostępny z adresu URL - stackoverflow.com/a/12214817/817632, ale nie ma dla niego interfejsu (nie wiem o tym). Przypadek użycia - znajdź skrót zatwierdzenia gdzieś w bower.json zamiast wersji i chcesz zobaczyć, co dokładnie robi to zatwierdzenie. Zaoszczędzi to trochę czasu google.
Olga

44

Zostało to usunięte z GitHub. Używam:

$git log --all --oneline | grep "search query"

wprowadź opis zdjęcia tutaj

Możesz także filtrować według autora:

$git log --all --oneline --author=rickhanlonii | grep "search query"

3
To działało dla mnie, ale najbardziej pozytywna odpowiedź nie.
makdad

21

Na stronie pomocy dotyczącej wyszukiwania kodu wydaje się, że nie jest to jeszcze możliwe.

Możesz wyszukiwać tekst w repozytorium, w tym możliwość wybierania plików lub ścieżek do przeszukiwania, ale nie możesz określić, że chcesz wyszukiwać w zatwierdzeniach.

Może im to zasugerujesz ?


18
Wydaje się, że jest to bardziej „domyślny” przypadek użycia, jeśli chodzi o wyszukiwanie w repozytorium. Zwłaszcza dla kogoś, kto poznaje nowe repozytorium z mnóstwem zatwierdzeń. Powinny zdecydowanie rozważyć dodanie tego.
Jose Browne,

19

Możesz to zrobić w przypadku repozytoriów przeszukanych przez Google (wyniki różnią się w zależności od repozytorium).

Wyszukaj we wszystkich oddziałach wszystkich przeszukanych repozytoriów hasło „zmień licencję”

Witryna „zmień licencję”: https://github.com/*/*/commits

Wyszukaj w gałęzi głównej wszystkich przeszukanych repozytoriów hasło „zmień licencję”:

witryna „zmień licencję”: https://github.com/*/*/commits/master

Wyszukaj w gałęzi głównej wszystkich zindeksowanych repozytoriów Twittera hasło „zmień licencję”

Witryna „zmień licencję”: https://github.com/twitter/*/commits/master

Przeszukaj wszystkie gałęzie repozytorium twitter / some_project pod kątem „zmień licencję”

Witryna „zmień licencję”: https://github.com/twitter/some_project/commits


4
@DZenBot, jeśli nie jest to publiczne repozytorium, to prawdopodobnie masz już lokalną kopię do git grep, po prostu zamieszczam tę odpowiedź dla tych, którzy nie chcą klonować całego publicznego repozytorium, aby dowiedzieć się, kiedy wprowadzono jakąś zmianę. Używam go głównie do znajdowania zatwierdzeń, które usuwają wsparcie dla starszych wersji GTK lub gdy licencje zmieniają się na gpl3
technosaurus

15

Aktualizacja ze stycznia 2017 r. (Dwa lata później):

Możesz teraz wyszukiwać komunikaty zatwierdzania ! (wciąż tylko w gałęzi master)

https://cloud.githubusercontent.com/assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


Luty 2015: Nie jestem pewien, czy kiedykolwiek będzie to możliwe, biorąc pod uwagę obecną bazę infrastruktury wyszukiwania w Elasticsearch (wprowadzoną w styczniu 2013 ).

Jako odpowiedź „czerpiąc z wiarygodnych i / lub oficjalnych źródeł”, oto wywiad przeprowadzony z osobami GitHub odpowiedzialnymi za wprowadzenie Elasticsearch w GitHub (sierpień 2013)

Tim Pease : Mamy tam dwa typy dokumentów: jeden to plik kodu źródłowego, a drugi to repozytorium. Sposób, w jaki działa git, polega na tym, że masz zatwierdzenia i masz gałąź dla każdego zatwierdzenia. Dokumenty repozytorium śledzą ostatnie zatwierdzenie dla tego konkretnego repozytorium, które zostało zindeksowane. Gdy użytkownik wypycha nowe zatwierdzenie do Github, następnie pobieramy ten dokument repozytorium z elasticsearch. Następnie widzimy ostatnio zaindeksowane zatwierdzenie, a następnie otrzymujemy listę wszystkich plików, które zostały zmodyfikowane, dodane lub usunięte między tym ostatnim wypychaniem a tym, co wcześniej zindeksowaliśmy. Następnie możemy kontynuować i po prostu zaktualizować te dokumenty, które zostały zmienione. Nie musimy ponownie indeksować całego drzewa kodu źródłowego za każdym razem, gdy ktoś naciska.

Andrew Cholakian: Więc indeksujecie tylko, zakładam , gałąź master.

Tim Pease: Poprawnie. Dostaniesz się tam tylko na czele głównej gałęzi, a to wciąż dużo danych, dwa miliardy dokumentów, 30 terabajtów.

Andrew Cholakian: To jest niesamowicie ogromne.

[...]

Tim Pease: Z indeksowaniem kodu źródłowego podczas wypychania jest to proces samoleczenia.
Mamy ten dokument repozytorium, który śledzi ostatnie zindeksowane zatwierdzenie. Jeśli przeoczymy, po prostu przegapimy trzy zatwierdzenia, w których te zadania zawodzą, następny zatwierdzenie, które nadchodzi, wciąż patrzymy na różnicę między poprzednim zatwierdzonym przez nas indeksowaniem a tym, który widzimy z tym nowym wypychaniem.
Robisz to git diffi otrzymujesz wszystkie pliki, które zostały zaktualizowane, usunięte lub dodane. Możesz po prostu powiedzieć: „Dobra, musimy usunąć te pliki. Musimy dodać te pliki i tak dalej. ” To samoleczenie i takie podejście przyjęliśmy w przypadku prawie całej architektury.

Że wszystkie środki nie wszystkie gałęzie wszystkich repo będzie indeksowana z takim podejściem.
Globalne wyszukiwanie wiadomości zatwierdzania nie jest obecnie dostępne.
I sam Tim Pease potwierdza popełnić wiadomości nie są indeksowane .

Zauważ, że nie jest możliwe uzyskanie własnej elastycznej wyszukiwarki lokalnego indeksowania lokalnego klonu: patrz „ Przeszukiwanie repozytorium git za pomocą ElasticSearch

Ale w przypadku konkretnego repo najłatwiej jest go sklonować i wykonać:

git log --all --grep='my search'

(Więcej opcji w „ Jak przeszukiwać repozytorium Git według komunikatu zatwierdzenia? ”)


7

Ponieważ zostało to usunięte z GitHub, korzystałem z niego gitkw systemie Linux.

Z terminalu przejdź do swojego repozytorium i wpisz gitk.

Pośrodku GUI znajduje się pole wyszukiwania. Zapewnia dobry wybór filtrów:

Pasek wyszukiwania

Zakres - zawierający, dotykający ścieżek, dodający / usuwający ciąg, zmieniający dopasowanie linii

Typ dopasowania - Exact / IgnCase / Regexp

Wyszukaj pola - Wszystkie pola / Nagłówek / Komentarze / Osoba odpowiedzialna



4

Jeśli masz lokalną wersję repozytorium, możesz wypróbować ten surowy skrypt powłoki, który napisałem, aby otworzyć strony GitHub dla wszystkich zatwierdzeń pasujących do wyszukiwanego hasła w nowych kartach w domyślnej przeglądarce:

#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
    python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done

Po prostu zamień https://github.com/RepoOwnerUserName/RepoName/na rzeczywisty adres URL GitHub repozytorium, zapisz gdzieś skrypt (np. Jako githubsearch.sh, wykonaj go ( chmod +x githubsearch.sh), a następnie dodaj następujący ~/.bashrcplik do swojego pliku:

alias githubsearch='/path/to/githubsearch.sh'

Następnie z dowolnego miejsca w repozytorium Git po prostu zrób to na terminalu:

githubsearch "what you want to search for"

a wszelkie zatwierdzenia pasujące do wyszukiwanego hasła (bez rozróżniania wielkości liter) będą miały odpowiadające im strony GitHub otwarte w przeglądarce. (Ostrzegamy, że jeśli wyszukiwane hasło pojawia się w setkach zatwierdzeń, może to spowodować awarię przeglądarki i przez pewien czas zużywać procesor komputera).


0

Od połowy 2019 r. Po prostu wpisz wszystko, co chcesz wyszukać, w lewym górnym polu wyszukiwania, a następnie kliknij „Zatwierdza”.

wprowadź opis zdjęcia tutaj

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.