GitHub: поиск в старых версиях файлов

98

Я знаю, что с помощью GitHub я могу искать все текущие версии моих файлов в репо. Однако я также хотел бы поискать в старых версиях моих файлов репо. Например, скажем, у меня в коде была функция get_info (), но я удалил ее несколько версий назад, можно ли искать get_info и найти код. Если это невозможно с помощью GitHub, возможно ли это из командной строки git?

РЕДАКТИРОВАТЬ

Спасибо @Mark Longair за то, что показал, как это можно сделать из командной строки git. Если это невозможно в GitHub, это было бы отличной функцией.

Нормски
источник

Ответы:

121

В настоящее время я не верю, что можно выполнять поиск по всей истории кода репозитория на веб-сайте github - ближайший вариант - это просто поиск в текущем коде репозитория с опцией «поиск кода» на этой странице .

Однако, из командной строки, вы можете найти любые коммиты , которые введены или удаленные строки упоминая get_infoс -Sпараметром к git log. например:

git log -Sget_info -p

(nb, между -Sпоисковым запросом не должно быть пробелов )

(также обратите внимание: чтобы найти более одного слова, заключите в рамку '):

git log -S'get info' -p

Итак, как минимум, он должен найти фиксацию, в которой функция была впервые введена, и ту, которая ее удалила. Я добавил, -pчтобы вы также могли видеть исправления - если много коммитов вносят изменения, в которых упоминается функция, которая может быть полезна. Если функция была только в другой ветке, ее также можно было бы использовать --allдля поиска во всех ветвях.

Джефроми указывает в комментарии ниже, что git 1.7.4 представит этот -Gвариант в качестве альтернативы - это изменение резюмировано в недавнем сообщении в блоге Джунио Хамано (сопровождающий git): http://gitster.livejournal.com/48191.html

Марк Лонгэр
источник
2
Да, я знаю, что могу искать комментарии, но как насчет поиска кода?
normski
10
Параметр -S действительно просматривает код - он находит любые коммиты, get_infoсодержащиеся в diff, который вводит коммит. Возможно, вы запутались с --grepопцией, которая ищет сообщения журнала.
Марк Лонгэр
2
@normski: А в последних версиях git добавлена ​​аналогичная -Gопция, которая принимает регулярное выражение вместо фиксированной строки.
Cascabel
@Jefromi: спасибо, что упомянули об этом - я добавил это к ответу, надеюсь, что все в порядке.
Марк Лонгэр
2
@Anthony Damico: да, просто процитируйте строку поиска, напримерgit log -S'get info' -p
Марк Лонгэр