Vous voulez exclure fichier 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 sous-répertoire db
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, le fichier db/irrelevant.php
est inclus dans la diff comme patch binaire Git. Ce que je veux, c'est que les modifications de ce fichier soient ignorées par la commande diff. Ce que je fais mal?
7 réponses
Omg, drivers et awk pour exclure un fichier nul ? Depuis git 1.9 quelque chose vous pouvez:
git diff -- . ':(exclude)db/irrelevant.php'
ah, l'élégance! Voir la réponse Citée et pour plus de détails cette réponse par @torek
vous pouvez configurer un pilote de diff personnalisé avec une commande no op et l'affecter aux fichiers qui devraient être ignorés.
créer un pilote de diff spécifique au dépôt avec cette commande
git config diff.nodiff.command /bin/true
ou pour tous vos repos avec --global
.
(si /bin/true
N'existe pas dans MacOS, les alternatives seraient d'utiliser /usr/bin/true
ou echo
).
ensuite, assignez le nouveau pilote diff aux fichiers que vous voulez ignorer dans votre fichier .git/info/attributes
.
irrelevant.php diff=nodiff
si cet état est supposé être partagé avec d'autres développeurs, vous pouvez utiliser .gitattributes
au lieu de .git/info/attributes
et partager la commande git config
avec vos pairs (par le biais d'un fichier de documentation ou autre).
vous pouvez également utiliser filterdiff programme du patchutils programme collection pour exclure certaines parties d'une diff. Par exemple:
git diff | filterdiff -p 1 -x db/irrelevant.php
Cette solution en ligne ne nécessite pas d'autres utils/téléchargements:
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
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.
cette méthode est plus courte que celle qui est acceptée.
git diff 987200fbfb 878cee40ba --stat -- ':!*.cs'
pour plus d'informations sur les différentes possibilités d'inclusion/exclusion, lire cet autre message
similaire à solution de Ben Roux , mais en partage de toute façon:
git status --porcelain | grep -v $PATTERN_TO_EXCLUDE | awk '{print }' | xargs git diff
ou, si les changements ont déjà été effectués localement:
git diff --name-only origin/master | grep -v $PATTERN_TO_EXCLUDE | xargs git diff origin/master
exemples:
git status --porcelain | grep -v docs | awk '{print }' | xargs git diff origin/master
git diff --name-only origin/master | grep -v docs | xargs git diff origin/master
si vous voulez faire cela seulement pour inspecter visuellement la diff, un outil de diff visuel (comme Fusion ) vous permettra de le faire avec une commande courte qui est facile à se rappeler.
d'abord, installez un outil diff si vous ne l'avez pas déjà.
$ git config --global diff.tool = meld
Ensuite, vous pouvez exécuter un répertoire diff.
$ git difftool --dir-diff
vous pourrez parcourir les diffs (par fichier) dans la fusion (ou l'outil de votre choix). Tout simplement n'ouvrez pas le fichier vous vouloir l'ignorer.