En el mundo del control de versiones con Git, a veces necesitamos asegurarnos de que ciertas carpetas existan en un repositorio, incluso si no contienen archivos directamente rastreados. Git, por defecto, solo rastrea archivos, no directorios. Si un directorio está vacío, Git no lo incluye en el repositorio. Esto puede ser problemático si, por ejemplo, necesitas una carpeta 'build' para almacenar archivos generados durante la compilación de un proyecto.
Tradicionalmente, se ha utilizado una técnica con un archivo llamado .gitkeep dentro de la carpeta que se desea rastrear. Este archivo, aunque vacío, le indica a Git que cree la carpeta. Para que esto funcione, también es necesario agregar patrones en el archivo .gitignore del repositorio para ignorar todo dentro de la carpeta, excepto el propio .gitkeep. Esta solución, aunque funcional, tiene inconvenientes: requiere modificar dos archivos (el .gitkeep y el .gitignore), y el nombre .gitkeep no es un estándar de Git, lo que puede generar confusión entre los desarrolladores y falta de documentación.
Existe una alternativa más elegante y sencilla. Esta alternativa utiliza únicamente un archivo .gitignore dentro de la carpeta que se desea rastrear. Este archivo .gitignore contiene dos líneas: una que ignora todos los archivos dentro de la carpeta () y otra que des-ignora el propio archivo .gitignore (!.gitignore). Esto permite que Git detecte la existencia del archivo .gitignore y, por ende, la carpeta, sin necesidad de un archivo especial como .gitkeep.
¿Para quién es útil esto? Esta técnica es especialmente útil para desarrolladores que trabajan con proyectos que generan archivos de salida en directorios específicos, como proyectos de compilación, proyectos web con carpetas de distribución, o cualquier situación donde se requiera la existencia de una carpeta en el repositorio, aunque no contenga archivos rastreados directamente. La solución con .gitignore es preferible porque es más limpia, más fácil de mantener y se adhiere a las convenciones estándar de Git. Evita la ambigüedad introducida por el archivo .gitkeep y simplifica el proceso de configuración y mantenimiento del repositorio.
