GitHub: przeszukiwanie starszych wersji plików

98

Wiem, że korzystając z GitHub mogę przeszukiwać wszystkie aktualne wersje moich plików w repozytorium. Chciałbym jednak również przeszukać starsze wersje moich plików repozytorium. Na przykład, powiedzmy, miałem w kodzie funkcję o nazwie get_info (), ale usunąłem ją kilka wersji temu, czy można wyszukać get_info i znaleźć kod. Jeśli nie jest to możliwe przy użyciu GitHub, czy jest to możliwe z wiersza poleceń git?

EDYTOWAĆ

Podziękowania dla @Mark Longair za pokazanie, jak można to zrobić z wiersza poleceń git. Jeśli nie jest to możliwe w GitHubie, byłoby świetnie.

normski
źródło

Odpowiedzi:

121

Obecnie wydaje mi się, że nie jest możliwe przeszukiwanie całej historii kodu repozytorium na stronie github - najbliższe jest po prostu wyszukiwanie w aktualnym kodzie repozytorium z opcją „code search” na tej stronie .

Jednak w wierszu poleceń można znaleźć wszystkie zatwierdzenia, które wprowadziły lub usunęły wspomniane wiersze get_infoz -Sopcją git log. na przykład:

git log -Sget_info -p

(nie powinno być spacji między hasłem -Sa wyszukiwanym hasłem)

(uwaga: aby wyszukać więcej niż jedno słowo, otocz '):

git log -S'get info' -p

Tak więc przynajmniej powinno znaleźć zatwierdzenie, w którym funkcja została wprowadzona po raz pierwszy, i tę, która ją usunęła. Dodałem -p, żebyś też mógł zobaczyć łatki - jeśli wiele commits wprowadziło zmiany, które wspomniały o funkcji, która może być pomocna. Jeśli funkcja była tylko w innej gałęzi, może być również przydatna --alldo przeszukania wszystkich gałęzi.

Jefromi zwraca uwagę w komentarzu poniżej, że git 1.7.4 wprowadzi tę -Gopcję jako alternatywę - tę zmianę podsumowano w niedawnym poście na blogu Junio ​​Hamano (opiekuna git): http://gitster.livejournal.com/48191.html

Mark Longair
źródło
2
Tak, wiem, że mogę wyszukiwać komentarze, ale co z wyszukiwaniem kodu?
normski
10
Opcja -S faktycznie szuka w kodzie - znajduje wszystkie zatwierdzenia tam, gdzie get_infosą zawarte w różnicy wprowadzanej przez zatwierdzenie. Możesz się pomylić z --grepopcją, która przeszukuje komunikaty dziennika.
Mark Longair,
2
@normski: A ostatnie wersje git dodały podobną -Gopcję, która pobiera wyrażenie regularne zamiast stałego ciągu.
Cascabel
@Jefromi: dziękuję za wspomnienie - dodałem to do odpowiedzi, mam nadzieję, że wszystko w porządku.
Mark Longair,
2
@Anthony Damico: tak, po prostu zacytuj szukany ciąg, np.git log -S'get info' -p
Mark Longair