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 logse detiene en el límite shallow.git blameasigna cambios más profundos al commit límite.git bisectsolo puede buscar dentro de la ventana shallow.git merge-basepuede 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.