Exclure un répertoire de git diff

Je me demande comment je peux exclure un répertoire entier de mon diff Git. (Dans ce cas / spec). Je crée un diff pour l’ensemble de notre version logicielle en utilisant la commande git diff. Cependant, les modifications apscopes aux spécifications ne sont pas pertinentes pour cette procédure et créent simplement des maux de tête. maintenant je sais que je peux faire

git diff previous_release..current_release app/ 

Cela créerait un diff pour toutes les modifications dans le répertoire de l’application, mais pas par exemple dans le répertoire lib /. Est-ce que quelqu’un sait comment accomplir cette tâche? Merci!

Edit: Je veux juste être clair, je sais que je peux juste enchaîner les parameters de tous mes répertoires à la fin, moins / spec. J’espérais qu’il y avait un moyen d’exclure vraiment un seul répertoire dans la commande.

En supposant que vous utilisez bash, et que vous avez activé le globbing étendu ( shopt -s extglob ), vous pouvez gérer cela depuis le côté shell:

 git diff previous_release current_release !(spec) 

Vous évite d’avoir à lister toutes les autres choses.

Ou, shell-agnostic:

 git diff previous_release current_release --name-only | grep -v '^spec/' \ | xargs git diff previous_release current_release -- 

Vous pourriez envelopper ceci dans un script shell one-liner pour vous éviter d’avoir à retaper les arguments.

Sur la base de cette réponse, vous pouvez également utiliser:

 git diff previous_release..current_release -- . ':!spec' 

Ceci est une nouvelle fonctionnalité git qui permet d’exclure certains chemins. Il devrait être plus fiable que les autres oneliners à coquille.

Je poste ceci ici parce que cette question est toujours le hit # 1 pour “git diff exclude path”.

Vous pouvez essayer de désactiver l’atsortingbut diff pour tous les fichiers du répertoire lib.
.gitatsortingbutes :

 lib/* -diff 

racl101 ajoute dans les commentaires :

Juste pour append à cela, pour ceux d’entre vous qui veulent limiter la sortie git diff des fichiers d’un type spécifique, dans un répertoire spécifique et ses sous-répertoires, comme tous les scripts JavaScript générés par le regroupement de vos fichiers .js par Webpack, par exemple. vous pouvez l’append à .gitatsortingbutes :

 dist/js/**/*.js -diff 

Ensuite, vous ne voyez pas tout ce bruit dans votre sortie git diff et cela montre simplement que: Binary files ... differ ce qui est plus utile.

Si vous voulez spécifier plus d’un chemin à exclure dans un diff Git, il vous suffit d’append des parameters d’exclusion à la fin, par exemple pour exclure tout ce qui figure dans les répertoires fournisseur et bin des statistiques: –

 git diff --stat previous_release..current_release -- . ':!vendor' ':!bin' 

Git diff accepte maintenant un format d’exclusion personnalisé: git diff -- ':(exclude)lib/*'

Soyez prudent si vous avez beaucoup de noms de dossiers répétitifs (‘/ app’, ‘/ lib’, etc.), car cela exclura les fichiers relatifs au répertoire de travail en cours ET au répertoire racine de git.

 git diff app lib