web-dev-qa-db-fra.com

Git ignore les sous-dossiers

J'ai beaucoup de projets dans ma solution .Net. Je voudrais exclure tous les dossiers "bin/Debug" et "bin/Release" (et leur contenu), tout en incluant le dossier "bin" lui-même et toutes les dll qu'il contient.

.gitignore avec "bin /" ignore les dossiers "Debug" et "Release", mais aussi les dll contenues dans le dossier "bin".

"bin/Debug" ou "bin/Release" dans le fichier .gitignore n'exclut pas les répertoires, sauf si je qualifie complètement le motif ignoré comme "Solution/Project/bin/Debug" - ce que je ne veux pas faire comme devra inclure ce modèle complet pour chaque projet dans ma solution, ainsi que pour l'ajouter à tout nouveau projet ajouté.

Aucune suggestion?

374
Marcel

Avez-vous essayé des wildcards?

Solution/*/bin/Debug
Solution/*/bin/Release

Avec la version 1.8.2 de git, vous pouvez également utiliser le caractère générique ** pour faire correspondre tout niveau de sous-répertoires:

**/bin/Debug/
**/bin/Release/
478
Josh Lee

Vous pouvez utiliser .gitignore au niveau supérieur pour ignorer tous les répertoires du projet portant le même nom. Par exemple:

Debug/
Release/

Cela devrait mettre à jour immédiatement afin qu'il soit visible lorsque vous faites le statut git. Assurez-vous que ces répertoires ne sont pas déjà ajoutés à git, car ils ignoreront les ignorés.

97
Andreas

La question ne consiste pas à ignorer tous les sous-répertoires, mais je ne trouvais la réponse nulle part. Je vais donc la poster: */*.

47
mgold

Toutes les réponses ci-dessus sont correctes, mais je ne pense pas que le nom mentionné soit mentionné: une fois que vous avez ajouté un fichier de ce répertoire dans le référentiel, vous ne pouvez pas ignorer ce répertoire/sous-répertoire contenant ce fichier (git ignorera cette directive ). Vous devrez d'abord supprimer tous les fichiers du répertoire cible du référentiel, puis ignorer ce dossier.

36
ajacian81

En plus de mettre les entrées correctes dans votre fichier .gitignore, si vous essayez d'ignorer quelque chose déjà ajouté au référentiel, vous devez faire git rm -r /path/to/dir et le valider avant d'ajouter le répertoire à votre fichier .gitignore. Sinon, la seule chose que git va ignorer est votre directive ignore.

25
MidnightJava

La seule façon pour moi que cela fonctionne sur ma machine était de le faire de cette façon:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
/*.*

#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/

Notez que vous devez autoriser explicitement le contenu pour chaque niveau que vous souhaitez inclure. Donc, si j'ai des sous-répertoires 5 profonds sous thèmes, je dois quand même le préciser.

Ceci est tiré du commentaire de @ Yarin ici: https://stackoverflow.com/a/5250314/169615

Ce sont des sujets utiles:

J'ai aussi essayé

*
*/*
**/**

et **/wp-content/themes/**

ou /wp-content/themes/**/*

Rien de tout cela n'a fonctionné pour moi non plus. Beaucoup de piste et d'erreur!

16
Katie

Pour exclure le contenu et les sous-répertoires:

**/bin/*

Pour simplement exclure tous les sous-répertoires mais prendre le contenu, ajoutez "/":

**/bin/*/
6
A. Morel

Pour ignorer tous les sous-répertoires, vous pouvez simplement utiliser:

**/

Cela fonctionne à partir de la version 1.8.2 de git.

5
frederickjh

La méthode générique pour ignorer tous les sous-dossiers, tout en continuant de suivre les fichiers situés dans le répertoire /bin, consiste à ajouter la ligne suivante au fichier .gitignore de votre projet:

bin/*/*

Si vous souhaitez ignorer uniquement des sous-dossiers nommés particuliers, vous pouvez procéder comme suit:

bin/Debug/*
bin/Release/*

nb. si le répertoire bin ne se trouve pas à la racine de votre projet (à côté du fichier .gitignore), alors au lieu de, par exemple. bin/*/* vous pourriez avoir besoin de path/to/bin/*/*

5
Nick F