Uso de .gitignore efectivo
Aprende a configurar y utilizar el archivo .gitignore de manera efectiva para excluir archivos y directorios innecesarios de tu repositorio Git, manteniendo tu proyecto limpio y organizado.
Cristian Escalante
Última actualización: 28 de abril de 2025
Uso de .gitignore efectivo
Aunque ya hemos visto los conceptos básicos de .gitignore
en una lección anterior, en esta ocasión profundizaremos en estrategias avanzadas y buenas prácticas para utilizar este archivo de manera más efectiva. Un .gitignore
bien configurado es esencial para mantener tu repositorio limpio, eficiente y profesional.
Recordatorio: ¿Qué es .gitignore?
El archivo .gitignore
es un archivo de texto que le indica a Git qué archivos y directorios debe ignorar en un proyecto. Cuando Git encuentra un archivo listado en .gitignore
, lo excluye del seguimiento, lo que significa que no aparecerá como archivo no rastreado y no será incluido en los commits.
Patrones avanzados de .gitignore
Sintaxis básica (repaso)
# Comentario: esto es ignorado por Git
# Ignorar un archivo específico
archivo.txt
# Ignorar todos los archivos con una extensión
*.log
# Ignorar un directorio completo
node_modules/
Patrones con comodines
# Ignorar todos los archivos .txt en cualquier directorio
**/*.txt
# Ignorar todos los archivos en un directorio específico
logs/*
# Ignorar todos los archivos .txt en el directorio actual, pero no en subdirectorios
/*.txt
# Ignorar archivos que coincidan con un patrón
*~ # Archivos que terminan con ~
.[oa] # Archivos que terminan con .o o .a
Negación de patrones
Puedes negar un patrón añadiendo un signo de exclamación (!
), lo que hace que Git incluya archivos que de otra manera serían ignorados:
# Ignorar todos los archivos .log
*.log
# Pero no ignorar important.log
!important.log
# Ignorar todo dentro del directorio logs
logs/*
# Pero mantener el archivo .gitkeep
!logs/.gitkeep
Directorios vs. Archivos
Es importante entender la diferencia entre ignorar directorios y archivos:
# Ignorar un directorio y todo su contenido
node_modules/
# Ignorar solo archivos específicos dentro de un directorio
logs/*.log # Ignora archivos .log en logs/, pero no en subdirectorios
logs/**/*.log # Ignora archivos .log en logs/ y todos sus subdirectorios
Estrategias para organizar .gitignore
1. Archivo .gitignore en la raíz del proyecto
El enfoque más común es tener un único archivo .gitignore
en la raíz del repositorio:
# Dependencias
node_modules/
vendor/
# Archivos compilados
dist/
build/
# Archivos de entorno
.env
.env.local
# Archivos del sistema
.DS_Store
Thumbs.db
# Archivos de IDE
.idea/
.vscode/
*.sublime-project
2. Múltiples archivos .gitignore
Puedes tener archivos .gitignore
en diferentes directorios para aplicar reglas específicas:
# En la raíz: .gitignore global del proyecto
node_modules/
.env
# En src/.gitignore: reglas específicas para el código fuente
*.compiled.js
# En tests/.gitignore: reglas específicas para pruebas
coverage/
3. .gitignore global del sistema
Además de los archivos .gitignore
específicos del proyecto, puedes configurar un .gitignore
global para tu usuario:
git config --global core.excludesfile ~/.gitignore_global
Este archivo es ideal para patrones que quieres ignorar en todos tus proyectos, como:
# Archivos del sistema operativo
.DS_Store
Thumbs.db
desktop.ini
# Archivos temporales de editores
*~
.*.swp
.~lock.*
# Archivos de configuración personal de IDEs
.idea/
.vscode/user/
.gitignore por tipo de proyecto
Para proyectos Node.js
# Dependencias
node_modules/
npm-debug.log
yarn-error.log
yarn-debug.log
.pnpm-debug.log
# Cobertura
coverage/
# Producción
build/
dist/
out/
# Entorno
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# Caché
.npm/
.eslintcache
.cache/
Para proyectos Python
# Bytecode compilado
__pycache__/
*.py[cod]
*$py.class
# Distribución / empaquetado
dist/
build/
*.egg-info/
*.egg
# Entornos virtuales
venv/
env/
ENV/
.env/
.venv/
pythonenv*
# Pruebas y cobertura
.coverage
htmlcov/
.pytest_cache/
.tox/
# Jupyter Notebook
.ipynb_checkpoints
Para proyectos Java/Maven
# Archivos compilados
*.class
target/
out/
# Archivos de log
*.log
# Archivos de BlueJ
*.ctxt
# Archivos de Mobile Tools for Java (J2ME)
.mtj.tmp/
# Archivos empaquetados
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# Archivos de IDE
.idea/
*.iml
.classpath
.project
.settings/
.vscode/
Para proyectos .NET/C#
# Archivos compilados
bin/
obj/
[Dd]ebug/
[Rr]elease/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio
.vs/
*.user
*.userosscache
*.suo
*.userprefs
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
# NuGet
packages/
*.nupkg
Técnicas avanzadas
Ignorar archivos ya rastreados
Si has añadido un archivo a .gitignore
pero Git sigue rastreándolo, es porque ya estaba en el repositorio. Para dejar de rastrearlo:
git rm --cached archivo.txt
Para directorios:
git rm -r --cached directorio/
Depurar problemas con .gitignore
Si un archivo que debería ser ignorado sigue apareciendo, puedes depurar el problema:
git check-ignore -v archivo.txt
Este comando te mostrará qué regla (si hay alguna) está afectando al archivo.
Ignorar archivos localmente sin modificar .gitignore
Si necesitas ignorar archivos específicamente en tu entorno local sin afectar a otros colaboradores, puedes usar el archivo .git/info/exclude
:
# Editar el archivo de exclusiones locales
vim .git/info/exclude
# Añadir patrones específicos para tu entorno
mi-archivo-local.txt
config.local.js
Ignorar cambios temporalmente en archivos rastreados
Si necesitas hacer cambios locales en un archivo rastreado pero no quieres incluirlos en commits:
# Ignorar cambios en un archivo específico
git update-index --assume-unchanged config.js
# Para volver a rastrear cambios
git update-index --no-assume-unchanged config.js
O para un caso de uso similar pero con diferente comportamiento:
# Marcar un archivo como "skip worktree"
git update-index --skip-worktree config.js
# Para volver a rastrear
git update-index --no-skip-worktree config.js
Generación automática de .gitignore
Herramientas online
- gitignore.io: Genera archivos
.gitignore
basados en tecnologías específicas - GitHub .gitignore templates: Colección de plantillas mantenida por GitHub
Generación desde línea de comandos
Con curl:
# Generar .gitignore para Node y macOS
curl -sL https://www.toptal.com/developers/gitignore/api/node,macos > .gitignore
Con la CLI de GitHub (si está instalada):
# Crear un nuevo repositorio con un .gitignore para Python
gh repo create mi-proyecto --public --gitignore Python
Buenas prácticas para .gitignore
1. Crea el .gitignore al inicio del proyecto
Es mucho más fácil configurar correctamente el .gitignore
antes de comenzar a trabajar que limpiar un repositorio después.
2. Incluye solo lo necesario en el repositorio
Un buen principio es incluir solo los archivos que son estrictamente necesarios para que el proyecto funcione. Todo lo demás debería ser ignorado.
3. Categoriza y comenta tu .gitignore
Organiza tu .gitignore
en secciones con comentarios para facilitar su mantenimiento:
# Dependencias
node_modules/
vendor/
# Archivos compilados
dist/
build/
# Archivos de entorno
.env
.env.*
!.env.example
4. Mantén un archivo .env.example
Para proyectos que utilizan variables de entorno, incluye un archivo .env.example
con la estructura pero sin valores sensibles:
# .gitignore
.env
.env.*
!.env.example
5. Utiliza patrones específicos
Evita patrones demasiado generales que podrían ignorar archivos importantes:
# ❌ Demasiado general, podría ignorar archivos importantes
log/
# ✅ Más específico, solo ignora archivos .log
log/*.log
6. Revisa periódicamente tu .gitignore
A medida que el proyecto evoluciona, revisa y actualiza tu .gitignore
para asegurarte de que sigue siendo efectivo.
7. Considera las diferentes plataformas y herramientas
Si tu proyecto se desarrolla en diferentes sistemas operativos o con diferentes herramientas, asegúrate de que tu .gitignore
cubra todos los casos.
Patrones comunes que deberías ignorar
Archivos de configuración local
# Configuraciones locales
*.local
config.local.js
settings.local.json
Archivos de caché y temporales
# Caché y archivos temporales
.cache/
tmp/
temp/
*.tmp
*.bak
Archivos de registro y diagnóstico
# Logs y diagnósticos
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
Información sensible
# Información sensible
.env
.env.local
*.pem
*.key
credentials.json
Archivos específicos del sistema operativo
# macOS
.DS_Store
.AppleDouble
.LSOverride
Icon
._*
# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/
*.cab
*.msi
*.msm
*.msp
*.lnk
# Linux
*~
.fuse_hidden*
.directory
.Trash-*
.nfs*
Conclusión
Un archivo .gitignore
bien configurado es una herramienta esencial para mantener tu repositorio Git limpio, eficiente y profesional. Al excluir archivos innecesarios, temporales o sensibles, reduces el tamaño del repositorio, evitas conflictos y mejoras la seguridad.
Tómate el tiempo para configurar adecuadamente tu .gitignore
al inicio de cada proyecto y actualízalo según sea necesario a medida que el proyecto evoluciona. Utiliza las plantillas disponibles como punto de partida, pero personalízalas según las necesidades específicas de tu proyecto.
Recuerda que un buen .gitignore
refleja una comprensión clara de qué archivos son parte del código fuente y cuáles son artefactos generados o configuraciones específicas del entorno. Esta distinción es fundamental para un flujo de trabajo de desarrollo colaborativo y eficiente.