Guía de sintaxis y patrones en .gitignore
Explicación detallada de las reglas de formato, comodines glob, barras iniciales y finales, negaciones y la trampa de exclusión de carpetas en Git.
Cada línea en un archivo .gitignore representa un patrón independiente con tres principios fundamentales:
- Las líneas en blanco se ignoran y funcionan como separadores visuales para mantener el archivo limpio.
- Las líneas que comienzan con # son comentarios y no tienen efecto en el control de versiones.
- Los espacios al final de una línea se ignoran salvo que se escapen con una barra invertida (\ ).
# Ignore compiled Python bytecode
__pycache__/
*.py[cod]
# Ignore local secret configurations
.env
.env.localGit admite los comodines tradicionales de shell en un único nivel de directorio:
- * (Asterisco): Coincide con cero o más caracteres dentro de un mismo segmento de ruta. *.log coincide con error.log, pero no con subcarpeta/error.log.
- ? (Signo de interrogación): Coincide exactamente con un único carácter. test?.js coincide con test1.js, pero no con test12.js.
- [abc] (Rango de caracteres): Coincide con cualquier carácter dentro de los corchetes. *.[oa] coincide con archivos terminados en .o o .a.
La posición de la barra inclinada (/) altera radicalmente la forma en que Git interpreta las reglas:
- Barra final (logs/): Limita la regla exclusivamente a directorios. Se ignorará una carpeta llamada logs/, pero no un archivo normal llamado logs.
- Barra inicial (/config.json): Ancla la coincidencia a la raíz donde reside el archivo .gitignore. Ignora /config.json, pero permite rastrear /subcarpeta/config.json.
- Barra intermedia (docs/*.html): Ancla la regla de forma relativa al directorio que contiene el archivo .gitignore.
El doble asterisco permite coincidir a través de múltiples jerarquías de directorios:
- **/cache: Coincide con cualquier carpeta o archivo llamado cache en cualquier lugar del repositorio (cache, src/cache, a/b/c/cache).
- logs/**: Coincide con todos los archivos y subcarpetas dentro del directorio logs/, sin importar su profundidad.
- a/**/b: Coincide con a/b, a/x/b, a/x/y/b, etc.
El signo de exclamación (!) niega una regla anterior, indicando a Git que vuelva a incluir un archivo que de otro modo sería ignorado.
Por motivos de rendimiento, Git omite por completo explorar una carpeta una vez que esta ha sido ignorada. Si se ignora build/, Git NUNCA volverá a incluir un archivo interno mediante !build/importante.txt.
Para incluir un archivo dentro de una carpeta ignorada, debes ignorar el contenido de la carpeta en lugar de la carpeta misma:
# INCORRECT: Will NOT work because parent directory is skipped
node_modules/
!node_modules/my-local-package
# CORRECT: Ignore contents of directory, then whitelist the specific target
node_modules/*
!node_modules/my-local-package/Para verificar con precisión qué regla de .gitignore está afectando a un archivo, usa el comando de diagnóstico de Git con el parámetro -v:
# Shows the exact .gitignore file and line number responsible
git check-ignore -v src/temp/debug.logPreguntas frecuentes
Respuestas a dudas comunes de desarrolladores sobre reglas de .gitignore, caché y gestión del repositorio.
¿Cuál es la diferencia entre * y ** en .gitignore?
Un asterisco simple (*) coincide con caracteres dentro de un único nivel de carpeta. El doble asterisco (**) coincide a través de múltiples subcarpetas anidadas.
¿Por qué no funciona !carpeta/archivo.txt si carpeta/ está ignorada?
Git no inspecciona los archivos dentro de una carpeta ignorada. Para crear una excepción, debes ignorar el contenido con 'carpeta/*' y luego definir la excepción.
¿Cómo averiguar qué regla está ignorando un archivo?
Ejecuta 'git check-ignore -v <ruta>'. Git mostrará el archivo .gitignore exacto y el número de línea que coincide.
Guías y Referencias de .gitignore
Cómo ignorar archivos ya rastreados en Git
La solución definitiva al problema habitual en Git: desindexar archivos sensibles o generados que fueron comiteados por error antes de añadir el .gitignore.
Cómo ignorar un directorio en Git
Explicación clara de las reglas para ignorar carpetas: semántica de barra final, rutas relativas a la raíz, subdirectorios y cómo conservar carpetas vacías.
Ejemplos de .gitignore para stacks modernos
Ejemplos prácticos y seleccionados de archivos .gitignore para lenguajes populares, frameworks backend, videojuegos, desarrollo móvil y contenedores.