Existe-t-il une option permettant de limiter git diff
à un ensemble donné d'extensions de fichier?
Oui, si vous vous assurez que git développe un glob plutôt que votre Shell, il correspondra à n'importe quel niveau, donc quelque chose comme ça (les citations sont importantes) devrait fonctionner correctement.
git diff -- '*.c' '*.h'
Soit utilisez le globstar de votre shell (qui effectue une recherche récursive)1, 2:</ p> ou utilisez find: Les deux sont des noms spéciaux et une preuve d'espacement. Bien que vous souhaitiez peut-être filtrer les répertoires ayant l'extension .py :) 1shopt -s globstar
git diff -- *.py **/*.py
find -name '*.py' -print0 | xargs -0 git diff --
git diff -- {.,**}/*.py
habituellement
2 </ sup> Lorsque globstar est activé, git diff -- **/*.py
inclut déjà ./*.py
. Dans la page de manuel de Bash: 'Si suivi de /, deux * adjacents ne correspondront qu'aux répertoires et sous-répertoires.'
Pour inclure des fichiers de manière récursive (y compris le répertoire en cours), cela a fonctionné pour moi:
git diff -- '***.py'
Argument de ligne de commande pour l'extension.
git diff *.py
Sinon, vous pouvez transférer find
dans git diff
:
find . -name '*.py' -type f | git diff --
Pour les modèles de fichiers simples, cela semble fonctionner:
$ git ls-files -zm '*.txt' | xargs --null git diff
Whitespace safe, et vous pouvez aussi avoir plusieurs extensions:
$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff
Je me suis retrouvé avec ceci:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --
Cela montre les différences pour le commit spécifié uniquement si le nom du fichier contient le mot 'test' (insensible à la casse) et ne se termine pas par .sql
, modifiez le pipeline si nécessaire.
Aucune des réponses ci-dessus ne semble fonctionner pour moi sous git bash
sous Windows. Je ne sais pas si c'est une version (j'utilise la version 1.8.4) ou une version Windows/bash (j'utilise la version 1.8.4); aussi, dans mon cas, je voulais diff deux branches où chaque branche avait des fichiers supplémentaires non présents dans l’autre branche (ainsi les fichiers basés sur 'trouver' sont négligents).
Quoi qu'il en soit, cela a fonctionné pour moi (dans mon exemple, rechercher un diff entre des fichiers python):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diff
ne montrera que les différences dans les fichiers non-staged.
J'ai trouvé cette question parce que je voulais exclure les fichiers .info
de git diff
. J'ai réalisé cela en le mettant en scène avec git add *.info
, ce qui réduit les fichiers laissés.
Comme j'ai testé sur la version 2.18.0 de Git, nous devrions écrire l'extension de fichier entre guillemets doubles. Si vous voulez trouver les dernières différences entre le référentiel local et celui distant, après avoir extrait, vous pouvez l'écrire comme ci-dessous:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Par exemple:
git diff master@{1} Origin/master --name-only "*.cs"