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 à l'aide de la commande git diff. Cependant, les modifications apportées aux spécifications ne sont pas pertinentes pour cette procédure et ne font que créer 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 /. Quelqu'un sait-il comment accomplir cette tâche? Merci!
Edit: Je veux juste être clair, je sais que je peux simplement enchaîner les paramètres 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.
Réponses:
En supposant que vous utilisez bash et que vous avez activé la fonction de globbing étendu (
shopt -s extglob
), vous pouvez gérer cela du côté du shell:Vous évite d'avoir à lister toutes les autres choses.
Ou, agnostique de coquille:
Vous pouvez résumer cela dans un script shell à une ligne pour vous éviter d'avoir à retaper les arguments.
la source
.!(.|)
faire correspondre tout ce qui commence par un en.
plus.
et..
.--
je viens d'ajouter devrait résoudre ce problème.--name-only
à la toute fin également.-- path/of/new/file
et il le comprendra :)Sur la base de cette réponse, vous pouvez également utiliser:
C'est une nouvelle fonctionnalité git qui permet d'exclure certains chemins. Il devrait être plus fiable que divers oneliners shell.
Je poste ceci ici parce que cette question est toujours le hit n ° 1 pour "git diff exclude path".
la source
git diff previous_release current_release --name-status -- . ':!spec'
current_release
etprevious_release
- m'a fait sourire quand j'ai compris.git diff --stat dev -- . ':!/Mopy/Docs/*'
. Ce qui n'a pas fonctionné pour moigit diff dev --stat -- . ':!('Mopy/Docs/Wrye Bash General Readme.html'|'Mopy/Docs/Wrye Bash Advanced Readme.html')'
et les variationsgit diff --check -- . ':!config/database.yml'
git diff previous_release current_release -- . ':!file_a' ':!file_b'
Si vous souhaitez spécifier plus d'un chemin à exclure dans un git diff, vous ajoutez simplement des paramètres d'exclusion supplémentaires à la fin, par exemple pour exclure tout ce qui se trouve dans les répertoires vendor et bin des stats: -
la source
Vous pouvez essayer de désactiver l'attribut diff pour tous les fichiers du répertoire lib.
.gitattributes
:racl101 ajoute dans les commentaires :
la source
.gitattributes
fichier dans une branche spéciale faite uniquement pour ce type de diff 'release';) Rebase cette branche spéciale par-dessuscurrent_release
et faites votre différence à partir de là._site/* -diff
Git diff accepte désormais 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 actuel ET au répertoire racine de git.
la source
git diff -- . ':(exclude)lib/*'
?git diff
pour tout ce qui concerne votre chemin actuel, plutôt que d'exigergit diff -- .
git diff -- ":(exclude)lib/*"
Par rapport au répertoire racine de git
git diff
accepte une exclusion facultativeVous voudrez peut-être ajouter des caractères génériques
Cibler des types de fichiers spécifiques
Du sucre syntaxique appliqué
Ou déposez un petit script pour vos fichiers dot
Tels que
.bash_profile
ou.zshrc
la source
la source