Disons que j'ai ignoré un répertoire, mais je veux annuler l'ignorer des sous-répertoires spécifiques qu'il contient. 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 ressemblerait à quelque chose comme:
/uploads/*
!/uploads/rubbish/stuff/KEEP_ME/
Mais cela ne fonctionne pas, pas plus que 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?
Réponses:
Selon la section format de modèle de la documentation de gitignore :
Par conséquent, le
/uploads/rubbish/stuff/keep/
modèle de répertoire parent précédemment exclu doit être exclusivement annulé avant d'annuler son contenu:Pour inclure des sous-répertoires à l'intérieur,
/uploads/rubbish/stuff/keep/
ajoutez la troisième ligne:la source
.gitignore
et cela fonctionne très bien !:!*.zip
Même si vous ajoutez quelque chose à
.gitignore
, vous pouvez forcer git à l'ajouter à l'indexCependant, "KEEP_ME" semble être un répertoire et git n'aime généralement pas les dossiers vides, vous devriez donc pouvoir ajouter un fichier "placeholder" à la place, si le dossier est vide
la source
git add --force
pour chaque nouvel élément ou dossier dansKEEP_ME
. mais après cela, les mises à jour sont simplement ajoutées (lors de l'exécution d'ungit add -u
par exemple) comme si les fichiers n'étaient pas ignorés. Le.keep_me
ne fait rien, c'est juste un fichier pour que git opère sur le dossier.git add --force
est la mauvaise solution pour cela. Si vous déplacez un répertoire ou déplacez le fichier vers un autre répertoire, le suivi de git supprimera le fichier mais ne l'ajoutera pas au nouvel emplacement et vous devrezgit add --force
recommencer. en annulant l'ignorance d'un motif générique, git suivra le mouvement d'un fichier dans le dépôt.J'essayais de comprendre comment inclure un dossier spécifique lors de l'exclusion de tous les dossiers avec l'exclusion générique
si vous ajoutez le
/*
à la fin de votre exclusion générique, vous continuez d'exclure tous les fichiers de construction**/build/*
Ensuite, vous ajoutez une autre ligne pour corriger le chemin que vous souhaitez inclure pour ressembler à
nous laissant un gitignore qui lit
la source
Buo-Ren Lin et JohnLes réponses de sont très 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
J'ai également trouvé qu'il était nécessaire de ré-inclure explicitement le sous-dossier et son contenu pour afficher les deux éléments dans le dossier et les sous-dossiers.
la source
La solution présentée comme la réponse la plus votée est incorrecte et facilement démontrable en tant que telle.
Commencez par ignorer tout dans les téléchargements / *:
Désignorez maintenant le répertoire parent des éléments ignorés comme ci-dessus:
N'affiche aucun fichier non suivi.
Pour que cela fonctionne, vous devez ignorer tous les fichiers sous l'
uploads/
arborescence (uploads/**/*
et pas seulement le niveau supérieuruploads/*
), puis ajouter tous les répertoires parents de l'arborescence que vous souhaitez conserverQui donne:
Si nous avions utilisé
uploads/*
ce qui.gitignore
précède, tous les fichiers intermédiaires auraient également été inclus, donc par exempleuploads/rubbish/a
apparaîtraient dans la commande d'état ci-dessus.la source