Respuestas:
Sí, si se asegura de que git expanda un globo en lugar de su caparazón, coincidirá en cualquier nivel, por lo que algo como esto (las comillas son importantes) debería funcionar bien.
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
también es útil elgit diff master HEAD --name-only
''
) también son importantes! git diff -- src/*.js
debería sergit diff -- 'src/*.js'
Para incluir archivos de forma recursiva (incluido el directorio actual) esto funcionó para mí:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
Utilice el globstar de su caparazón (que realiza una búsqueda recursiva) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
o use find:
find -name '*.py' -print0 | xargs -0 git diff --
Ambos son nombres especiales y prueba de espacios en blanco. Aunque es posible que desee filtrar los directorios que tienen la extensión .py :)
1 me gusta hacer git diff -- {.,**}/*.py
generalmente
2 Cuando globstar está habilitado, git diff -- **/*.py
ya incluye ./*.py
. En la página de manual de Bash: 'Si sigue a /, dos * s adyacentes coincidirán solo con directorios y subdirectorios'.
Argumento de línea de comando para extensión.
git diff *.py
Como alternativa, puede canalizar find
a git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
y sin los títulos de gritos
Como se probó en la versión 2.18.0 de git, la extensión del archivo debe ser entre comillas dobles. Si desea encontrar las últimas diferencias entre su repositorio local y el remoto, después de extraer, puede usar:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Por ejemplo:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
Ninguna de las respuestas anteriores parece funcionar para mí git bash
en Windows. No estoy seguro de si se trata de una versión (estoy usando 1.8.4) o de Windows / bash; Además, en mi caso, quería diferenciar dos ramas donde cada rama tenía archivos adicionales que no estaban presentes en la otra rama (por lo tanto, los basados en "buscar" son negligentes).
De todos modos, esto funcionó para mí (en mi ejemplo, buscando una diferencia entre los archivos de Python):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
solo mostrará diferencias en archivos sin clasificar.
Encontré esta pregunta porque quería excluir .info
archivos de git diff
. Lo logré preparándolo git add *.info
, lo que reduce los archivos que quedan.
Terminé con esto:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
Esto muestra las diferencias para la confirmación especificada solo si el nombre de archivo contiene la palabra 'prueba' (no distingue entre mayúsculas y minúsculas) y no termina con .sql
, modifique la canalización según sea necesario para su caso.