¿Cómo ignorar extensiones? Uso de * y **

*.log ignora nombres acabados en .log dentro del alcance del .gitignore. Para un directorio concreto, decide si incluyes sus subdirectorios.

1. Ignorar una extensión en todo el proyecto

En el .gitignore raíz, coincide con app.log, logs/app.log y src/app.log. * representa cero o más caracteres salvo /; sin barras en el patrón, Git comprueba nombres a cualquier profundidad inferior.

Escribe un patrón por línea. Son patrones Git, no comandos de shell ni expresiones regulares: *.{log,tmp} no es una lista de extensiones.

*.log

2. Limitar el patrón a un directorio

La primera alternativa coincide con logs/app.log pero no con logs/archive/app.log. La segunda coincide con ambas: /**/ permite cero o más directorios intermedios. Ninguna coincide con src/app.log.

Prueba solo una alternativa cada vez. /logs/ puede ocultar archivos anidados al excluir su padre; revisa otras reglas antes de evaluar un comodín.

/logs/*.log
/logs/**/*.log

¿Cómo ignorar carpetas? folder/ frente a /folder/

3. Comprobar rutas representativas

Elige una regla, crea los tres archivos sin seguimiento e inspecciona los patrones:

git check-ignore -v -- logs/app.log logs/archive/app.log src/app.log

Con /logs/**/*.log deben coincidir las dos rutas bajo logs, pero no src/app.log. Una coincidencia que empieza por ! es una excepción; mantén accesibles sus directorios padres.

¿Por qué ! no conserva un archivo en un directorio ignorado?

Consulta las referencias oficiales para conocer el comportamiento exacto y más detalles: Documentación de Git · Documentación de git check-ignore