Nie w repozytorium Git , a konkretnie w GitHub - jak wyszukiwać tylko komunikaty zatwierdzenia określonego repozytorium / gałęzi?
Nie w repozytorium Git , a konkretnie w GitHub - jak wyszukiwać tylko komunikaty zatwierdzenia określonego repozytorium / gałęzi?
Odpowiedzi:
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
Obraz GIF z https://github.com/blog/2299-search-commit-messages
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 -g
flagi, 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.
-g
flagę w najczęstszych przypadkach użycia. Nie zastanawiałem się zbytnio, ale -g
wydaje się, że wyszukiwanie sięga zaledwie jednego miesiąca. git log -g --grep=fix
podczas gdy w develop
gałęzi repozytorium, która obejmuje ~ 8000 zobowiązań, obejmuje dwa lata, sięga zaledwie 2 lutego
-g
flagą.
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.
Krótka odpowiedź brzmi: nie można przeszukiwać wiadomości zatwierdzających bezpośrednio na stronie github.com. Na razie zalecamy lokalne git grep
rozwiązanie zaproponowane przez innych w tym wątku.
W pewnym momencie GitHub zaoferował git grep
wyszukiwanie 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 grep
wyszukiwanie.
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.
git diff's
(co oznacza zawartość zatwierdzeń, a nie metadane zatwierdzenia)
Zostało to usunięte z GitHub. Używam:
$git log --all --oneline | grep "search query"
Możesz także filtrować według autora:
$git log --all --oneline --author=rickhanlonii | grep "search query"
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 ?
Możesz to zrobić w przypadku repozytoriów przeszukanych przez Google (wyniki różnią się w zależności od repozytorium).
Witryna „zmień licencję”: https://github.com/*/*/commits
witryna „zmień licencję”: https://github.com/*/*/commits/master
Witryna „zmień licencję”: https://github.com/twitter/*/commits/master
Witryna „zmień licencję”: https://github.com/twitter/some_project/commits
Aktualizacja ze stycznia 2017 r. (Dwa lata później):
Możesz teraz wyszukiwać komunikaty zatwierdzania ! (wciąż tylko w gałęzi master)
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 togit diff
i 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? ”)
Ponieważ zostało to usunięte z GitHub, korzystałem z niego gitk
w systemie Linux.
Z terminalu przejdź do swojego repozytorium i wpisz gitk
.
Pośrodku GUI znajduje się pole wyszukiwania. Zapewnia dobry wybór filtrów:
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
Działa to dobrze z poziomu Eclipse , dopóki GitHub nie doda tej funkcji:
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 ~/.bashrc
plik 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).