Comme le titre l'indique, est-il possible d'ajouter des "fichiers sans points" au fichier gitignore?
J'imagine que cela prendrait soin de tous ces fichiers sans extension gênants.
Comme le titre l'indique, est-il possible d'ajouter des "fichiers sans points" au fichier gitignore?
J'imagine que cela prendrait soin de tous ces fichiers sans extension gênants.
Réponses:
Vous pouvez essayer une combinaison similaire à:
*
!/**/
!*.*
Cette gitignore
règle d'exclusion (un modèle annulé ) doit ignorer tous les fichiers, à l'exception de ceux avec une extension.
Comme mentionné ci - dessous par Mad Physicist , la règle est:
Il n'est pas possible de ré-inclure un fichier si un répertoire parent de ce fichier est exclu. (*
)
(*
: sauf si certaines conditions sont remplies dans git 2.?+, voir ci-dessous)
C'est pourquoi il !/**/
est important (lister en blanc les dossiers parents de manière récursive) si nous voulons mettre en liste blanche les fichiers.
J'ai mentionné cette même règle dans des cas similaires comme:
Comme le fait remarquer Jakub Narębski , vous ne voudrez peut-être pas ignorer tous les fichiers sans extension.
Mon conseil:
.gitignore
comme indiqué ci-dessus: les fichiers déjà versionnés ne seront pas ignorés (même s'ils n'ont pas d'extension). Tous les autres seront ignorés.Pour tous les futurs fichiers sans extension que vous souhaitez version:
git add -f -- myFile
Notez qu'avec git 2.9.x / 2.10 (mi-2016?), Il peut être possible de ré-inclure un fichier si un répertoire parent de ce fichier est exclu s'il n'y a pas de caractère générique dans le chemin ré-inclus .
Nguyễn Thái Ngọc Duy ( pclouds
) essaie d'ajouter cette fonctionnalité:
Cependant, l'une des règles de la réinsertion étant:
La partie répertoire dans les règles de ré-inclusion doit être littérale (c'est-à-dire pas de caractères génériques)
Cela n'aurait pas fonctionné ici de toute façon.
.gitignore
serait **
et !**.*
. Je sais que cela ne fait aucune différence si l'astérisque est placé devant, mais c'est plus explicite et sonore avec la façon dont les shells gèrent les jokers ...
!Makefile
. Attention, j'ai rencontré des problèmes avec cette solution dans Git 1.7.1 alors qu'elle fonctionnait bien dans 1.9.0. Dans mon cas, l'ajout d'un fichier dans le répertoire racine fonctionnait bien, mais l'ajout d'un fichier avec une extension dans un sous-répertoire était affiché comme ignoré. Cela semble être dû au fait que 1.7.1 ne supportait pas **
encore le modèle, voir ici !
**
a été ajouté dans Git 1.8.2
. Y a-t-il un inconvénient à utiliser !*/
au lieu de !/**/
?
*
!*/
!*.*
*
dit à git d'ignorer tout.
!*/
puis annule tout ce qui est un répertoire. C'est crucial.
!*.*
annule tous les fichiers avec une extension.
Sans la !*/
règle, les répertoires sans un .
dans le nom ne seraient pas répertoriés et aucun de vos fichiers souhaités ne serait ajouté en dehors du dossier racine.
Pour référence, lisez ces deux sections de la documentation .gitignore qui se démarquent:
Un préfixe facultatif "!" ce qui annule le modèle; tout fichier correspondant exclu par un modèle précédent sera de nouveau inclus. Il n'est pas possible de ré-inclure un fichier si un répertoire parent de ce fichier est exclu. Git ne répertorie pas les répertoires exclus pour des raisons de performances, donc tous les modèles sur les fichiers contenus n'ont aucun effet, peu importe où ils sont définis. Mettez une barre oblique inverse ("\") devant le premier "!" pour les modèles commençant par un littéral "!", par exemple, "! important! .txt".
Si le modèle se termine par une barre oblique, il est supprimé aux fins de la description suivante, mais il ne trouvera qu'une correspondance avec un répertoire. En d'autres termes, foo / correspondra à un répertoire foo et les chemins en dessous, mais ne correspondra pas à un fichier normal ou à un lien symbolique foo (cela est cohérent avec la façon dont pathspec fonctionne en général dans Git).
Dans mes dossiers, il y a beaucoup de fichiers avec des *.c, *.h, *.txt, *.csv
extensions, etc. et des fichiers binaires sans aucune extension. Je devais donc ignorer tous les fichiers exécutés *.c,*.h
et .gitignore
, donc cela fonctionne pour moi, à partir de l' .gitignore
exemple:
*/* #ignore all files in each directory
!*/*.c #unignore .c files in each directory
!*/*.h #unignore .h header files in each directory
!.gitignore #unignore .gitignore
README
,LICENSE
ouCOPYING
,INSTALL
,Makefile
etc., mais vous pouvez toujours forcer- les ajouter et puis ils sont suivis