J'ai créé une liste blanche pour les fichiers texte uniquement.
*
!*.txt
Maintenant, j'ai un fichier texte non suivi dans un sous-répertoire - sub/dir/file.txt
, et cela n'est PAS affiché (il est ignoré). Cependant, les fichiers texte du répertoire racine sont affichés.
Pourquoi cela et comment résoudre ce problème?
.gitignore
.Réponses:
Si vous essayez de cette façon, cela échouera, car vous finirez par mettre sur liste noire les répertoires de votre structure.
Pour résoudre, vous voulez mettre sur liste noire tout ce qui n'est pas un répertoire, et qui ne fait pas partie des types de fichiers que vous souhaitez valider, sans mettre sur liste noire les répertoires .
Le
.gitignore
fichier qui fera cela:J'ai testé cela dans une liste blanche de structure à trois niveaux pour les
.txt
fichiers en présence de*.one
,*.two
et les*.three
fichiers à l'aide d'un.gitignore
situé dans le répertoire racine du référentiel - fonctionne pour moi. Vous n'aurez pas à ajouter de.gitignore
fichiers à tous les répertoires de votre structure.Informations que je l' habitude de trouver la réponse est venue, entre autres, ce (stackoverflow.com).
la source
!.gitignore
, lors de l'utilisation*
, n'est-ce pas?/*
pour mettre sur liste noire uniquement le dossier de niveau supérieur, mais pas tous les dossiers de manière récursive, ce qui signifie en fait.gitignore
ne devrait pas regarder dans les sous-dossiers d'un dossier en liste blanche.Un moyen plus simple d'y parvenir est:
Cela fonctionne car
gitignore
applique des modèles qui ne commencent pas par/
à tous les niveaux sous le.gitignore
fichier:Si vous vouliez faire cela avec des fichiers dans un répertoire , les choses deviennent plus complexes:
Cela fonctionne car
gitignore
a des règles spéciales pour**
:L'élément clé est de vous assurer que vous n'ignorez pas les répertoires, car alors chaque fichier de ce répertoire est ignoré indépendamment des autres règles.
la source
J'ai cherché pendant longtemps:
Supposons que j'ai une grande structure de dossiers avec ~ 100 000 répertoires imbriqués de manière récursive. Dans ces dossiers, il y a environ 30 000 fichiers de type
.txt
(dans mon cas: type*.md
). À côté de ces*.md
fichiers, il y a, disons, 500 Go de (un million +) fichiers que je ne veux pas suivre.Je veux que git ne suive que
.txt
(ou*.md
) les fichiers dans tous les dossiers et sous-répertoires.La bonne réponse devrait être: ce n'est pas possible dans Git.
Ce que j'ai fait à la place:
[modifier: n'a pas non plus fonctionné - j'ai essayé de créer un dossier avec des liens symboliques (ou des liens physiques) et d'utiliser git là-bas, mais git ne suit pas les liens symboliques et écrase les liens physiques. Doh!]
la source