Voulez exclure des fichiers à partir de “git diff”
Je suis en train d'exclure un fichier (db/irrelevant.php
) à partir d'un Git diff. J'ai essayé de mettre un fichier dans le db
sous-répertoire appelé .gitattributes
avec la ligne irrelevant.php -diff
et j'ai aussi essayé de créer un fichier appelé .git/info/attributes
contenant db/irrelevant.php
.
Dans tous les cas, la db/irrelevant.php
fichier est inclus dans le diff comme un Git patch binaire. Ce que je veux, c'est pour les modifications apportées à ce fichier pour être ignorer par la commande diff. Ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
Omg, les pilotes et awk pour exclure un mauvais fichier ? Depuis git 1.9 quelque chose vous pouvez:
Ah, d'élégance! Voir le prix de la réponse et pour plus de détails cette réponse par @torek
.gitignore
fichier de syntaxe. E. g.:!*shrinkwrap.yaml
au lieu de:!shrinkwrap.yaml
.git diff -- . ':(exclude)*.min.js' ':(exclude)*.min.css'
git diff -- . ":(exclude)db/irrelevant.php"
les guillemets (au lieu de guillemets simples)git diff -- . :(exclude)db/irrelevant.php
git diff -- . ':(exclude)package-lock.json'
-- pour (probablement) cas très commun ici, la ligne de commande pour copier-coller.git diff
s'exécute toujours avec cette par défaut?Vous pourriez mettre en place une coutume diff pilote avec un pas d'op de commande et de l'attribuer à ces fichiers qui doivent être ignorés.
Créer un référentiel spécifique diff pilote avec cette commande
ou pour tous vos repos avec
--global
.(Si
/bin/true
n'existe pas dans MacOS, les solutions de rechange serait d'utiliser/usr/bin/true
ouecho
).Ensuite, l'attribution de la nouvelle diff pilote aux fichiers que vous souhaitez ignoré dans votre
.git/info/attributes
fichier.Si cet état est censé être partagé avec d'autres développeurs vous pouvez utiliser
.gitattributes
au lieu de.git/info/attributes
et de partager lesgit config
de commande avec vos pairs (par le biais d'un fichier de documentation ou de quelque chose).[diff "nodiff"]
"command = /bin/true" et j'ai ensuite créé un fichier appelé .git/info/attributs dans laquelle j'ai ajouté:irrelevant.php diff=nodiff
git diff --stat
. Dans ce cas, on pourrait utilisergit diff ... | diffstat
comme une solution de contournement.--no-ext-diff
true
en place de/bin/true
. (echo
a un effet bizarre sur le diff, de rester bloqué momentanément quand j'ai frappéq
pour quitter le diff.)git diff --exit-code
se terminera avec1
avec cette habitude, comme si il y avait des différences.Vous pouvez également utiliser filterdiff programme de la patchutils programme de collecte d'exclure certaines parties de diff. Par exemple:
-p
, à partir de la page de manuel(1), est "p-n, --strip-match=n Lors de l'appariement, ignorer les n premières composantes du chemin." Il m'a fallu un certain temps pour attraper que-p 1
a été de retirer lesdb
partie de l'OP du chemin. Si vous voulez juste pour spécifier un nom de fichier et d'ignorer tout chemin/dir possibilités, vous pouvez utiliser-p 99
.Cette méthode est plus courte que les réponses acceptées.
Pour plus d'informations sur les différents inclusion/exclusion possibilités de lecture cet autre post
Cette solution ne nécessite pas d'autre utils/téléchargements:
Où
file/to/exclude.txt
est le nom du fichier que vous souhaitez exclure, bien sûr.Edit: crédit ksenzee pour la fixation des fichiers supprimés à briser le diff.
git diff --stat master
sans beaucoup de succès - pouvez-vous l'aider ?Vraiment de bonne réponse à partir de KurzedMetal pour ce que je devais faire, qui a la capacité de voir que le fichier a changé, mais ne pas générer le diff, qui aurait pu être énorme, dans mon cas.
Mais un de mes collègues a suggéré à l'approche encore plus simple et travaillé pour moi:
ajoutant
.gitattributes
fichier dans le répertoire où le fichier sera ignoré pargit diff
réside avec le contenu suivant:file-not-to-diff.bin -diff
Qui permet toujours
git status
"voir" si le fichier a changé.git diff
aussi à "voir" que le fichier a changé, mais il ne générera pas de ladiff
.Que
.bin
l'extension du fichier dans l'exemple a été délibéré. Je me rends compte que c'est le comportement par défaut de git pour les fichiers binaires, et il ne nécessite pas de manipulation spéciale avec.gitattributes
. Mais dans mon cas, ces fichiers ont été reconnus comme des fichiers texte par git et "fichier" de l'utilitaire et de ce fait le tour.similaire à Ben Roux solution, mais le partage de toute façon:
ou, si les modifications ont déjà engagé localement:
Exemples:
C'est très simple, vous pouvez exclure ce que vous voulez à l'aide de commandes unix standard, ces commandes sont disponibles sous git bash même sous l'environnement windows.
L'exemple ci-dessous montre comment exclure diff pour pom.xml fichiers, vérifiez d'abord diff de maître uniquement pour les noms de fichiers, puis en utilisant un 'grep -v' exclure des fichiers que vous ne voulez pas et puis exécutez à nouveau diff de maître avec prepapred liste:
Je ne les suivants:
Je sais que c'est pas une solution élégante et parfois canot être utilisé (par exemple. si vous avez déjà des trucs de mise en scène) , mais il fait le truc sans avoir à taper une commande complexes
Si vous voulez faire cela, seulement d'inspecter visuellement le diff, un visuel outil de comparaison (comme Meld) qui vous permettra de le faire avec une commande courte et facile à mémoriser.
D'abord, mettre en place un outil de comparaison si vous ne l'avez pas déjà.
Ensuite, vous pouvez exécuter un répertoire diff.
Vous serez en mesure de parcourir de diff (par fichier) dans Meld (ou votre outil de choix). Suffit de ne pas ouvrir le fichier que vous souhaitez ignorer.
Par rapport à la git répertoire racine
git diff
accepte une option exclureVous pouvez ajouter des jokers dans le jeu
Cible des types de fichiers spécifiques
Ou laisser un petit script pour vos fichiers de configuration utilisateur
Comme
.bash_profile
ou.zshrc
git diff -- ":!*/$1/*"
# fonctionne aussigit diff --staged
Espère que cela vous aide.