107 votes

Ignorer correctement tous les fichiers de manière récursive sous un dossier spécifique, sauf pour un type de fichier spécifique.

J'ai vu des questions similaires ( 1 , 2 y 3 ), mais je n'obtiens pas de solution appropriée de leur part.

J'ai besoin d'ignorer tous les fichiers d'un dossier particulier, sauf pour un type de fichier spécifique. Le dossier est un sous-répertoire du chemin racine. Je vais nommer le dossier Resources . Comme je ne veux pas compliquer les choses, ignorons les fichiers sous tous les dossiers nommés Resources où qu'il soit.

C'est la solution la plus courante (dans toutes les questions dupliquées)

# Ignore everything
*

# Don't ignore directories, so we can recurse into them
!*/

# Don't ignore .gitignore
!.gitignore

# Now exclude our type
!*.foo

Le problème avec cette solution est que il arrête de suivre les fichiers nouvellement ajoutés (depuis * ignore tous les fichiers). Je ne veux pas continuer à exclure chaque type de fichier. Je veux un comportement normal où si un nouveau fichier est ajouté, git status le montre.

J'ai enfin trouvé une solution aquí . La solution consiste à ajouter un autre .gitignore dans Resources dossier. Cela fonctionne correctement.

Puis-je obtenir la même chose avec un seul fichier d'ignorance ? Je trouve qu'avoir plusieurs fichiers d'ignorances dans différents répertoires est un peu lourd.

C'est ce que j'essaie d'obtenir :

# Ignore everything under Resources folder, not elsewhere
Resources

# Don't ignore directories, so we can recurse into them
!*Resources/

# Now exclude our type
!*.foo

Mais cela donne le résultat inverse. Il ignore *.foo et suit d'autres fichiers.

126voto

Jim G. Points 4849

@SimonBuchan a raison.

Depuis git 1.8.2, Resources/** !Resources/**/*.foo travaux.

27voto

Ben Martin Points 370

La meilleure réponse est d'ajouter un fichier Resources/.gitignore sous Ressources contenant :

# Ignore any file in this directory except for this file and *.foo files
*
!/.gitignore
!*.foo

Si vous ne voulez ou ne pouvez pas ajouter ce fichier .gitignore, il existe une solution peu élégante :

# Ignore any file but *.foo under Resources. Update this if we add deeper directories
Resources/*
!Resources/*/
!Resources/*.foo
Resources/*/*
!Resources/*/*/
!Resources/*/*.foo
Resources/*/*/*
!Resources/*/*/*/
!Resources/*/*/*.foo
Resources/*/*/*/*
!Resources/*/*/*/*/
!Resources/*/*/*/*.foo

Vous devrez modifier ce modèle si vous ajoutez des répertoires plus profonds que ceux spécifiés.

11voto

Tiago Points 1234

Cela peut sembler stupide, mais vérifiez si vous n'avez pas déjà ajouté le ou les dossiers que vous essayez d'ignorer à l'index auparavant. Si vous l'avez fait, peu importe ce que vous mettez dans votre fichier .gitignore, les dossiers/fichiers seront toujours mis à disposition.

10voto

Soit je m'y prends mal, soit la réponse acceptée ne fonctionne plus avec le git actuel.

J'ai en fait trouvé la bonne solution et l'ai postée sous presque la même question aquí . Pour plus de détails, rendez-vous sur ce site.

Solution :

# Ignore everything inside Resources/ directory
/Resources/**
# Except for subdirectories(won't be committed anyway if there is no committed file inside)
!/Resources/**/
# And except for *.foo files
!*.foo

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X