MacBook avec code sur un bureau

Git sparse checkout : ne récupérer qu’un seul dossier d’un dépôt

Le sparse checkout de git permet de ne récupérer qu’une partie d’un dépôt au lieu de tout son contenu. C’est très pratique quand un dépôt est volumineux et que vous n’avez besoin que d’un ou deux dossiers.

La méthode moderne (git 2.25 et plus)

Depuis git 2.25, une commande dédiée git sparse-checkout rend l’opération bien plus simple. Le plus efficace est de combiner un clone partiel avec le mode sparse.

git clone --filter=blob:none --sparse <url>
cd <depot>
git sparse-checkout set un/dossier un/autre/dossier

L’option --filter=blob:none évite de télécharger le contenu des fichiers dont vous n’avez pas besoin, et --sparse ne sort au départ que les fichiers de la racine. La commande git sparse-checkout set définit ensuite les dossiers à récupérer.

Sur un dépôt déjà cloné, la démarche est la même sans le clone :

git sparse-checkout init --cone
git sparse-checkout set un/dossier un/autre/dossier

Le cone mode

L’option --cone (activée par défaut depuis git 2.27) accélère git en se limitant à des dossiers entiers plutôt qu’à des motifs quelconques. C’est le mode recommandé dans la grande majorité des cas. Pour voir les dossiers actuellement inclus :

git sparse-checkout list

Et pour revenir à un dépôt complet :

git sparse-checkout disable

L’ancienne méthode (git avant 2.25)

Sur une vieille version de git, il faut passer par la configuration manuelle. On crée un dépôt vide, on ajoute la remote et on active l’option :

mkdir <depot>
cd <depot>
git init
git remote add -f origin <url>
git config core.sparseCheckout true

On indique ensuite les dossiers voulus dans le fichier .git/info/sparse-checkout :

echo "un/dossier/" >> .git/info/sparse-checkout
echo "un/autre/sous-dossier/" >> .git/info/sparse-checkout

Puis on met à jour la copie de travail (remplacez main par master si votre dépôt utilise encore cette branche) :

git pull origin main

Pour aller plus loin

La documentation officielle de git sparse-checkout détaille toutes les options disponibles.

À lire aussi