231 votes

Comment filtrer git diff en fonction des extensions de fichiers ?

Existe-t-il une option permettant de restreindre git diff à un ensemble donné d'extensions de fichiers ?

322voto

Charles Bailey Points 244082

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 ceci (les guillemets sont importants) devrait fonctionner correctement.

git diff -- '*.c' '*.h'

1 votes

Ok, ma version git était trop vieille. Fonctionne comme annoncé avec la 1.7.8. Excellent.

6 votes

Le mien fonctionnait avec une expansion de l'accolade, à la git diff -- *.{c,h,etc}

9 votes

Le double tiret est important, par exemple. git diff master HEAD -- "*filename.txt" également utile est le git diff master HEAD --name-only

9voto

sehe Points 123151

Soit vous utilisez le globstar de votre shell (qui effectue une recherche récursive) 1 ,2 :

shopt -s globstar 
git diff -- *.py **/*.py

ou utiliser find :

find -name '*.py' -print0 | xargs -0 git diff --

Les deux sont des noms spéciaux et des preuves d'espacement. Cependant, vous pourriez vouloir filtrer les répertoires ayant l'extension .py :)


1 J'aime faire git diff -- {.,**}/*.py généralement

2 Lorsque globstar est activé, git diff -- **/*.py comprend déjà ./*.py . Dans la page de manuel de Bash : S'ils sont suivis d'un /, deux * adjacents ne correspondent qu'aux répertoires et sous-répertoires.

0 votes

El find ne fonctionne pas s'il n'y a pas de fichiers python dans le dépôt. Donc si vous avez un hook global, vous commencerez à différer des fichiers non python :(

4voto

Mat Points 104488

Pour les modèles de fichiers simples, cela semble fonctionner :

$ git ls-files -zm '*.txt' | xargs --null git diff

Les espaces blancs sont sûrs, et vous pouvez aussi avoir plusieurs extensions :

$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff

3voto

hughdbrown Points 15770

Argument de ligne de commande pour l'extension.

git diff *.py

Dans l'alternative, vous pouvez pipe find en git diff :

find . -name '*.py' -type f | git diff --

0 votes

Veuillez rendre la réponse un peu plus lisible. Vous auriez pu vous contenter de git diff *.py et sans les titres criards

1 votes

Les 'shout headings' étaient des #-commentaires dans un script shell.

0 votes

C'est la seule solution qui a fonctionné pour moi, les guillemets (etc.) ne fonctionnaient pas sur l'invite de commande de Windows.

0voto

TimWolla Points 11210

Je ne connais pas de méthode directe, mais ce que vous pourriez faire est : Rediriger la sortie de git diff dans un fichier et le parcourir avec votre éditeur préféré :

git diff > file

Ouvrez ensuite le fichier avec l'éditeur et utilisez la fonction de recherche pour rechercher vos extensions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X