El Propósito de .gitkeep
Git no rastrea directorios vacíos por diseño. Cuando necesitamos mantener un directorio vacío en la estructura de nuestro repositorio, utilizamos .gitkeep
. Es importante señalar que no es una característica oficial de Git, sino una convención adoptada por la comunidad.
Casos de Uso Comunes
Directorios de Compilación
proyecto/
├── src/
└── build/
└── .gitkeep
El directorio build/
se preserva para el output de compilación mientras mantenemos limpio el repositorio.
Directorios de Caché en Desarrollo
proyecto/
├── app/
└── cache/
└── .gitkeep
Las aplicaciones frecuentemente necesitan directorios de caché disponibles pero vacíos al clonar inicialmente.
Directorios de Assets para Testing
proyecto/
└── tests/
└── fixtures/
└── uploads/
└── .gitkeep
Los suites de pruebas a menudo requieren estructuras específicas de directorios para simular cargas de archivos.
Buenas Prácticas
-
Nomenclatura Alternativa: Aunque
.gitkeep
es convencional, algunos equipos usan.keep
o.gitignore
. Lo importante es mantener la consistencia dentro del proyecto. -
Comentarios en el Archivo: Es recomendable añadir un comentario dentro del
.gitkeep
explicando su propósito:
# Este directorio se utiliza para almacenar archivos temporales de caché
# Se mantiene vacío en el repositorio mediante este archivo .gitkeep
- Uso con .gitignore: Si necesitas excluir todos los archivos de un directorio excepto
.gitkeep
:
cache/*
!cache/.gitkeep
Consideraciones Importantes
.gitkeep
es una solución específica para mantener directorios vacíos. No debe usarse para otros propósitos.- No abuses de
.gitkeep
. Si un directorio está constantemente vacío, considera si realmente es necesario en tu estructura. - Documenta en el README del proyecto los directorios que utilizan
.gitkeep
y su propósito.
Alternativas
En algunos casos, podrías considerar alternativas a .gitkeep
:
- Incluir un archivo README.md explicativo en el directorio.
- Usar scripts de inicialización que creen la estructura necesaria.
- Implementar la creación dinámica de directorios en tu aplicación.
La elección dependerá de tus necesidades específicas y las convenciones de tu equipo.