web-dev-qa-db-fra.com

Filtre git diff par type de changement

Existe-t-il un moyen de limiter git diff vers des fichiers modifiés?

Je voudrais voir les différences entre deux commits, mais exclure les chemins qui n'existent pas dans l'un ou l'autre (ajouts/suppressions). Le Perl one-liner suivant illustre la plupart de ce que je veux:

git diff master.. | Perl -lnwe 'print unless /^(new|deleted) file/../^diff/ and not /^diff/'

Mais cela laisse diff --git a/path b/path lignes pour les fichiers nouveaux ou supprimés. De plus, ce serait beaucoup plus agréable si je n'avais pas à analyser (échoue également si un morceau contient quelque chose qui correspond à/^ diff /, par exemple).

Une autre alternative que j'ai essayée était:

git diff --name-status (args) | Perl -lnwe 'print if s/^M\s+//' | xargs git diff (args) --

Sa sortie est meilleure, mais elle semble toujours hackeuse.

100
benizi

Tu recherches --diff-filter=M pour n'afficher que les fichiers * M * odifiés entre les deux branches.

De man git-diff

--diff-filter=[ACDMRTUXB*]

Sélectionnez uniquement les fichiers

  • A Ajouté
  • C Copié
  • D Supprimé
  • M Modifié
  • R Renommé
  • T ont leur type (mode) changé
  • U Non fusionné
  • X Inconnu
  • B ont rompu leur association
  • * Tout ou rien

Toute combinaison de caractères de filtre peut être utilisée.

Lorsque * (Tout ou rien) est ajouté à la combinaison, tous les chemins sont sélectionnés s'il existe un fichier qui correspond à d'autres critères dans la comparaison; s'il n'y a pas de fichier correspondant à d'autres critères, rien n'est sélectionné.

177
zen

Comme Git 2.10 (Q3 2016) nous le rappellera, il existe un moyen plus simple de "tout afficher sauf les fichiers ajoutés/supprimés". (en fait depuis Git 1.8.5, juillet 2013)

 git diff --diff-filter=ad master..

Voir commit 16726cf (14 juillet 2016) par Junio ​​C Hamano (gitster) .
(Fusionné par Junio ​​C Hamano - gitster - in commit 2f8c654 , 08 août 2016)

diff: document diff-filter exclusion

En v1.8.5 jours, 7f2ea5f (diff: autoriser la lettre minuscule à spécifier la classe de changement à exclure, 2013-07-17) a enseigné la "--diff-filter "mécanisme pour prendre les lettres minuscules en exclusion , mais nous avons oublié de le documenter.

Alors la documentation sur diff-options comprend (enfin) maintenant:

Ces lettres majuscules peuvent être déclassées pour être exclues.
Par exemple. --diff-filter=ad exclut les chemins ajoutés et supprimés.

15
VonC

Vous pouvez utiliser le drapeau --diff-filter pour faire précisément cela. git diff --diff-filter=CMRTUXB master.. devrait tout montrer sauf les fichiers ajoutés/supprimés.

4
Lily Ballard

Pour voir tous les fichiers modifiés et nouveaux que vous pouvez utiliser

git diff --name-only --diff-filter=ACMR PREV_VERSION master

PREV_VERSION est le hachage de votre premier commit.

Pour obtenir une exportation au format Zip, vous pouvez utiliser ce code

git archive --output=export.Zip HEAD $(git diff --name-only --diff-filter=ACMR PREV_VERSION HEAD)

Remarque: .gitignore n'est pas dans export.Zip

1
iwg

J'ai utilisé Notepad ++ (Windows) et ces expressions régulières pour filtrer les types d'extension et certains chemins à partir d'un fichier diff.

^Index.*\.(dll|pdb|exe|txt|Zip|log|ism|resx|tlog|htm|lib)$[\s\S.]*?^Index
^Index: Shared/.+$[\s\S.]*?^Index
^Index: Next/source/Utility/.+$[\s\S.]*?^Index

Le seul problème est, quand il arrive à la fin. Vous devez 'ctrl + home' et recommencer jusqu'à ce qu'il ne trouve rien.

(Remplacez ce qui a été trouvé par 'Index')

0