← retour aux snippets

git: sparse-checkout partiel pour monorepo

Cloner ou réduire un dépôt pour ne récupérer que les dossiers utiles: rapide, léger, idéal pour gros repos.


objectif

Travailler dans un monorepo sans tout télécharger: ne récupérer que quelques dossiers (cone mode), accélérer les clones et diminuer l’espace disque.

code minimal

# clone partiel + sparse (Git ≥ 2.25)
git clone --filter=blob:none --sparse https://git.data.pm/monorepo.git
cd monorepo
git sparse-checkout set services/api packages/ui

utilisation

# 1) convertir un clone existant en sparse
cd monorepo
git sparse-checkout init --cone
git sparse-checkout set services/api packages/ui

# 2) ajouter/retirer des chemins
git sparse-checkout add tools/scripts
git sparse-checkout set services/api                 # remplace la liste

# 3) cloner au plus léger (sans blobs inutiles)
git clone --filter=blob:none --sparse ssh://git@git.data.pm/monorepo.git
cd monorepo
git sparse-checkout set docs site data-pipelines

# 4) vérifier ce qui est inclus
git sparse-checkout list

# 5) revenir au dépôt complet (désactiver sparse)
git sparse-checkout disable

# 6) rester à jour (le fetch reste partiel; les blobs sont rapatriés à la demande)
git pull --ff-only

# 7) branches: le set est conservé lors des changements de branche
git checkout -b fix/readme origin/main

variante(s) utile(s)

# mode avancé (patterns non "cone")
git sparse-checkout init --no-cone
git sparse-checkout set 'services/*/cmd' '!services/*/cmd/tests' 'packages/**/dist'

# limiter aussi l'historique initial (shallow)
git clone --depth 1 --filter=blob:none --sparse https://git.data.pm/monorepo.git
cd monorepo
git sparse-checkout set services/payments

# forcer une récup des blobs d'un chemin précis (après set)
git checkout -- services/api

# inclure tout un dossier parent puis exclure un sous-dossier (no-cone requis)
git sparse-checkout init --no-cone
git sparse-checkout set 'services/**' '!services/legacy/**'

# scripts rapides pour basculer des ensembles de chemins
paths_core='services/api packages/core packages/ui'
git sparse-checkout set $paths_core

notes

  • --sparse active le sparse-checkout à l’init; combinez avec --filter=blob:none pour un partial clone efficace.
  • le mode “cone” est recommandé (chemins simples de haut niveau). Utilisez --no-cone pour des patterns glob plus fins.
  • set remplace la liste, add ajoute. Vérifiez avec git sparse-checkout list.
  • désactiver (disable) ramène un working tree complet (le dépôt peut encore être partiel; les blobs manquants seront téléchargés à la demande).
  • adapté aux gros repos hébergés sur git.data.pm: moins d’I/O, moins de réseau, onboarding plus rapide.