web-dev-qa-db-fra.com

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

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

J'imagine que cela prendrait en charge tous ces fichiers gênants sans extension.

73
The Unfun Cat

Vous pouvez essayer une combinaison semblable à:

*
!/**/
!*.*

Cette règle d'exclusion gitignore (un motif négatif ) doit ignorer tous les fichiers, sauf ceux avec une extension.

Comme mentionné ci-dessous par Mad Physicist , la règle est la suivante:

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 récursivement) si nous voulons mettre des fichiers en liste blanche.

J'ai mentionné cette même règle dans des cas similaires, tels que:


Comme Jakub Narębskicommentaires , vous ne voudrez peut-être pas ignorer les fichiers tous sans extension.

Mon conseil:

  • ajoutez d'abord le fichier sans extension qui compte
  • puis éditez 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 seront ignorés.

Pour tous les futurs fichiers sans extension que vous voudriez version:

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 caractère générique dans le chemin réintroduit .

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

Cependant, puisque l’une des règles de la réinsertion était:

La partie de répertoire dans les règles de ré-inclusion doit être littérale (c'est-à-dire sans caractère générique)

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

78
VonC
*
!*/
!*.*

* dit à git de tout ignorer.

!*/ annule ensuite 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 . dans le nom ne seraient pas répertoriés et aucun des fichiers souhaités ne serait ajouté en dehors du dossier racine.

Pour référence, lisez ces deux sections dans la documentation .gitignore se démarque:

Un préfixe optionnel "!" qui nie le motif; tout fichier correspondant exclu par un modèle précédent sera inclus à nouveau. Ce n'est pas Il est 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 la performance raisons, de sorte que tous les modèles sur les fichiers contenus n'ont aucun effet, peu importe où ils sont définis. Placez une barre oblique inverse ("\") devant le premier "!" pour les modèles qui commencent par un "!" littéral, par exemple, "! important! .txt".

Si le motif se termine par une barre oblique, il est supprimé pour les besoins du fichier description suivante, mais il ne trouverait une correspondance avec un annuaire. En d'autres termes, foo/correspondra à un répertoire foo et à des chemins dessous, mais ne correspondra pas à un fichier normal ou à un lien symbolique foo (ceci est cohérent avec la façon dont fonctionne pathspec en général dans Git).

30
Mad Physicist

Mes dossiers contiennent de nombreux fichiers avec des extensions *.c, *.h, *.txt, *.csv etc., ainsi que des fichiers binaires sans aucune extension. Je devais donc ignorer tous les fichiers sauf *.c,*.h et .gitignore, cela fonctionne donc pour moi, à partir de l'exemple .gitignore:

 */*         #ignore all files in each directory
 !*/*.c      #unignore .c files in each directory
 !*/*.h      #unignore .h header files in each directory
 !.gitignore #unignore .gitignore
0
Antranig Avakian