.gitignore

Formation Git en partant de 0 partie 5

Ne pas tout ajouter

Maintenant que tu sais ajouter des fichiers dans ton dépôt Git, tu vas peut-être vouloir exécuter la commande git add . pour ajouter tous les fichiers de ton projet à l’index, et ainsi pouvoir faire le premier commit. Si en théorie c’est possible, dans la pratique tu éviteras de le faire (si si crois-moi).

Si tu utilises Git comme moi, c’est-à-dire que tu t’en sers pour gérer, contrôler, sauvegarder le code de tes projets ou encore réaliser des déploiements (envois/mise à jour de code), alors il y a des fichiers qu’il ne vaut mieux pas ajouter au dépôt.

Je te donne un rapide exemple, je travaille beaucoup avec WordPress et quand je Git, je n’ajoute jamais le fichier wp-config.php (qui contient essentiellement les données de connexion à la DB) car il sera souvent différent d’un environnement à l’autre et surtout différent pour chaque développeur de l’équipe, du moins pour ceux qui auront le projet sur leur machine locale. Cela veut dire que si un développeur récupère mon travail, il pourra avoir sa propre configuration de base de données.

Donc c’est un fichier que je vais choisir de ne pas ajouter dans le repository. Comme tu t’en doutes, il peut y en avoir bien d’autres, c’est un choix qui se fera surtout en fonction du type de projet et de ta façon d’utiliser Git.

.gitignore

Pour dire à Git d’ignorer des fichiers, le moyen le plus simple est d’utiliser un fichier qui va lister l’ensemble des chemins des fichiers et des dossiers à ne pas prendre en compte. Ce fichier se nomme .gitignore et se place à la racine du projet. Il est également possible de déposer plusieurs fichiers .gitignore dans des répertoires spécifiques.

En créant ce fichier et en exécutant la commande Git status, tu pourras voir que ce fichier peut être également versionné, ou pas (en l’ignorant lui même).

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	.gitignore

Ignorer un fichier

Pour reprendre l’exemple que j’ai cité au-dessus, c’est-à-dire celui avec le fichier wp-config.php, voici à quoi devra ressembler mon fichier .gitignore afin de l’ignorer.

wp-config.php

Ignorer un fichier dans un répertoire spécifique

L’opération est la même, je crée une nouvelle ligne et je place le nouveau chemin vers le fichier.

wp-config.php
wp-content/themes/alpha/documentation.txt

Ignorer un répertoire complet

Typiquement, sur un WordPress, le seul dossier que j’ignore est celui des uploads. Cela se fait de la même manière que pour un fichier, sauf qu’ici, je spécifie le chemin du dossier.

wp-config.php
wp-content/themes/alpha/documentation.txt
wp-content/uploads/

Qu'est-ce qu'il se passe

Chaque fois que je vais ajouter une ligne dans le fichier .gitignore et que je vais faire un git status, je pourrais observer deux choses. La première, c’est que le fichier .gitignore a été modifié, et la seconde, c’est que les fichiers ou dossiers que je viens d’ajouter disparaissent de la liste (pour des fichiers qui n’auraient pas encore été suivis hein).

Ignorer tous les fichiers d'un type

Grâce au symbole astérisque, il est possible de cibler tous les fichiers qui ont une extension particulière. Si je veux, par exemple, exclure tous les fichiers .php, je peux utiliser la règle suivante.

*.php

Il est possible de spécifier que ce soit tous les fichiers .php à l’intérieur d’un répertoire spécifique. Mais attention ! En réalisant cette règle, il est important de comprendre que Git ne va pas ignorer les fichiers .php dans les répertoires enfants du répertoire wp-admin/, car il ne respecte plus le pattern renseigné.

wp-admin/*.php

Pour ignorer l’ensemble des fichiers .php dans un répertoire et ses répertoires enfants, il faut utiliser la forme double astérisque, de cette façon le système va pouvoir descendre une « infinité » de répertoires et exclure tous les fichiers .php.

wp-admin/**/*.php

Ne pas ignorer malgré une règle

Pour dire à Git de ne pas ignorer un fichier ou dossier spécifique malgré une autre règle, il est possible d’utiliser le symbole !.

Dans cet exemple, tous les fichiers .php se trouvant dans le dossier wp-admin/ seront ignorés, sauf le fichier network.php.

wp-admin/**/*.php
!wp-admin/network.php

Attention, si je veux dire à Git de ne pas ignorer certains fichiers .php qui se trouvent dans un répertoire enfant, je pourrais être tenté d’ajouter uniquement ce répertoire, mais cela ne fonctionnerait pas, car la règle *.php est beaucoup plus restrictive. Dans ce cas-là, je dois ajouter *.php à la fin pour supplanter correctement la règle.

!wp-admin/wp-content/*.php

.gitignore enfant

Il est possible de créer des fichiers .gitignore n’importe où. Dans ce cas, Git considère l’emplacement du fichier comme étant la racine pour les règles de ce fichier, le fonctionnement reste le même.

Trucs et astuces

Si tu as vraiment un doute sur les règles que tu as écrites et que tu veux avoir la certitude que le fichier est ignoré, tu peux utiliser la commande check-ignore. Voici un exemple où je spécifie le path et l’option -v.

git check-ignore wp-includes/vars.php -v

De cette manière je peux savoir s’il est ignoré, la ligne de la règle, la règle elle-même, bref… Avec cela, impossible de se tromper.

.gitignore:1:wp-includes/*.php wp-includes/vars.php

Lorsque tu exécutes la commande add, tu peux aussi utiliser l’option dry-run qui permet d’avoir une vision complète sur ce qui va être ajouté.

git add . --dry-run

Un site web qui peut t’aider aussi, c’est gitignore.io qui permet de saisir le type de projet (ex:WordPress) et propose un fichier de base pour ton projet, tu pourras sans doute adapter les règles selon tes besoins.

27/09/2021

Yann Vangampelaere - nouslesdevs -

Sinon jete un coup d’oeil aux autres catégories

Ma boîte aux lettres

Tu veux me demander quelque chose ?