Qu'est-ce qu'un fichier .gitignore et comment le configurer ?

0
49

Un fichier .gitignore est un fichier texte placé dans votre référentiel git qui indique à git de ne pas suivre certains fichiers et dossiers que vous ne souhaitez pas télécharger dans votre référentiel maître. Il a beaucoup d'utilisations, et vous aurez presque toujours besoin de le configurer si vous configurez un nouveau dépôt.

What’ ;s Le point de .gitignore?

Dans la plupart des projets, il existe une différence entre le code/config et les fichiers générés à partir de ce code ou de cette configuration. Ce dernier n'est généralement pas utile et peut généralement être ignoré.

Habituellement, vous souhaitez uniquement que le code et la configuration soient suivis via git. En effet, les fichiers générés sont éphémères et si vous les supprimez, vous pouvez simplement les régénérer à nouveau. Il est souvent inutile de les télécharger, car ils compliqueront simplement les choses et provoqueront des conflits de fusion inutiles.

Il s'agit d'une définition large, alors regardons un exemple. Dans les projets Node JS, il existe un dossier appelé node_modules qui contient tous les packages externes dont votre code a besoin pour s'exécuter. Vous pouvez supprimer ce répertoire et le reconstruire complètement en exécutant npm install, qui utilise la configuration package.json pour rechercher des packages.

Alors, quel est l'intérêt d'avoir le dossier node_modules dans Git ? Il n'y en a pas vraiment, car c'est plus compliqué, peut causer des problèmes et peut même augmenter considérablement la taille du dépôt Git dans de nombreux cas.

Publicité

Si vous ignorez l'intégralité du répertoire, tous vos collègues peuvent toujours générer leur propre copie locale à partir du fichier package.json. Ainsi, à la place, seul package.json doit être suivi dans Git. La plupart des éléments ajoutés à .gitignore suivent ce modèle. Les artefacts de build, comme un dossier ./bin/, ne sont pas validés car ils sont le résultat direct du code lui-même.

D'autres éléments peuvent également être ajoutés à .gitignore pour plus de commodité. MacOS génère des fichiers système appelés .DS_store, que vous pouvez toujours ignorer. Peut-être que vous stockez des clés API dans .env/que vous ne voulez pas suivre dans le contrôle de source, vous pouvez également les ajouter. Les caches, journaux et autres sorties peuvent généralement être ignorés.

Utilisation de .gitignore

Vous devrez créer un fichier appelé .gitignore, sans extension, à la racine de votre projet où se trouve votre répertoire .git. Vous pouvez le faire depuis votre navigateur de fichiers ou depuis la ligne de commande avec n'importe quel éditeur de texte CLI :

nano .gitignore

Vous pouvez configurer cela de plusieurs manières, mais les principaux outils dont vous disposez sont :

  • * les caractères génériques, qui correspondent à n'importe quel texte et peuvent être utilisés pour correspondre à n'importe quel répertoire ou fichier quelle que soit l'extension.
  • !, qui fonctionne comme une sorte de liste blanche qui annule un fichier précédemment exclu. Le principal problème est qu'il ne met le fichier en liste blanche que s'il a été directement exclu, et ne fonctionnera pas pour les fichiers dans les répertoires qui ont été complètement exclus.
  • **, ce qui correspond à n'importe quoi de manière récursive dans les répertoires. Par exemple, **/*.json correspond à n'importe quel fichier JSON, quel que soit son emplacement, et src/** correspond à chaque fichier du dossier de manière récursive. Ceci est utile lorsque vous souhaitez ajouter une liste blanche et ne pas ignorer l'intégralité du répertoire.

Par exemple, un gitignore Node JS peut ressembler à ceci :

node_modules/build/npm-debug.log .env .env.test .env.production .DS_Store .npm .eslintcache logs/*.log npm-debug.log*

Liste blanche des fichiers avec ! peut être très utile pour de nombreuses configurations. Par exemple, dans l'un de mes projets, j'avais un outil appelé steamcmd qui télécharge les dépendances des serveurs de jeux à partir de Steam. Cet outil est regroupé dans un seul exécutable portable, mais il produit beaucoup de déchets que je ne souhaite pas suivre dans Git.

Publicité

La solution consistait à tout ignorer dans le dossier, mais à ajouter l'exécutable à la liste blanche. Cela fonctionnera pour tout exécutable portable qui se développe comme celui-ci ou produit des fichiers inutiles dans le répertoire.

Project/steamcmd/** !Project/steamcmd/steamcmd.exe

gitignore utilise également d'autres modèles de globalisation Unix pour chaînes de correspondance, telles qu'un point d'interrogation pour la correspondance d'un seul caractère, ou [az] qui correspond aux jeux de caractères.

Vous pouvez également écrire plusieurs fichiers .gitignore qui peuvent correspondre à des fichiers relatifs à eux-mêmes. Ce n'est pas vraiment utile car vous pouvez simplement inclure les règles dans le fichier racine, ce qui est plus facile à suivre, mais cela pourrait aider à la répétition du code dans certains cas. Cependant, la solution de contournement consiste à utiliser des jeux de caractères pour faire correspondre plusieurs répertoires. Par exemple, faire correspondre les répertoires en majuscules et en minuscules avec un ensemble :

# Résultats de la compilation [Dd]ebug/[Dd]ebugPublic/[Rr]elease/[Rr]eleases/

Si vous rencontrez des problèmes avec votre configuration .gitignore, vous pouvez la déboguer avec la commande Git check-ignore :

git check-ignore -v testfile.json

Global .gitignore

Git a également un paramètre global pour .gitignore, mais il ne devrait pas’ t vraiment être utilisé dans la plupart des cas. En effet, le .gitignore global sur votre ordinateur ne s'applique pas à vos collègues, et uniquement aux commits effectués avec votre instance de Git.

Si vous souhaitez quand même le définir, vous pouvez le faire donc avec la commande suivante :

git config –global core.excludesfile ~/.globalignore

Force Committing Ou Stashing Ignored Files

La validation forcée est généralement une mauvaise idée — vous devriez probablement ajouter une liste blanche pour ce fichier spécifique, car une fois validé, les mises à jour de ce fichier ne seront pas suivies. Mais, si vous souhaitez valider manuellement quelque chose, vous pouvez exécuter git add avec le paramètre –force :

git add -f debug.log Advertisement

De même, git stash peut également stocker des modifications locales à fichiers ignorés, ce qui peut être utile car cela n'affectera pas le dépôt distant :

git stash –all