git ignore tous les fichiers d'un certain type, sauf ceux d'un sous-dossier spécifique

194

J'ai une structure de répertoires comme celle-ci:

  • racine
    • dossier1
      • abc.json
      • def.json
      • un jour
        • more.json
    • dossier2
      • qwe.json
      • rty.json
    • spec
      • mock1.json
      • mock2.json
      • un jour
        • more_mocks.json

Maintenant, en utilisant un, .gitignoreje veux ignorer tous les *.jsonfichiers à l'exception de ceux du spec. Je ne veux pas utiliser un .gitignorein folder1et folder2parce qu'il y en a une tonne et qu'ils seront ajoutés à beaucoup, et je suis sûr que j'oublierai de déplacer le bon .gitignorefichier en place.

De plus, il peut y avoir plus de répertoires imbriqués avec des fichiers json, et cette règle doit également s'appliquer à tous les sous-répertoires.

Alors, comment ignorer tous les fichiers d'un type, à l'exception d'un certain sous-répertoire?

Alex Wayne
la source

Réponses:

304

Un préfixe facultatif !qui annule le modèle; tout fichier correspondant exclu par un modèle précédent sera de nouveau inclus. Si un modèle annulé correspond, cela remplacera les sources de modèles de priorité inférieure.

http://schacon.github.com/git/gitignore.html

*.json
!spec/*.json
ambre
la source
4
Vous pouvez également ajouter un .gitignore à la spécification qui contient! / *. Json, si vous préférez.
David Mitchell
2
Merci! Bien que dans mon cas, je me suis rendu compte que je ne voulais absolument rien ignorer dans mon répertoire de spécifications. Je suis donc capable de m'en sortir avec un très simple !spec. Fonctionne comme un charme.
Alex Wayne
7
Alors que la réponse d'Amber fonctionne lorsque spec est un répertoire sous le niveau supérieur (c'est-à-dire / spec), cela ne fonctionne pas pour moi lorsque spec est un sous-répertoire, par exemple / a / spec ou a / b / spec. Utilisation de git 1.7.5.4
Peter Lewis
7
@PeterLewis (pour les futurs visiteurs): un tel cas peut être traité en créant un fichier .gitignore dans le sous-répertoire concerné.
cmbuckley
3
Cette solution pour moi n'a ignoré que les jsonfichiers specdirectement, pas celui du somedirsous - répertoire de la question. J'avais besoin d'utiliser !spec/**/*.jsonpour m'assurer que le more_mocks.jsonétait également engagé.
Leith