Por Anónimo (no verificado) , 29 Abril 2026

El compromiso shallow

Un clone shallow (--depth=N) descarga solo los últimos N commits. Más rápido, más pequeño, pero con advertencias: muchas operaciones dependientes de la historia se vuelven imposibles o incorrectas. CI es el hogar natural para clones shallow, pero solo cuando entiendes los límites.

Invocación básica

git clone --depth=1 https://example.com/repo.git
git clone --depth=50 --no-tags https://example.com/repo.git
git clone --shallow-since=2024-01-01 https://example.com/repo.git
git clone --shallow-exclude=v1.0.0 https://example.com/repo.git

Single-branch

git clone --depth=1 --no-single-branch https://example.com/repo.git

Qué se rompe

  • git log se detiene en el límite shallow.
  • git blame asigna cambios más profundos al commit límite.
  • git bisect solo puede buscar dentro de la ventana shallow.
  • git merge-base puede fallar al encontrar una base más antigua.

Promover después

git fetch --unshallow
git fetch --depth=1000
git fetch --shallow-since=2023-01-01

Patrones de CI

git clone --depth=1 --no-tags --filter=tree:0 \
  --branch "$CI_COMMIT_REF_NAME" "$CI_REPOSITORY_URL" .

Cuándo evitar shallow

  • Builds release que incrustan git describe.
  • Scanners SBOM/license que recorren autoría.
  • Pasos de bisect o blame en CI.
  • Cómputos merge-base contra una rama base de larga vida.

Errores comunes

Usar --depth=1 en un pipeline de release que ejecuta git describe.