GitHub: pesquisa em versões mais antigas de arquivos

98

Eu sei que usando o GitHub posso pesquisar todas as versões atuais dos meus arquivos em um repositório. No entanto, também gostaria de pesquisar as versões mais antigas de meus arquivos repo. Por exemplo, digamos, eu costumava ter uma função chamada get_info () em meu código, mas a excluí várias versões atrás, é possível pesquisar get_info e encontrar o código. Se não for possível usar o GitHub, é possível a partir da linha de comando do git?

EDITAR

Obrigado a @Mark Longair por mostrar como isso pode ser feito a partir da linha de comando do git. Se não for possível no GitHub, seria um ótimo recurso.

Normski
fonte

Respostas:

121

Atualmente, não acredito que seja possível pesquisar dentro do histórico completo do código de um repositório no site do github - o mais próximo é apenas pesquisar no código atual de um repositório com a opção "pesquisa de código" nesta página .

No entanto, na linha de comando, você pode encontrar qualquer commit que introduziu ou removeu linhas mencionando get_infocom a -Sopção de git log. por exemplo:

git log -Sget_info -p

(nb não deve haver espaço entre -Se o termo de pesquisa)

(também observe: para pesquisar por mais de uma palavra, coloque-o '):

git log -S'get info' -p

Então, no mínimo isso deve encontrar o commit onde a função foi introduzida pela primeira vez e aquele que a removeu. Eu adicionei o -ppara que você também possa ver os patches - se muitos commits introduziram mudanças que mencionaram a função que podem ser úteis. Se a função estava apenas em outro ramo, também pode ser útil usar --allpara pesquisar todos os ramos.

Jefromi aponta em um comentário abaixo que o git 1.7.4 apresentará a -Gopção como uma alternativa - esta mudança é resumida em um post recente de Junio ​​Hamano (mantenedor do git): http://gitster.livejournal.com/48191.html

Mark Longair
fonte
2
Sim, eu sei que posso pesquisar comentários, mas e quanto a pesquisar o código?
normski
10
A opção -s faz olhar no código - ele encontra nenhum commit onde get_infoestá contido no diff que o introduz cometer. Você pode estar se confundindo com a --grepopção, que pesquisa as mensagens de log.
Mark Longair
2
@normski: E versões recentes do git adicionaram a -Gopção semelhante , que usa um regex em vez de uma string fixa.
Cascabel
@Jefromi: obrigado por mencionar isso - eu adicionei isso à resposta, espero que esteja tudo bem.
Mark Longair
2
@Anthony Damico: sim, apenas cite a string de pesquisa, por exemplogit log -S'get info' -p
Mark Longair