Utilisation des Fichiers .gitignore
Table des matières
- Qu'est-ce que .gitignore ?
- Syntaxe de base
- Patterns courants
- Templates par langage
- .gitignore global
- Problèmes courants
- Bonnes pratiques
1 - Qu'est-ce que .gitignore ?
Le fichier .gitignore indique à Git quels fichiers ou dossiers ne pas suivre.
Pourquoi ignorer des fichiers ?
| Type de fichier | Exemple | Raison |
|---|---|---|
| Dépendances | node_modules/ | Trop volumineux, recréables |
| Build | dist/, build/ | Générés automatiquement |
| Secrets | .env, secrets.json | Sécurité ! |
| IDE | .vscode/, .idea/ | Préférences personnelles |
| OS | .DS_Store, Thumbs.db | Fichiers système |
| Logs | *.log | Temporaires |
| Cache | __pycache__/, .cache/ | Recréables |
Créer un .gitignore
# À la racine du projet
touch .gitignore
🔝 Retour à la table des matières
2 - Syntaxe de base
Règles simples
# Ceci est un commentaire
# Ignorer un fichier spécifique
secret.txt
# Ignorer un dossier
node_modules/
# Ignorer par extension
*.log
*.tmp
# Ignorer dans tous les sous-dossiers
**/temp/
# Négation (ne PAS ignorer)
!important.log
Syntaxe des patterns
| Pattern | Signification | Exemple |
|---|---|---|
file.txt | Fichier exact | file.txt |
*.txt | Tous les .txt | readme.txt, notes.txt |
folder/ | Dossier entier | folder/ et son contenu |
folder/* | Contenu du dossier | Fichiers dans folder/ |
**/logs | logs n'importe où | a/logs, a/b/logs |
logs/** | Tout dans logs | logs/a, logs/a/b |
!file.txt | Exception | Ne pas ignorer file.txt |
[abc].txt | a.txt, b.txt, c.txt | Classe de caractères |
file?.txt | file1.txt, fileA.txt | Un caractère quelconque |
🔝 Retour à la table des matières
3 - Patterns courants
Fichiers de configuration secrets
# Variables d'environnement
.env
.env.local
.env.*.local
# Fichiers de secrets
secrets.json
credentials.json
*.pem
*.key
Dépendances
# Node.js
node_modules/
package-lock.json # Optionnel
# Python
venv/
__pycache__/
*.pyc
# PHP
vendor/
# Java
target/
*.jar
Build et output
# Build
dist/
build/
out/
*.min.js
*.min.css
# Coverage
coverage/
.nyc_output/
IDE et éditeurs
# VS Code
.vscode/
!.vscode/settings.json # Garder les settings partagés
# JetBrains (IntelliJ, WebStorm, PyCharm)
.idea/
*.iml
# Vim
*.swp
*.swo
# Emacs
*~
Système d'exploitation
# macOS
.DS_Store
.AppleDouble
.LSOverride
# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
# Linux
*~
.nfs*
🔝 Retour à la table des matières
4 - Templates par langage
Node.js / JavaScript
# Dependencies
node_modules/
# Build
dist/
build/
# Environment
.env
.env.local
.env.*.local
# Logs
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# IDE
.vscode/
.idea/
# OS
.DS_Store
Thumbs.db
# Testing
coverage/
# Cache
.cache/
.parcel-cache/
Python
# Byte-compiled
__pycache__/
*.py[cod]
*$py.class
# Virtual environment
venv/
ENV/
.venv/
# Distribution
dist/
build/
*.egg-info/
# IDE
.idea/
.vscode/
*.swp
# Jupyter
.ipynb_checkpoints/
# Environment
.env
# Testing
.pytest_cache/
.coverage
htmlcov/
Java / Spring Boot
# Build
target/
build/
# IDE
.idea/
*.iml
.project
.classpath
.settings/
# Logs
*.log
# Maven
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
# Gradle
.gradle/
gradle-app.setting
!gradle-wrapper.jar
Ressource : gitignore.io
Générez automatiquement un .gitignore :
👉 https://www.toptal.com/developers/gitignore
🔝 Retour à la table des matières
5 - .gitignore global
Configuration globale
Pour ignorer des fichiers dans tous vos projets :
# Créer le fichier global
touch ~/.gitignore_global
# Configurer Git pour l'utiliser
git config --global core.excludesFile ~/.gitignore_global
Contenu recommandé pour ~/.gitignore_global
# macOS
.DS_Store
.AppleDouble
.LSOverride
._*
# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
# IDE
.idea/
*.swp
*.swo
*~
# Logs généraux
*.log
Quand utiliser global vs local ?
| Type | Global | Local (.gitignore du projet) |
|---|---|---|
| Fichiers OS | ✅ | ❌ |
| Préférences IDE perso | ✅ | ❌ |
| Dépendances projet | ❌ | ✅ |
| Config projet | ❌ | ✅ |
| Fichiers build | ❌ | ✅ |
🔝 Retour à la table des matières
6 - Problèmes courants
Problème 1 : Le fichier est déjà suivi
Symptôme : Vous ajoutez un fichier au .gitignore mais il est toujours suivi.
Cause : Le fichier a été ajouté avant le .gitignore.
Solution :
# Retirer du suivi (garder le fichier localement)
git rm --cached fichier.txt
# Pour un dossier
git rm -r --cached dossier/
# Commiter
git commit -m "chore: stop tracking fichier.txt"
Problème 2 : Ignorer tout sauf certains fichiers
# Ignorer tout dans logs/
logs/*
# Sauf .gitkeep
!logs/.gitkeep
Problème 3 : .gitignore ne fonctionne pas
Vérifications :
- Le fichier est-il bien nommé
.gitignore(avec le point) ? - Y a-t-il des espaces en fin de ligne ?
- Le fichier a-t-il le bon encodage (UTF-8) ?
# Vérifier ce qui est ignoré
git check-ignore -v fichier.txt
# Voir tous les fichiers ignorés
git status --ignored
Problème 4 : Secret commité par erreur
# 1. Ajouter au .gitignore
echo "secret.env" >> .gitignore
# 2. Retirer du suivi
git rm --cached secret.env
# 3. Commiter
git commit -m "security: remove secret from tracking"
# 4. IMPORTANT : Changer les secrets compromis !
# L'historique Git contient toujours le fichier
⚠️ Pour supprimer complètement un secret de l'historique, utilisez
git filter-branchou BFG Repo-Cleaner.
🔝 Retour à la table des matières
7 - Bonnes pratiques
✅ À faire
- Créer le .gitignore dès le début du projet
- Utiliser des templates (gitignore.io)
- Ne jamais commiter de secrets
- Documenter les fichiers ignorés inhabituels
❌ À éviter
- Ignorer des fichiers essentiels (package.json, requirements.txt)
- Ignorer le .gitignore lui-même
- Ignorer des fichiers de config partagés (.editorconfig)
Structure de projet recommandée
mon-projet/
├── .gitignore # Ignorer fichiers du projet
├── .env.example # Template pour .env (commité)
├── .env # Variables réelles (ignoré)
├── package.json # Commité
├── node_modules/ # Ignoré
├── dist/ # Ignoré
└── src/
└── ...
Exemple complet .gitignore
# ===============================
# Dependencies
# ===============================
node_modules/
vendor/
# ===============================
# Build & Output
# ===============================
dist/
build/
*.min.js
*.min.css
# ===============================
# Environment & Secrets
# ===============================
.env
.env.local
.env.*.local
*.pem
secrets/
# ===============================
# IDE & Editors
# ===============================
.idea/
.vscode/
*.swp
*.swo
# ===============================
# OS Files
# ===============================
.DS_Store
Thumbs.db
# ===============================
# Logs & Cache
# ===============================
logs/
*.log
.cache/
# ===============================
# Testing
# ===============================
coverage/
.nyc_output/