Disons que j'ai ignoré un répertoire, mais je veux y ignorer des sous-répertoires spécifiques. J'ai donc la configuration:
/uploads/
/uploads/rubbish/
/uploads/rubbish/stuff/KEEP_ME/
/uploads/foo/
/uploads/foo/bar/lose/
Et je veux tout ignorer sauf le KEEP_ME
répertoire. J'espère que l'ignorer ressemblera à quelque chose comme:
/uploads/*
!/uploads/rubbish/stuff/KEEP_ME/
Mais cela ne fonctionne pas, et il n'y a pas non plus plusieurs permutations sur le même thème.
Celui qui fonctionne est
/uploads/**/**/**/
!/uploads/rubbish/stuff/KEEP_ME/
Mais cela semble un peu restrictif et verbeux?
Selon section format de modèle de la documentation de gitignore :
Un préfixe optionnel "!" ce qui annule le motif; tout fichier correspondant exclu par un modèle précédent sera à nouveau inclus. Il n'est pas possible de ré-inclure un fichier si un répertoire parent de ce fichier est exclu. Git ne répertorie pas les répertoires exclus pour des raisons de performances, donc tous les modèles sur les fichiers contenus n'ont aucun effet, peu importe où ils sont définis. Mettez une barre oblique inverse ("\") devant le premier "!" pour les modèles qui commencent par un littéral "!", par exemple, "! important! .txt".
Par conséquent, le répertoire parent précédemment exclu /uploads/rubbish/stuff/keep/
le modèle doit être exclusivement annulé avant de supprimer son contenu:
#ignore everything within /uploads/
/uploads/*
#include everything within /uploads/rubbish/stuff/keep
!/uploads/rubbish/stuff/keep/
!/uploads/rubbish/stuff/keep/*
Pour inclure des sous-répertoires dans /uploads/rubbish/stuff/keep/
ajoutez la troisième ligne:
!/uploads/rubbish/stuff/keep/**/*
Même si vous ajoutez quelque chose à .gitignore
, vous pouvez forcer git pour l'ajouter à l'index
git add --force uploads/rubbish/stuff/KEEP_ME/
Cependant, "KEEP_ME" semble être un répertoire et git n'aime généralement pas le dossier vide, vous devriez donc ajouter un fichier "placeholder" -holder à la place, si le dossier est vide
git add --force uploads/rubbish/stuff/KEEP_ME/.keep_me
J'essayais de comprendre comment inclure un dossier spécifique lors de l'exclusion de tous les dossiers avec l'exclusion générique
**/build
si vous ajoutez le /*
à la fin de votre exclusion générique, vous continuez d'exclure tous les fichiers de génération **/build/*
Ensuite, vous ajoutez une autre ligne pour corriger le chemin que vous souhaitez inclure pour ressembler
!**/folder/build/*
nous laissant un gitignore qui lit
**/build/*
!**/folder/build/*
Buo-Ren Lin et John les réponses sont assez utiles, mais je devais combiner les deux.
Lorsque je voulais exclure d'autres sous-dossiers ainsi que des fichiers dans les téléchargements, j'ai trouvé nécessaire de spécifier explicitement des répertoires arbitraires avant le dossier donné à la fois en excluant le dossier et en incluant le sous-dossier
**/uploads/*
!**/uploads/rubbish/
!**/uploads/rubbish/*
J'ai également trouvé nécessaire de ré-inclure explicitement à la fois le sous-dossier et ses commentaires pour afficher les deux éléments dans le dossier et les sous-dossiers.