Il y a quelques fichiers que vous ne sans extension voulez pas ignorer: README, LICENSEou COPYING, INSTALL, Makefileetc., mais vous pouvez toujours forcer- les ajouter et puis ils sont suivis
Jakub Narębski
@ JakubNarębski bon point. Je l'ai inclus dans ma réponse pour plus de visibilité.
ajoutez d'abord le fichier sans extension qui compte
puis éditez votre .gitignorecomme 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:
La réponse est tout à fait correcte. Mais peut-être mieux .gitignoreserait **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 ...
Willem Van Onsem
7
Remarque: pour travailler avec d'autres règles d'exclusion, il faudra que ce soit le premier ensemble de règles dans votre fichier .gitignore
Erik
Vous pouvez également réintégrer certains fichiers sans extension, par exemple avec !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 !
mxmlnkn
1
**a été ajouté dans Git 1.8.2. Y a-t-il un inconvénient à utiliser !*/au lieu de !/**/?
mxmlnkn
@TamaMcGlinn Cela ressemble à une regex: gitignore ne supporte pas les regex.
VonC
50
*
!*/
!*.*
* 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.
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).
Bonne prise. +1. J'avais oublié de mettre à jour ma réponse avec cette règle que j'avais récemment utilisée dans d'autres réponses de mines. J'ai mis à jour ma réponse en conséquence.
VonC le
0
Dans mes dossiers, il y a beaucoup de fichiers avec des *.c, *.h, *.txt, *.csvextensions, etc. et des fichiers binaires sans aucune extension. Je devais donc ignorer tous les fichiers exécutés *.c,*.het .gitignore, donc cela fonctionne pour moi, à partir de l' .gitignoreexemple:
*/* #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 suivisRé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:
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:
Cela n'aurait pas fonctionné ici de toute façon.
la source
.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 Git1.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:
la source
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:la source