Le compromis shallow
Un clone shallow (--depth=N) télécharge seulement les N derniers commits. Plus rapide, plus petit, mais avec mises en garde : beaucoup d'opérations dépendantes de l'historique deviennent impossibles ou erronées.
Invocation basique
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
Ce qui casse
git logs'arrête à la limite shallow.git blameassigne les changements plus profonds au commit limite.git bisectne peut chercher que dans la fenêtre shallow.git merge-basepeut échouer.
Promouvoir plus tard
git fetch --unshallow
git fetch --depth=1000
git fetch --shallow-since=2023-01-01
Patterns CI
git clone --depth=1 --no-tags --filter=tree:0 \
--branch "$CI_COMMIT_REF_NAME" "$CI_REPOSITORY_URL" .
Quand éviter shallow
- Builds release qui embarquent git describe.
- Scanners SBOM/license qui parcourent l'autorité.
- Étapes bisect ou blame en CI.
- Calculs merge-base contre branche base de longue durée.
Erreurs courantes
Utiliser --depth=1 dans pipeline release qui exécute git describe.