Réponses:
Oui, si vous vous assurez que git développe un glob plutôt que votre shell alors il correspondra à n'importe quel niveau donc quelque chose comme ça (les guillemets sont importants) devrait fonctionner correctement.
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
aussi utile est legit diff master HEAD --name-only
''
) sont également importants! git diff -- src/*.js
devrait êtregit diff -- 'src/*.js'
Pour inclure des fichiers de manière récursive (y compris le répertoire actuel), cela a fonctionné pour moi:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
Soit utilisez la globstar de votre shell (qui effectue une recherche récursive) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
ou utilisez find:
find -name '*.py' -print0 | xargs -0 git diff --
Ces deux éléments sont des noms spéciaux et des espaces protégés. Bien que vous souhaitiez peut-être filtrer les répertoires ayant l'extension .py :)
1 J'aime faire d' git diff -- {.,**}/*.py
habitude
2 Lorsque globstar est activé, git diff -- **/*.py
inclut déjà ./*.py
. Dans la page de manuel de Bash: 'Si suivi d'un /, deux * adjacents correspondront uniquement aux répertoires et sous-répertoires.'
Argument de ligne de commande pour l'extension.
git diff *.py
Dans l'alternative, vous pouvez accéder find
à git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
et sans les en- têtes en criant
Comme testé sur git version 2.18.0, l'extension de fichier doit être entre guillemets. Si vous souhaitez trouver les dernières différences entre votre référentiel local et le référentiel distant, après l'extraction, vous pouvez utiliser:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Par exemple:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
Aucune des réponses ci-dessus ne semble fonctionner pour moi sous git bash
Windows. Je ne sais pas si c'est une chose de version (j'utilise 1.8.4) ou une chose Windows / bash; aussi, dans mon cas, je voulais différencier deux branches où chaque branche avait des fichiers supplémentaires non présents dans l'autre branche (donc les fichiers basés sur «trouver» sont négligés).
Quoi qu'il en soit, cela a fonctionné pour moi (dans mon exemple, à la recherche d'un diff entre les fichiers python):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
affichera uniquement les différences dans les fichiers non mis en scène.
J'ai trouvé cette question parce que je voulais exclure des .info
fichiers de git diff
. J'ai réalisé cela en le mettant en scène avec git add *.info
, ce qui réduit les fichiers restants.
J'ai fini avec ceci:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
Cela affiche les différences pour la validation spécifiée uniquement si le nom de fichier contient le mot «test» (insensible à la casse) et ne se termine pas par .sql
, modifiez le pipeline si nécessaire pour votre cas.