.gitignore exclut les fichiers du répertoire mais pas certains répertoires

98
application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

Cela ne semble pas fonctionner. Lorsque je cloné le projet, il n'y a pas de "application/cache"dossier ou de "application/cache/folder"dossier, etc ...

J'aimerais que les fichiers dans les dossiers de cache ne soient pas mis en cache mais que les dossiers l'étaient, afin que les autorisations des dossiers soient transférées et existent.

Matthieu
la source

Réponses:

220

Git ne suit pas les dossiers, uniquement les fichiers, donc si vous ignorez tout dans un dossier, Git n'aura rien à suivre. Vous pouvez ajouter un .gitignorefichier à chaque répertoire ( application/cache, application/cache/folder, application/cache/folder/onemorefolder/) avec le contenu suivant:

*
!.gitignore

Ensuite, vous pouvez ajouter ces répertoires, et seul le .gitignorefichier de chaque répertoire sera ajouté - mais cela signifie que les répertoires seront désormais suivis (c'est-à-dire créés lors du clonage).

mipadi
la source
7
Les fichiers .gitignore utilisés à cet effet peuvent être vides.
kevpie
2
Ils peuvent être vides, si les dossiers sont ignorés par un .gitignorefichier supérieur . Dans ce cas, c'est exactement ma réponse.
KingCrunch
4
plus raisonnable et plus simple est d'utiliser un fichier nommé .gitkeep, alors vous n'avez rien à placer dans le fichier .gitignore.
Hedgehog
3
@kevpie Il y a d'autres fichiers dans le dossier et il ne veut pas qu'ils soient suivis. Si le fichier .gitignore est vide, ces fichiers seront apparemment suivis.
maliayas
dans le même but, j'utilise à la .gitkeepplace de .gitignore. cela a plus de sens pour moi
Éderson T. Szlachta
22

Git ne suit pas les répertoires vides. Ajoutez simplement des fichiers d'espace réservé vides dans les dossiers que vous souhaitez valider.

touch application/cache/.keep
git add -f application/cache/.keep

Faites-le également avec chaque dossier «vide». Plus tard, vous pouvez ignorer ces fichiers, ils n'existent vraiment que pour vous assurer que git crée ces répertoires lors du clonage. Les entrées dans .gitignoreempêchent le suivi des autres fichiers dans les dossiers (sauf si vous le forcez avec git add -f;)).

KingCrunch
la source
16

Il existe une autre façon peut-être plus propre de procéder. Plutôt que d'avoir des fichiers sous .gitignore dans les dossiers que vous souhaitez conserver. Vous pouvez mettre ceci dans le .gitignore racine comme suit:

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep

Maintenant, créez et validez simplement des fichiers .gitkeep vides dans les répertoires listés ci-dessus. Le dossier sera ensuite suivi avec ces fichiers .gitkeep mais aucun des contenus ne sera suivi.

Joel Duckworth
la source
2
ou juste !*.gitkeep:)
Éderson T. Szlachta
La question était de savoir comment ignorer le contenu des dossiers mais conserver les dossiers eux-mêmes. Je crois donc que ma réponse tient et que le simple fait d'avoir! *. Gitkeep n'ignorera pas le contenu des dossiers.
Joel Duckworth le
3

vous pouvez mettre un fichier .gitignore dans chacun d'eux (comme l'a dit mipadi) ou créer quelque chose comme ça sur votre fichier racine .gitingnore

/assets/*/
/assets/*.*

Ça fonctionne bien pour moi

Claude Janz
la source
Cela fonctionne, mais uniquement si le dépôt utilise des extensions de fichier. Quelque chose comme root/LICENSE-FILEne sera pas exclu.
Brett Zamir
2

Visual Studio n'a pas aimé la réponse acceptée. J'ai dû ajouter une nouvelle ligne avant le * pour que cela fonctionne.

# Ignore all files in this folder.
*
!.gitignore
Stephen
la source