Qu’est-ce qu’un fichier .gitignore et comment le configurer ? –
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 de nombreuses utilisations et vous devrez presque toujours le configurer si vous configurez un nouveau dépôt.
Sommaire
Quel est l’intérêt de .gitignore ?
Dans la plupart des projets, il existe une différence entre code/config et 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 le package.json
configuration pour rechercher des packages.
Alors, quel est l’intérêt d’avoir le node_modules
dossier dans Git? Il n’y en a pas vraiment, car il est plus compliqué, peut causer des problèmes et peut même augmenter considérablement la taille du référentiel Git dans de nombreux cas.
Si vous ignorez l’intégralité du répertoire, tous vos collègues peuvent toujours générer leur propre copie locale à partir du package.json
déposer. Donc, au lieu de cela, seulement package.json
doit être suivi dans Git. La plupart des choses qui sont ajoutées à .gitignore
suivre ce modèle. Construisez des artefacts, comme un ./bin/
dossier, ne vous engagez pas 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 être suivi dans le contrôle de source, vous pouvez également les ajouter. Les caches, journaux et autres sorties peuvent généralement être ignorés.
Utiliser .gitignore
Vous devrez créer un fichier appelé .gitignore
, sans extensions, à la racine de votre projet où votre .git
répertoire se trouve. 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 le configurer de plusieurs manières, mais les principaux outils dont vous disposez sont :
*
des 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 son extension.!
, qui fonctionne comme une sorte de liste blanche qui annule un fichier précédemment exclu. Le principal problème avec ceci est qu’il ne met en liste blanche le fichier que s’il a été directement exclu et ne fonctionnera pas pour les fichiers dans des répertoires qui ont été complètement exclus.**
, qui correspond à n’importe quoi de manière récursive dans les répertoires. Par example,**/*.json
correspondra à n’importe quel fichier JSON, peu importe où il se trouve, etsrc/**
correspondra à chaque fichier du dossier de manière récursive. Ceci est utile lorsque vous souhaitez ajouter une liste blanche et ne pas ignorer tout le répertoire.
Par exemple, un gitignore de 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 jeu depuis Steam. Cet outil est emballé dans un seul exécutable portable, mais il produit beaucoup de déchets que je ne veux pas suivre dans Git.
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 faire correspondre les chaînes, comme un point d’interrogation pour faire correspondre un seul caractère, ou [a-z]
qui correspondra aux jeux de caractères.
Vous pouvez également écrire plusieurs .gitignore
fichiers 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 :
# Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/
Si vous rencontrez des problèmes avec votre .gitignore
configuration, vous pouvez le déboguer avec le check-ignore
Commande Git :
git check-ignore -v testfile.json
.gitignore global
Git a également un paramètre global pour .gitignore
, mais il ne devrait pas vraiment être utilisé dans la plupart des cas. C’est parce que le monde .gitignore
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 avec la commande suivante :
git config --global core.excludesfile ~/.globalignore
Forcer la validation ou le stockage des fichiers ignorés
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 voulez valider manuellement quelque chose, vous pouvez exécuter git add
avec le --force
paramètre:
git add -f debug.log
De même, git stash
peut également stocker des modifications locales dans des fichiers ignorés, ce qui peut être utile car cela n’affectera pas le référentiel distant :
git stash --all