Git
Português (Brasil) ▾ Topics ▾ Latest version ▾ git-grep last updated in 2.33.0

NOME

git-grep - Imprima linhas que coincidam com um padrão

RESUMO

git grep [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp]
	   [-v | --invert-match] [-h|-H] [--full-name]
	   [-E | --extended-regexp] [-G | --basic-regexp]
	   [-P | --perl-regexp]
	   [-F | --fixed-strings] [-n | --line-number] [--column]
	   [-l | --files-with-matches] [-L | --files-without-match]
	   [(-O | --open-files-in-pager) [<pager>]]
	   [-z | --null]
	   [ -o | --only-matching ] [-c | --count] [--all-match] [-q | --quiet]
	   [--max-depth <profundidade>] [--[no-]recursive]
	   [--color[=<quando>] | --no-color]
	   [--break] [--heading] [-p | --show-function]
	   [-A <post-context>] [-B <pre-context>] [-C <context>]
	   [-W | --function-context]
	   [--threads <num>]
	   [-f <arquivo>] [-e] <padrão>
	   [--and|--or|--not|(|)|-e <padrão>…​]
	   [--recurse-submodules] [--parent-basename <basename>]
	   [ [--[no-]exclude-standard] [--cached | --no-index | --untracked] | <árvore>…​]
	   [--] [<pathspec>…​]

DESCRIÇÃO

Procure por padrões especificados nos arquivos rastreados da árvore de trabalho, bolhas registradas no arquivo do índice ou nas bolhas de determinados objetos da árvore. Os padrões são listas de uma ou mais expressões de pesquisa separadas por caracteres de nova linha. Uma cadeia de caracteres vazia utilizada como uma expressão de pesquisa coincide com todas as linhas.

CONFIGURAÇÃO

grep.lineNumber

Caso seja definido como true, é predefinido que a opção -n seja utilizada.

grep.column

Caso seja definido como true, é predefinido que a opção --column seja utilizada.

grep.patternType

Define o comportamento de correspondência predefinido. A utilização de um valor basic, extended, fixed ou perl ativará as opções --basic-regexp, --extended-regexp, --fixed-strings, ou --perl-regexp, enquanto o valor default retornará ao comportamento de coincidências já predefinida.

grep.extendedRegexp

Caso seja definido como true, a predefinição é que a opção --full-name seja utilizada. Esta opção é ignorada quando a opção de configuração grep.patternType for configurada com um valor diferente de default.

grep.threads

Quantidade de threads de trabalho "grep" a serem utilizados. If unset (or set to 0), Git will use as many threads as the number of logical cores available.

grep.fullName

Caso seja definido como true, é predefinido que a opção --full-name seja utilizada.

grep.fallbackToNoIndex

Caso seja definido como true, retorne para git grep --no-index caso o git grep seja executado fora de um repositório Git. A predefinição retorna para false.

OPÇÕES

--cached

Em vez de procurar por arquivos rastreados na árvore de trabalho, pesquisar por bolhas registradas no índice do arquivo.

--no-index

Localize os arquivos no diretório atual que não sejam gerenciados pelo Git.

--untracked

Além de localizar nos arquivos rastreados da árvore de trabalho, localize também nos arquivos não rastreados.

--no-exclude-standard

Localize também nos arquivos ignorados, ignorando o mecanismo .gitignore. Útil apenas com a opção --untracked.

--exclude-standard

Não preste atenção aos arquivos informados que foram ignorados através do mecanismo .gitignore. Útil apenas ao pesquisar por arquivos no diretório atual sem a opção ‘--no-index’.

--recurse-submodules

Pesquise recursivamente em cada submódulo ativo e averiguado no repositório. Quando utilizado em combinação com a opção <tree>, todo o prefixo gerado do submódulo será o nome do objeto <tree> na origem do projeto. Esta opção não tem qualquer efeito caso --no-index seja utilizado.

-a
--text

Processe os arquivos binários como se fossem texto.

--textconv

Honre com as configurações do filtro "textconv".

--no-textconv

Não respeite as configurações do filtro textconv. Esta é a predefinição.

-i
--ignore-case

Ignore as diferenças entre maiúsculas e minúsculas entre os padrões e os arquivos.

-I

Não coincida padrões em arquivos binários.

--max-depth <profundidade>

Para cada <pathspec> utilizado na linha de comandos, desça a <profundidade> máxima dos níveis do diretório. Um valor de -1 significa sem limite. Esta opção será ignorada caso <pathspec> contenha curingas ativos. Em outras palavras, caso "a*" coincida com um diretório chamado "a*", o curinga "*" coincidirá literalmente para que --max-depth ainda seja eficaz.

-r
--recursive

O mesmo que --max-depth=-1; Esta é a predefinição.

--no-recursive

O mesmo que --max-depth=0.

-w
--word-regexp

Coincida com o padrão apenas no limite da palavra (inicie no início de uma linha ou preceda um caractere que não seja uma palavra; termine no final de uma linha ou seguido por um caractere que não seja uma palavra).

-v
--invert-match

Selecione as linhas que não coincidam.

-h
-H

É predefinido que o comando exiba o nome do arquivo para cada coincidência. A opção -h é utilizada para suprimir esta saída. A opção -H existe para ser completo e não faz nada exceto a reposição do -h utilizado anteriormente na linha de comando.

--full-name

O comando geralmente gera caminhos relativos ao diretório atual ao ser executado a partir de um subdiretório. Esta opção impõem que os caminhos saiam relativos ao topo do diretório do projeto.

-E
--extended-regexp
-G
--basic-regexp

Para os padrões, utilize uma expressão regular (regexp) POSIX estendido/básico. A predefinição é utilizar uma expressão regular (regexp) básica.

-p
--perl-regexp

Para os padrões, utilize expressões regulares compatíveis com o Perl.

A compatibilidade para estes tipos de expressões regulares é uma dependência opcional no momento da compilação. Caso o Git não tenha sido compilado com este suporte, o Git será encerrado caso esta opção seja utilizada.

-F
--fixed-strings

Utilize uma cadeia de caracteres fixos para os padrões (não interprete o padrão como uma expressão regular "regex").

-n
--line-number

Prefixe o número da linha às linhas coincidentes.

--column

Prefixe o deslocamento do byte (byte-offset) indexado em 1 da primeira coincidência desde o início da linha coincidente.

-l
--files-with-matches
--name-only
-L
--files-without-match

Em vez de exibir todas as linhas coincidentes, exiba apenas os nomes dos arquivos que contenha (ou não) as coincidências. Para uma melhor compatibilidade com o comando git diff, a opção --name-only é um sinônimo de --files-with-matches.

-O[<pager>]
--open-files-in-pager[=<pager>]

Abra os arquivos coincidentes no pager (não a saída do grep). Caso o pager seja "less" (menor) ou "vi" e o usuário usar apenas um padrão, o primeiro arquivo será posicionado na primeira coincidência de forma automática. O argumento pager é opcional; se utilizado, deverá estar preso à opção sem um espaço. Caso pager não seja utilizado, a predefinição do pager será utilizado (consulte core.pager no git-config[1]).

-z
--null

Use \0 como um delimitador para os nomes do caminho na saída, e as imprima literalmente. Sem esta opção, os nomes do caminho com caracteres "incomuns" são citados como explicado na variável de configuração core.quotePath (consulte git-config[1]).

-o
--only-matching

Imprima apenas as partes que coincidam (não vazias) de uma linha coincidente com cada uma dessas partes em uma linha separada na saída.

-c
--count

Em vez de exibir todas as linhas coincidentes, exiba a quantidade de linhas coincidentes.

--color[=<quando>]

Exibir as coincidências em cores. Always (sempre) é o valor predefinido, as outras opções são "never" ou "auto".

--no-color

Desative o destacamento das coincidências, mesmo quando o arquivo da configuração fornecer a predefinição para a saída colorida. O mesmo que --color=never.

--break

Imprima uma linha vazia entre as coincidências dos diferentes arquivos.

--heading

Exiba o nome do arquivo acima das coincidências nesse arquivo em vez de exibir no início de cada linha.

-p
--show-function

Exibe a linha anterior que contenha o nome da função da coincidência, a menos que a linha correspondente seja o próprio nome da função. O nome é determinado da mesma maneira que o git diff elabora os cabeçalhos do patch hunk (consulte Definindo um cabeçalho personalizado do hunk em gitattributes[5]).

-<num>
-C <num>
--context <num>

Exiba um <num> (quantidade) de linhas iniciais e finais, coloque uma linha contendo -- entre os grupos contínuos coincidentes.

-A <num>
--after-context <num>

Exibe <num> (quantidade) de linhas finais e coloque uma linha contendo -- entre os grupos contínuos coincidentes.

-B <num>
--before-context <num>

Exibe <num> (quantidade) de linhas iniciais e coloque uma linha contendo -- entre os grupos contínuos coincidentes.

-W
--function-context

Exibe o texto ao redor da linha anterior que contenha um nome da função até o nome anterior ao próximo, exibindo efetivamente toda a função em que a coincidência foi encontrada.

--threads <num>

Quantidade de threads de trabalho "grep" a serem utilizados. Para mais informações consulte grep.threads em CONFIGURAÇÃO.

-f <arquivo>

Leia os padrões vindos de um <arquivo>, um por linha.

A passagem do padrão através do <arquivo> permite o provimento de um padrão de pesquisa contendo um \0.

Nem todos os tipos de padrões suportam padrões contendo \0. O Git irá exibir um erro caso um determinado tipo de padrão não tiver compatibilidade com ele. O tipo do padrão --perl-regexp quando compilado contra a estrutura do PCRE v2 tem uma compatibilidade mais ampla para esses tipos de padrões.

Nas versões do Git anteriores à 2.23.0, os padrões contendo \0 seriam silenciosamente considerados corrigidos. Isso nunca foi documentado, também houve interações ímpares e não documentadas entre, por exemplo, os padrões não ASCII contendo \0 e --ignore-case.

Em futuras versões, podemos aprender a oferecer suporte aos padrões contendo \0 para mais estruturas de pesquisa, até então morreremos quando o tipo do padrão em questão não mais os suportar.

-e

O próximo parâmetro é o padrão. Esta opção deve ser utilizada para padrões que comecem com - e deve ser utilizado em scripts que passam a entrada do usuário ao "grep". Os vários padrões são combinados por or (ou).

--and
--or
--not
( …​ )

Determina como os vários padrões são combinados utilizando expressões booleanas. --or é o operador predefinido. --and tem maior precedência que --or. -e deve ser utilizado para todos os padrões.

--all-match

Ao utilizar múltiplas expressões de padrões combinadas com --or, este flag é utilizado para limitar a coincidência nos arquivos que possuam linhas que coincidam com todas elas.

-q
--quiet

Não produza linhas coincidentes; em vez disso, encerre com uma condição 0 quando houver uma coincidência e diferente de 0 quando não houver.

<árvore>…​

Em vez de localizar os arquivos rastreados na árvore de trabalho, localize as bolhas nas árvores informadas.

--

Sinaliza o fim das opções; o restante dos parâmetros são os limitadores do <pathspec>.

<pathspec>…​

Se utilizado, limite a localização dos caminhos que coincidam a pelo menos um padrão. Ambas são compatíveis, as coincidências dos caminhos principais e os padrões bolha(7).

Para mais detalhes sobre a sintaxe <pathspec>, consulte a entrada pathspec em gitglossary[7].

EXEMPLOS

git grep 'time_t' -- '*.[ch]'

Procura por time_t em todos os arquivos rastreados .c e .h no diretório de trabalho e em seus subdiretórios.

git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)

Procura por uma linha que contenha #define e até mesmo MAX_PATH ou PATH_MAX.

git grep --all-match -e NODE -e Unexpected

Procura por uma linha que tenha NODE ou Unexpected nos arquivos que tenham linhas que coincidam com ambas.

git grep solução -- :^Documentação

Procura por solução, excluindo os arquivos em Documentação.

NOTAS SOBRE OS ENCADEAMENTOS

A opção --threads (e a configuração grep.threads) serão ignoradas quando a opção --open-files-in-pager for utilizado, impondo uma execução com thread único.

Ao fazer um grep em um objeto armazenado (com a opção --cached ou oferecendo três objetos), a execução com várias threads poderá ser mais lenta do que uma thread única caso --textconv seja informado e haja muitas conversões de texto. Portanto, caso esteja com baixo desempenho, pode ser desejável utilizar --threads=1.

GIT

Parte do conjunto git[1]