Respostas:
Sim, se você garantir que o git expanda um glob em vez do seu shell, ele corresponderá a qualquer nível, então algo assim (aspas são importantes) deve funcionar bem.
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
também útil é ogit diff master HEAD --name-only
''
) também são importantes! git diff -- src/*.js
deveria ser #git diff -- 'src/*.js'
Para incluir arquivos recursivamente (incluindo o diretório atual), isso funcionou para mim:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
Use o globstar do seu shell (que faz uma pesquisa recursiva) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
ou use find:
find -name '*.py' -print0 | xargs -0 git diff --
Ambos são nomes especiais e à prova de espaço em branco. Embora você possa filtrar os diretórios com a extensão .py :)
1 eu gosto de fazer git diff -- {.,**}/*.py
normalmente
2 Quando o globstar está ativado, git diff -- **/*.py
já inclui ./*.py
. Na página de manual do Bash: 'Se seguido por a /, dois * s adjacentes corresponderão apenas a diretórios e subdiretórios.'
Argumento de linha de comando para extensão.
git diff *.py
Como alternativa, você pode canalizar find
para git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
e sem os cabeçalhos dos gritos
Conforme testado no git versão 2.18.0, a extensão do arquivo deve ser citada entre aspas duplas. Se você deseja encontrar as últimas diferenças entre o repositório local e o remoto, após puxar, você pode usar:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Por exemplo:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
Nenhuma das respostas acima parece funcionar para mim git bash
no Windows. Não tenho certeza se é uma versão (estou usando o 1.8.4) ou Windows / bash; Além disso, no meu caso, eu queria diferenciar dois ramos em que cada ramo tinha arquivos adicionais que não estavam presentes no outro ramo (portanto, os baseados em 'localizar' são negligentes).
De qualquer forma, isso funcionou para mim (no meu exemplo, procurando uma diferença entre arquivos python):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
mostrará apenas diferenças em arquivos não estágios.
Encontrei esta pergunta porque queria excluir .info
arquivos de git diff
. Consegui isso organizando-o com git add *.info
, o que reduz os arquivos restantes.
Acabei com isso:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
Isso mostra diffs para a confirmação especificada apenas se o nome do arquivo contiver a palavra 'teste' (sem distinção entre maiúsculas e minúsculas) e não terminar com .sql
, modifique o pipeline conforme necessário para o seu caso.