Simplement dit, .gitkeep est un fichier factice conventionnel. Son existence ne sert qu’un seul but : forcer Git à suivre un dossier qui devrait autrement être vide.
Pourquoi est-ce nécessaire ?
La logique de conception de Git est de “suivre les modifications de fichiers”, et non de “suivre les dossiers”. Si votre projet contient un dossier vide, Git l’ignorera complètement et ne le téléchargera pas sur GitHub ou votre serveur.
Ceci crée un problème : parfois votre code nécessite l’existence d’un certain répertoire pour s’exécuter, mais vous ne voulez pas télécharger de données de test ou de fichiers temporaires. Si le répertoire n’existe pas, le programme pourrait planter.
Ces dossiers sont généralement :
logs/: Pour les fichiers journauxuploads/: Fichiers téléchargés par les utilisateurstmp/: Fichiers temporairescache/: Données en cache
Ces répertoires sont nécessaires à l’exécution, leur contenu ne doit pas être commité, mais le dossier lui-même doit exister.
Comment ça marche
Pour “tromper” Git afin de conserver ce dossier, nous y plaçons un fichier caché sans fonction réelle, faisant croire à Git : “Oh ! Il y a quelque chose ici, je dois l’enregistrer.”
Analogie pratique :
Imaginez que vous construisez une maison (écrivez un projet) :
| Fichier | Description |
|---|---|
.gitignore |
Comme une étiquette “Ne pas jeter”, indiquant au nettoyeur (Git) quels éléments (comme la nourriture périmée, les vieux papiers) ne doivent absolument pas être déplacés dans la nouvelle maison. |
.gitkeep |
Comme un “Carton de réservation”. La nouvelle maison n’est pas encore meublée, mais vous devez réserver de l’espace pour le débarras, vous placez donc un carton là pour faire savoir aux déménageurs que cette zone fait partie de la maison et ne doit pas être démolie. |
Comment l’utiliser ?
- Créez un fichier nommé
.gitkeepà l’intérieur du dossier vide. - Le contenu du fichier peut être vide, ou vous pouvez écrire “Keep this directory”.
- Faites
git addetcommitde ce fichier.
Comparaison .gitkeep vs .gitignore
| Fonctionnalité | .gitkeep |
.gitignore |
|---|---|---|
| Statut officiel | Non officiel (Juste une convention communautaire) | Officiel (Fonctionnalité intégrée de Git) |
| Fonction principale | Conserver un dossier, empêcher qu’il soit oublié par Git | Exclure des fichiers, empêcher qu’ils soient suivis par Git |
| Scénarios courants | Dossiers de logs vides, dossiers de cache | Fichiers de mots de passe, node_modules, fichiers temporaires |
Conseil pratique : Penser différemment
Bien que .gitkeep soit couramment utilisé, il ne fait pas officiellement partie de Git. En fait, vous pourriez utiliser README.md ou .placeholder pour obtenir le même effet. Mais pourquoi tout le monde préfère .gitkeep ? Parce que c’est explicite : “Ce fichier ne fait rien d’autre qu’empêcher Git de supprimer ce dossier.”
Si vous voulez paraître un peu plus professionnel, il existe une approche plus créative et plus fonctionnelle que d’utiliser simplement .gitkeep :
Placez un .gitignore dans le dossier vide avec le contenu suivant :
# Ignorer tout dans ce répertoire
*
# Mais ne pas m'ignorer (ce fichier .gitignore lui-même)
!.gitignore
Ceci garantit que vous conservez le dossier tout en assurant que les fichiers indésirables à l’intérieur ne sont jamais commités accidentellement. C’est la véritable méthode “infaillible” (Foolproof).
Conclusion
.gitkeepest un compromis humain face à la logique de conception de Git.- Ce n’est pas une spécification officielle, mais c’est devenu une norme de facto pour les développeurs.
- Ce qui est vraiment important, c’est de comprendre comment fonctionne
.gitignore;.gitkeepn’est qu’un petit outil pour aider Git à “comprendre” les dossiers vides.