1453 votes

.gitignore exclure un dossier mais inclure un sous-dossier spécifique

J'ai le dossier application/ que j'ajoute à la .gitignore . A l'intérieur de la application/ le dossier est le dossier application/language/gr . Comment puis-je inclure ce dossier ?

J'ai essayé ceci

application/
!application/language/gr/

sans succès...

1 votes

Espérons que le " .gitignore La documentation sur le "format de motif" vient d'être clarifiée (décembre 2013). Voir ma réponse ci-dessous

1 votes

Ma question et réponse préférée, ajoutée aux favoris ainsi qu'aux signets du navigateur.

2 votes

17voto

D. Ben Knoble Points 925

Le moyen le plus simple et probablement le meilleur est d'essayer d'ajouter les fichiers manuellement (en général, cela a priorité sur l'option .gitignore -) :

git add /path/to/module

Vous pourriez avoir besoin -f si le fichier est déjà ignoré. Vous pouvez même vouloir que le -N intention d'ajouter drapeau, pour vous suggérer sera les ajouter, mais pas immédiatement. Je fais souvent cela pour les nouveaux fichiers que je ne suis pas encore prêt à mettre en scène.


Cette a copie d'une réponse posté sur ce qui pourrait facilement être un doublon de l'AQ. Je le reposte ici pour une meilleure visibilité - je trouve plus facile de ne pas avoir un fouillis de règles de gitignore.

2 votes

Merci pour cette réponse. J'ai dû ajouter -f car il est dans mon .gitignore donc comme ça : git add -f path/to/file

14voto

BMC Points 25

Je voulais suivre les fichiers de configuration de Nagios situés dans le répertoire /etc/nagios/ ainsi que les plugins dans /usr/lib64/nagios/plugins/ . Pour cela j'ai initialisé un repo git dans / et a utilisé la liste d'exclusion suivante :

/*
!etc
etc/*
!etc/nagios
!usr
usr/*
!usr/lib64
usr/lib64/*
!usr/lib64/nagios
usr/lib64/nagios/*
!usr/lib64/nagios/plugins

Git descend la liste comme ça :

/*             exclude everything under / ...
!etc           but include /etc back
etc/*             exclude everything under /etc/...
!etc/nagios       but include /etc/nagios back
!usr           but include /usr back
usr/*             exclude everything under /usr/...
                  and so on...

13voto

Brian Thomas Points 131

J'ai trouvé un cas similaire ici, où dans laravel par défaut, .gitignore ignore tout ce qui utilise l'astérisque, puis remplace le répertoire public. ( C'est aussi la même solution que la réponse principale @Chris Johnsen, juste un peu plus fine et plus concise peut-être).

*
!public
!.gitignore

Ce n'est pas suffisant si vous vous trouvez dans le scénario du PO.

Si vous voulez livrer un sous-dossier spécifique de public par exemple, dans votre public/products vous voulez inclure les fichiers qui sont un sous-dossier profond, par exemple pour inclure public/products/a/b.jpg ils ne seront pas détectés correctement, même si vous les ajoutez spécifiquement comme ceci !/public/products , !public/products/* etc.

La solution consiste à s'assurer que vous ajoutez une entrée pour chaque niveau de chemin d'accès afin de les remplacer tous.

*
!.gitignore
!public/
!public/*/
!public/products/
!public/products/*
!public/products/*/
!public/products/*/
!public/products/*/*

12voto

Maksim Kostromin Points 961

Ma configuration .gitignore de JetBrains IntelliJ IDEA, où j'ai besoin d'exclure l'ensemble de l'entreprise. .idea sauf le dossier .idea/runConfigurations :

.idea
!.idea/
.idea/*
!.idea/runConfigurations/

voir : https://github.com/daggerok/gitignore-idea-runConfigurations

7voto

Ainsi, puisque de nombreux programmeurs utilisent node, le cas d'utilisation qui répond à cette question est d'exclure node_modules sauf un module module-a par exemple :

!node_modules/

node_modules/*
!node_modules/module-a/

2 votes

Ne fonctionne pas pour la version git 2.10.2.windows.1 .

1 votes

Pour la version 2.10.2 de git, suivez les instructions suivantes cette réponse

0 votes

Super .

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