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.
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
InconnuB
ont rompu leur association*
Tout ou rienToute 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é.
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
: documentdiff-filter
exclusionEn 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.
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.
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
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')