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?

137
demandé sur Keith Pinson 2012-05-02 17:48:34

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

161
répondu Mr_and_Mrs_D 2017-05-23 11:47:27

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).

58
répondu KurzedMetal 2014-04-28 15:57:35

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
33
répondu Szilárd Pfeiffer 2012-05-02 18:00:27

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-`

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.

17
répondu Ben Roux 2017-05-23 12:03:08

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

8
répondu Chiel ten Brinke 2018-01-15 08:30:09

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
0
répondu Chris Montoro 2017-05-23 12:26:31

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.

0
répondu mkasberg 2018-02-06 20:41:01