Git y CI/CD
Control de versiones, commits atómicos, ramas, PRs y GitHub Actions.
Git es el sistema de control de versiones distribuido estándar. No es solo una herramienta de respaldo: es el protocolo de colaboración del equipo. Cada commit es una unidad de cambio con significado propio, y el historial de commits es la documentación técnica más honesta del proyecto.
Un commit atómico contiene exactamente un cambio lógico. Si necesitas usar 'y' en el mensaje ('fix bug y refactorizar función'), deberían ser dos commits separados. Los commits atómicos hacen que git bisect, git revert y los code reviews sean prácticos en lugar de una pesadilla.
El flujo de ramas estándar en equipos profesionales sigue el modelo: main (producción estable), develop o feature branches (trabajo en progreso), y release branches para preparar despliegues. Cada feature vive en su propia rama con nombre descriptivo (feature/add-embedding-cache) y se integra via Pull Request.
Los Pull Requests (PRs) no son solo una forma de mergear código: son la unidad de revisión de diseño del equipo. Un PR bien escrito explica el problema que resuelve, el approach elegido y cómo testear los cambios. La descripción del PR es tan importante como el código.
CI/CD (Continuous Integration / Continuous Delivery) automatiza la validación de cada cambio. GitHub Actions ejecuta pipelines definidos en YAML cuando se hace push o se abre un PR: instala dependencias, corre tests, ejecuta linters, genera reportes de cobertura. Si el pipeline falla, el cambio no llega a main.
En proyectos de IA el CI también puede incluir pasos de validación de modelos: comparar métricas de evaluación contra un baseline, ejecutar tests de regresión sobre datasets pequeños, o verificar que los archivos de configuración de hiperparámetros son válidos. La automatización previene regresiones silenciosas.
# Flujo básico
git init
git clone <url>
git status
git add <file>
git commit -m 'feat: add tokenizer module'
# Ramas
git checkout -b feature/add-embeddings
git push origin feature/add-embeddings
git merge feature/add-embeddings
git branch -d feature/add-embeddings
# Inspección de historial
git log --oneline --graph
git diff HEAD~1
git show <commit-hash>
# GitHub Actions — .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: pip install uv && uv pip install -e '.[dev]'
- run: pytest --cov=src tests/
- run: mypy src/Debugging lab
Detecta y corrige el error en el código.
- 1.2.5.1
git add . git commit 'add new feature'
- 1.2.5.2
git checkout main git merge feature/my-branch --no-ff git push
- 1.2.5.3
# .github/workflows/ci.yml on: push jobs: test: run: pytest tests/
- 1.2.5.4
git branch -D feature/add-embeddings
- 1.2.5.5
git log -oneline --graph