160 votes

Comment ajouter des fichiers sans points dans leur nom (tous les fichiers sans extension) au fichier gitignore?

Comme le titre le dit, est-il possible d'ajouter "des fichiers sans points" au fichier gitignore?

Je suppose que cela prendrait soin de tous ces fichiers sans extension gênants.

186voto

VonC Points 414372

Vous pouvez essayer une combinaison similaire à:

*
!/**/
!*.*

Cette règle d'exclusion gitignore (une pattern négatif) devrait ignorer tous les fichiers, sauf 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 !/**/ est important (liste blanche des dossiers parents de façon récursive) si nous voulons whitelister des fichiers.

J'ai mentionné cette règle dans des cas similaires comme:


Comme Jakub Narębski commente, vous ne voulez peut-être pas ignorer tous les fichiers sans extension.

Mon conseil:

  • ajoutez d'abord le fichier sans extension qui vous intéresse
  • puis modifiez votre .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 le seront.

Pour tout futur fichier sans extension que vous voudriez versionner:

git add -f -- myFile

Notez qu'avec git 2.9.x/2.10 (mi-2016 ?), il pourrait être possible de ré-inclure un fichier si un répertoire parent de ce fichier est exclu s'il n'y a pas de joker dans le chemin ré-inclus.

Nguyễn Thái Ngọc Duy (pclouds) essaye d'ajouter cette fonctionnalité:

Cependant, comme l'une des règles de réinclusion était:

La partie du répertoire dans les règles de réinclusion doit être littérale (c'est-à-dire sans jokers)

Cela n'aurait de toute façon pas fonctionné ici.

77voto

Mad Physicist Points 3218
*
!*/
!*.*

* indique à git d'ignorer tout.

!*/ permet ensuite d'annuler l'ignorance de tout ce qui est un répertoire. C'est crucial.

!*.* annule l'ignorance de 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 dans la documentation .gitignore :

Un préfixe facultatif "!" qui annule le motif ; tout fichier correspondant exclu par un motif 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 performance, donc tout motif sur les fichiers contenus n'a aucun effet, peu importe où ils sont définis. Mettez un antislash ("\") devant le premier "!" pour les motifs commençant par un "!" littéral, par exemple, "!important!.txt".

Si le motif se termine par un slash, il est supprimé aux fins de la description suivante, mais il ne correspondra qu'à un répertoire. En d'autres termes, foo/ correspondra à un répertoire foo et aux chemins en dessous, mais ne correspondra pas à un fichier ordinaire ou un lien symbolique foo (cela est cohérent avec le fonctionnement général des spécifications de chemin dans Git).

5voto

Dans mes dossiers, il y a beaucoup de fichiers avec les extensions *.c, *.h, *.txt, *.csv etc. et des fichiers binaires sans aucune extension. J'ai donc dû ignorer tous les fichiers sauf les fichiers *.c, *.h et .gitignore, donc cela fonctionne pour moi, à partir de l'exemple .gitignore:

 */*         #ignorer tous les fichiers dans chaque répertoire
 !*/*.c      #ne pas ignorer les fichiers .c dans chaque répertoire
 !*/*.h      #ne pas ignorer les fichiers d'en-tête .h dans chaque répertoire
 !.gitignore #ne pas ignorer .gitignore

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