Usando o Git, como eu poderia pesquisar em todos os arquivos em todas as ramificações locais por uma determinada string?
Específico do GitHub: é possível realizar a pesquisa acima em todos os ramos do GitHub? (Existem várias ramificações remotas no meu repositório remoto do GitHub que, idealmente, não precisaria ser derrubado para esta pesquisa ...)
Respostas:
Você pode fazer isso em um repositório Git:
A pesquisa avançada do GitHub possui capacidade de pesquisa de código:
A pesquisa de código examinará todo o código hospedado publicamente no GitHub. Você também pode filtrar por:
language:
repo:
path:
fonte
git grep ...
. Olhe para as outras respostas, elas são muito melhores que essa, mesmo que estejam marcadas como a resposta aceita!path:
, porque a documentação não parece clara onde aplicar esse filtro, supondo que esteja antes das aspas no exemplo de consulta?Se você usar o comando @manojlds Git grep e receber um erro:
então você deve usar xargs :
Consulte também Como grep (pesquisar) código confirmado no histórico do Git
fonte
Em muitos casos,
git rev-list --all
pode retornar um grande número de confirmações, levando uma eternidade para verificar. Se você, em vez de pesquisar em todas as confirmações de todas as ramificações do histórico do repositório, apenas deseja pesquisar todas as dicas de ramificações, poderá substituí-las porgit show-ref --heads
. Então, no total:ou:
Dica: Você pode gravar a saída no arquivo para visualizar em um editor:
fonte
git show-ref --heads
lista o hash e o nome da referência para que (2ª linha) procure duas vezes. entãogit show-ref --heads | cut -d' ' -f2
é melhor, pois ele listará apenas os nomes de referência.git show-ref --heads -s
gera somente o hash SHA1. Além disso, se houver várias ramificações apontando para o mesmo commit, você terá duplicatas. Você pode removê-los comsort -u
, dessa forma #git show-ref --heads -s | sort -u | xargs git grep ...
function gsearch { git grep $1 $(git show-ref --heads) | grep "refs/heads" | grep $1 } # last grep to keep grep color highlight
Existem alguns problemas com as soluções listadas aqui (até aceitas).
Você não precisa listar todos os hashes, pois receberá duplicatas. Além disso, leva mais tempo.
Ele se baseia nisso, onde você pode pesquisar uma sequência
"test -f /"
em várias ramificaçõesmaster
e,dev
comoque é o mesmo que
Então aqui vai.
Ele encontra os hashes para a ponta de todas as ramificações locais e pesquisa apenas nas confirmações:
Se você precisar procurar em ramificações remotas, adicione
-a
:Mais distante:
fonte
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
ou ele vai falhar com->
símbolo na lista de arquivos, o que denota local para relação ramos remotoVocê pode tentar isso:
fonte
git log --all -s"search_string"