lección 7
Gitflow simplificado: el flujo que usan los equipos reales
Main + feature branches. El flujo mínimo viable para que un equipo de datos trabaje sin caos y con orden.
⏱ 50 min
Ya tienes todas las piezas: branches, merge, GitHub, PRs, conflictos. Ahora la pregunta es: ¿cómo se organiza todo esto en un equipo real? Porque sin un acuerdo de equipo, cada uno usa branches como quiere y el repo se convierte en un plato de espaguetis. Necesitas un "flujo" — un conjunto de reglas simples que todos siguen. El flujo que vamos a aprender es el mínimo viable para equipos de datos: simple, efectivo y sin burocracia innecesaria.
Existe un modelo llamado "Gitflow" (creado por Vincent Driessen en 2010) que propone branches como develop, release, hotfix, feature... Es completo pero DEMASIADO complejo para equipos pequeños o medianos. He visto equipos de 5 personas paralizados por seguir Gitflow al pie de la letra. Mi filosofía: empieza con lo mínimo que funcione y añade complejidad solo cuando la necesites. Para el 90% de equipos de datos, main + feature branches es todo lo que necesitas.
### El flujo mínimo viable: main + feature branches
El flujo más simple que funciona profesionalmente tiene estas reglas:
- 01.main es sagrado: siempre funciona, siempre es deployable, nadie commitea directamente
- 02.Cada tarea = una feature branch: por pequeña que sea, trabaja en una branch
- 03.Nombres descriptivos: feature/, fix/, refactor/, docs/ + nombre claro
- 04.Push frecuente: sube tu branch a GitHub al menos una vez al día (backup + visibilidad)
- 05.PR obligatorio: todo cambio pasa por un Pull Request con al menos 1 revisión
- 06.Merge via PR: nunca git merge local para meter cosas en main — siempre vía GitHub
- 07.Borrar branch después del merge: no acumules branches muertas
### Un día típico con este flujo
Veamos cómo es un día de trabajo real usando este flujo. Imagina que eres ingeniero de datos en una fintech:
1# 09:00 - Llegas y actualizas main2git switch main3git pull45# 09:05 - Tu tarea de hoy: añadir validación de transacciones6git switch -c feature/validar-transacciones78# 09:05 - 12:00 - Trabajas, haces varios commits9git add .10git commit -m "feat: función validar_monto()"11# ... más trabajo ...12git add .13git commit -m "feat: función validar_fecha()"14# ... más trabajo ...15git add .16git commit -m "test: tests para validación de transacciones"1718# 12:00 - Subes tu progreso (backup + visibilidad)19git push -u origin feature/validar-transacciones2021# 14:00 - Terminas. Actualizas con main por si acaso.22git switch main23git pull24git switch feature/validar-transacciones25git merge main # Resolver conflictos si los hay2627# 14:10 - Creas el PR28gh pr create --title "feat: validación de transacciones" \29 --body "Añade validar_monto() y validar_fecha()..."3031# 14:15 - Tu compañera María revisa, deja un comentario32# Tú arreglas lo que pide:33git add .34git commit -m "refactor: renombrar según feedback de María"35git push3637# 15:00 - María aprueba, tú mergeas desde GitHub38# 15:01 - Borras la branch (GitHub te lo ofrece auto)3940# 15:05 - Siguiente tarea...41git switch main42git pull # Trae tu merge43git switch -c feature/siguiente-tarea
Un día de trabajo con el flujo profesional
### Gitflow completo vs simplificado: cuándo complicarse
El Gitflow original de Vincent Driessen tiene más branches:
- main: código en producción
- develop: integración de features antes de release
- feature/*: funcionalidades nuevas (salen de develop)
- release/*: preparar una versión para producción
- hotfix/*: fixes urgentes en producción
¿Cuándo necesitas este nivel de complejidad? Casi nunca en equipos de datos. Gitflow completo tiene sentido cuando: envías software empaquetado (como una app móvil con versiones), tienes un ciclo de releases planificado (v1.2, v1.3...), o tienes un equipo de QA que prueba releases antes del deploy. Para pipelines de datos, APIs internas o scripts de procesamiento, el flujo simplificado (main + feature branches + PRs) es todo lo que necesitas.
Regla del pragmatismo: si tu equipo tiene menos de 10 personas y no envía software con versiones a clientes externos, NO uses Gitflow completo. Es burocracia innecesaria. Main + feature branches + CI/CD es el estándar moderno para el 90% de equipos de tecnología.
### Commit messages: el arte ignorado
Un buen flujo de Git también incluye buenos mensajes de commit. Si tus commits dicen "cambios", "fix", "wip", "asdf", tu historial es inútil. Cuando dentro de 3 meses necesites encontrar "ese commit donde cambiamos la lógica de descuentos", un buen mensaje te salva horas de investigación.
El estándar más usado es Conventional Commits. Es simple: un prefijo que dice qué tipo de cambio es, seguido de una descripción:
1# Conventional Commits:2# tipo: descripción breve34git commit -m "feat: añadir validación de emails"5git commit -m "fix: manejar NULL en campo precio"6git commit -m "refactor: simplificar función de limpieza"7git commit -m "docs: documentar proceso de deploy"8git commit -m "test: añadir tests para módulo de exportación"9git commit -m "chore: actualizar dependencias"1011# Tipos comunes:12# feat = funcionalidad nueva13# fix = corrección de bug14# refactor = cambio interno sin cambiar funcionalidad15# docs = documentación16# test = añadir o modificar tests17# chore = tareas de mantenimiento
Conventional Commits: mensajes claros y buscables
### .gitignore: lo que nunca debe subir a GitHub
Todo flujo profesional necesita un buen .gitignore. Hay archivos que NUNCA deben subir al repo: credenciales, datos sensibles, archivos generados, cosas enormes. Un .gitignore para proyectos de datos en Python:
1# .gitignore para proyectos de datos23# Entornos virtuales4venv/5.venv/6env/78# Variables de entorno (¡NUNCA subir credenciales!)9.env10.env.local11*.secret1213# Datos (los datos no van en Git)14data/15*.csv16*.parquet17*.xlsx18!data/.gitkeep1920# Python21__pycache__/22*.pyc23*.pyo24.pytest_cache/2526# Notebooks27.ipynb_checkpoints/2829# IDE30.vscode/31.idea/3233# OS34.DS_Store35Thumbs.db
.gitignore típico para proyectos de ingeniería de datos
PELIGRO REAL: si commiteas un archivo .env con contraseñas de bases de datos o API keys y lo subes a un repo público, asume que esas credenciales están comprometidas. Los bots escanean GitHub 24/7 buscando secretos. Aunque borres el commit después, queda en el historial. Regla absoluta: secretos NUNCA en Git. Usa variables de entorno.
## ejercicios
Define el flujo de tu equipo
Tu jefe te pide que documentes el flujo de Git para el equipo de datos (4 personas). Crea un script que imprima las reglas del flujo y un ejemplo del día a día.
Genera un .gitignore profesional
Crea un script Python que genere un .gitignore completo para un proyecto de ingeniería de datos, con comentarios explicando cada sección.
Clasifica commits con Conventional Commits
Dado un listado de descripciones de cambios, genera el mensaje de commit correcto usando Conventional Commits.
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...