fundamentos · temario
1.2tema 2 de 4

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.

structure.txt
# 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.

0/5 tests passing0%
  1. 1.2.5.1

    git add . git commit 'add new feature'

  2. 1.2.5.2

    git checkout main git merge feature/my-branch --no-ff git push

  3. 1.2.5.3

    # .github/workflows/ci.yml on: push jobs: test: run: pytest tests/

  4. 1.2.5.4

    git branch -D feature/add-embeddings

  5. 1.2.5.5

    git log -oneline --graph