HOWTO · Git
Cloner le sous-répertoire du dépôt Git
Ce tutoriel concerne le clonage d'un sous-répertoire du dépôt Git.
Sur cette page
Pour travailler dans un seul répertoire d’un projet Git, utilisez sparse-checkout pour sélectionner les chemins présents dans l’arborescence de travail. Vous restez ainsi dans le dépôt d’origine : cela ne crée pas un dépôt distinct contenant uniquement ce répertoire.
Ce que fait (et ne fait pas) sparse-checkout
Un clone classique extrait les fichiers du dépôt dans une arborescence de travail. Git sparse-checkout vous permet de choisir quels chemins suivis par Git y sont présents, tout en conservant le rattachement du checkout au même dépôt et à son historique. Cette fonctionnalité est utile si vous travaillez principalement dans un module, par exemple frontend, au sein d’un projet qui contient aussi les répertoires backend et documentation.
La sélection de chemins ne garantit pas un téléchargement plus léger. sparse-checkout agit sur l’arborescence de travail ; la quantité de données récupérées dépend des options de clonage et de la configuration de Git. Si vous avez besoin d’un projet indépendant avec son propre historique, le projet source doit fournir un dépôt distinct pour ce module.
Cloner un dépôt avec sparse-checkout
Commencez par vérifier que la version de Git installée fournit la commande sparse-checkout, par exemple en consultant git help -a. N’utilisez les commandes ci-dessous que si cette interface est disponible. Elles effectuent le clone sans remplir l’arborescence de travail, puis sélectionnent frontend. Remplacez l’URL du dépôt et les noms de répertoires de l’exemple par vos propres valeurs : l’URL et les chemins ci-dessous sont des espaces réservés.
Cet exemple autonome en Bash crée un petit dépôt local et sélectionne son répertoire frontend. La sortie indique le nom du répertoire sélectionné, frontend, conservé tel quel dans l’exemple :
set -eu
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT
git init --quiet "$work/source"
git -C "$work/source" config user.name "Example User"
git -C "$work/source" config user.email "example@example.com"
mkdir -p "$work/source/frontend" "$work/source/backend"
printf 'app source\n' > "$work/source/frontend/app.txt"
printf 'service source\n' > "$work/source/backend/service.txt"
git -C "$work/source" add frontend backend
git -C "$work/source" commit -m "Add project modules" >/dev/null
branch=$(git -C "$work/source" branch --show-current)
git clone --no-checkout --branch "$branch" "$work/source" "$work/project" >/dev/null 2>&1
git -C "$work/project" sparse-checkout init --cone
git -C "$work/project" sparse-checkout set frontend
git -C "$work/project" sparse-checkout list
frontend
Pour un projet distant, les étapes correspondantes sont git clone --no-checkout <repository-url> my_project, cd my_project, git sparse-checkout init --cone et git sparse-checkout set frontend. Exécutez-les dans cet ordre. Les chemins sélectionnés sont relatifs à la racine du dépôt. Si votre installation de Git ne fournit pas sparse-checkout, utilisez plutôt git clone <repository-url> my_project pour obtenir une arborescence de travail complète.
Modifier les répertoires sélectionnés
Pour remplacer les chemins sélectionnés par backend et documentation, exécutez git sparse-checkout set backend documentation depuis le dépôt. Pour conserver frontend dans la sélection et ajouter un autre répertoire, utilisez git sparse-checkout add backend. Le mode cone est conçu pour sélectionner des répertoires : indiquez donc des chemins de répertoires plutôt que des fichiers individuels.
Utilisez des chemins relatifs à la racine du dépôt, en respectant l’orthographe et les majuscules des chemins suivis par Git. Si la sélection n’affiche pas les fichiers attendus, vérifiez le chemin des entrées à la racine avec git ls-tree --name-only HEAD, puis sélectionnez le bon répertoire. Vous pouvez sélectionner un chemin imbriqué en indiquant son chemin depuis la racine, par exemple frontend/components.
Vérifier le checkout et résoudre les problèmes courants
Exécutez git sparse-checkout list pour afficher les chemins sélectionnés et git status --short pour examiner l’arborescence de travail. Vérifiez que vous vous trouvez dans le dépôt voulu avec git rev-parse --show-toplevel ; les noms de répertoires sélectionnés s’interprètent par rapport à cette racine.
Si la commande est indisponible, si cette interface n’est pas prise en charge par votre installation de Git ou si votre processus de travail avec le dépôt ne l’autorise pas, effectuez un clone complet. Si le répertoire est sélectionné mais que certains fichiers attendus sont absents, vérifiez que le chemin existe dans le commit extrait et que son orthographe est correcte. Les fichiers non suivis déjà présents dans l’arborescence de travail peuvent rester visibles même si leurs chemins ne font pas partie de la sélection sparse.
Pour en savoir plus, consultez la documentation Git sur sparse-checkout, la documentation de git clone et la documentation de git help.