Les subtilités du .gitignore

 

Maintenant que je peux créer mes propres dépôts git grâce à O2Switch, ça m'a donné envie de faire du versioning pour tous mes projets. Y compris pour l'Encyclopédie de l'Eurodance. Mais pas question de versioner près de 100 000 fichiers (dont de nombreuses images et sons, et je ne parle même pas des très nombreuses sources)…

Comment sélectionner les fichiers que je souhaite versioner ? Grâce au fichier .gitignore, qui permet d'indiquer quels fichiers ne doivent pas être trackés (et les éventuelles exceptions).

Où se trouve-t-il ?

Attention, ce petit fichier texte n'est pas créé par défaut dans un projet Git. Et comme Windows interdit les noms de fichier de ce type, soit vous le créez sous Linux, soit vous créez un fichier texte vide nommé gitignore, puis vous l'uploadez sur un de vos hébergement, vous le renommez et le retéléchargez.

Ou encore, vous faites un copier-coller du .gitignore d'un autre projet…

Le .gitignore doit se trouver à la racine du projet

Le projet exemple et son .gitignore

Voici l'arborescence de mon projet (en réalité un petit projet de test, le vrai est beaucoup plus gros)

Arborescence du projet

Et voici le contenu de mon fichier .gitignore

essai.php
_notes/
/bios
/concert_photos/*/
/html_version
/images
/lyric/*/
/pass
/prive
/reviews/images
/ringtones/midi_files
/samples
/Sources
/test
/winamp_skins

Et maintenant, expliquons tout ça. Je veux que Git tracke :

  • tous les fichiers situés à la racine, sauf essai.php
  • aucun des répertoires _notes/ que Dreamweaver a la fâcheuse tendance de semer partout, à la racine du projet mais aussi dans les sous-répertoires
  • les fichiers situés dans le répertoire /concert_photos et dans le répertoire /lyric MAIS pas leurs sous-répertoires (bon là dans mon exemple il n'y qu'un seul sous-rép, mais dans le vrai projet il y en a 26 !) ni leur contenu
  • aucun des répertoires /bios, /html_version, /images, /pass, /prive, /samples, /Sources, /test et /winamp_skins
  • pas le sous-répertoire /images dans /reviews ni le sous-répertoire /midi_files dans /ringtones

Résultat

Après avoir initialisé le projet (git init), fait un git add . , voici ce que me donne git status

Fichiers trackés en se basant sur gitignore

Pour comparaison, voilà ce que j'aurais eu s'il n'y avait pas eu de .gitignore

Sans gitignore

Et si le résultat ne correspond pas à vos attente, pas de panique ! Vous pouvez recommencer en supprimant le répertoire caché .git qui a été créé lors du git init

 

Les exceptions

Et si jamais je voulais ignorer les contenu de /winamp_skins SAUF le fichier index.php ? Il faut deux lignes, d'abord pour dire qu'on ignore tout, puis qu'on n'ignore pas le fichier qui nous intéresse (avec un point d'exclamation).

winamp_skins/*
!winamp_skins/index.php

Voici le résultat (où j'ai également demandé à ce que le fichier samples/player.php soit tracké)

Avec gitignore avec exceptions

Bonus : exclure certains formats de fichiers

Prenons le répertoire /interviews par exemple. Un vrai bordel. Faut dire qu'à l'époque, quand j'ai créé le site en 2000, je ne pensais pas que j'en aurais autant, et encore moins que le site prendrait une telle extension. Donc les images (gif et jpg) sont stockées en vrac avec les pages des interviews… pas top. Comment exclure ces images ?

/interviews/*.jpg
/interviews/*.gif

 

Voilà, grâce à ces quelques exemples qui couvrent pas mal de cas courants, vous avez de quoi ciseler un amour de petit fichier .gitignore !

Sources

Git ignore sub folders

Make .gitignore ignore everything except a few files

Et pour aller encore plus loin : la doc officielle

Karine SANCHE

Partager cet article