Comment faire en sorte que git-diff et git log ignorent les fichiers nouveaux et supprimés?

155

Parfois, il y a quelques fichiers modifiés avec des fichiers nouveaux, supprimés et / ou renommés. Lorsque je les fais git diffou git-logque j'aimerais les omettre, je peux donc mieux repérer les modifications.

En fait, il serait préférable de répertorier les noms des fichiers nouveaux et supprimés sans leur contenu. Pour «ancien» renommé en «nouveau», j'aimerais éventuellement faire la différence entre «ancien» et «nouveau».

maaartinus
la source

Réponses:

217

L' --diff-filteroption fonctionne à la fois avec diffet log.

J'utilise --diff-filter=Mbeaucoup ce qui limite les sorties de diff aux seules modifications de contenu.

Pour détecter les renommés et les copies et les utiliser dans la sortie de diff, vous pouvez utiliser respectivement -Met -Cavec les options Ret Cpour --diff-filter.

CB Bailey
la source
3
Lorsqu'il est utilisé avec git logcela, il ignore complètement les commits qui ajoutent et / ou suppriment uniquement des fichiers.
qqx
7
Existe-t-il un moyen d'exclure un seul type de données? Quelque chose comme--diff-filter=!D
Kamil Dziedzic
24
@Kamil Ouais, il y en a. Citation de la documentation:Also, these upper-case letters can be downcased to exclude. E.g. --diff-filter=ad excludes added and deleted paths.
LambdaCruiser
62
  • Document officiel:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

Sélectionnez uniquement les fichiers qui sont ajoutés (A), copiés (C), supprimés (D), modifiés (M), renommés (R), dont le type (c'est-à-dire fichier normal, lien symbolique, sous-module,…) a changé (T), sont non fusionnés (U), sont inconnus (X) ou ont eu leur appariement cassé (B). Toute combinaison de caractères de filtre (y compris aucun) peut être utilisée.

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

En outre, ces lettres majuscules peuvent être réduites pour exclure. Par exemple, --diff-filter = ad exclut les chemins ajoutés et supprimés.

Exemple: afficher uniquement les fichiers ajoutés, modifiés, modifiés exclure les fichiers supprimés:

git diff --diff-filter=ACM
TeeTracker
la source
2
Bonne note sur l'utilisation des options de lettres minuscules pour exclure les chemins et des options de lettres majuscules pour inclure les chemins.
stuyam
-3

MISE À JOUR: La réponse acceptée par Charles Bailey est la bonne; la fonctionnalité souhaitée est déjà intégrée à git.

Je vais laisser cette réponse ici car elle pourrait fournir des idées pour des choses qui ne sont pas intégrées à git.


git diffaffiche les fichiers nouveaux et supprimés en les comparant à /dev/null. Il ne devrait pas être trop difficile d'écrire quelque chose (j'utiliserais moi-même Perl) qui recherche /dev/nullet filtre les lignes suivantes jusqu'à la prochaine différence. Alors git diff ... | the-filter.

Les fichiers renommés sont une autre affaire; Je n'ai pas (encore) de bonne réponse à cela.

Keith Thompson
la source
C'est correct, mais de cette façon, je perdrais la possibilité d'utiliser le téléavertisseur (moins) uniquement si nécessaire, n'est-ce pas?
maaartinus
@maaartinus: Je suppose que oui; Je n'avais pas pensé à ça. (Personnellement, je mis mon téléavertisseur git à « chat » et l' utilisation de ... | lessfaçon explicite.) Vous pouvez regarder lessl » -Eou l' -Foption (bien que sur mon système , il ne me laisse pas voir la sortie).
Keith Thompson
OK, c'est bien, mais regardez l'autre réponse.
maaartinus