Sparse-checkout

Par Maxime Bréhin • Publié le 29 novembre 2024 • 4 min

Avant propos : et si le sparse-checkout n’était la solution à mon problème ?

Avant de te lancer tête baisser dans l’utilisation de cette fonctionnalité de Git, je me dois de te questionner sur l’adequation face à ta problématique. Je m’explique. Si ton projet et ses synchros (push/pull et checkout) subissent des lenteurs et que tu constates que ton projet est “lourd”, qu’il prend beaucoup d’espace sur le disque, il est judicieux de vérifier en premier lieu si tu n’embarques pas tout un tas de choses pas forcément pertinentes.

Par exemple, embarquer les maquettes Photoshop dans le projet de développement n’a aucun intérêt. Il paraît alors logique d’identifier ces fichiers volumineux et de les supprimer quand c’est possible (voir la commande filter-repo pour purger dans l’historique), ou d’externaliser leur gestion via des outils comme Git LFS.

D’autre part, la démultiplication de fichiers lourds questionne sur l’optimisation de ces fichiers sur le disque. Il s’avère souvent pertinent de viser à automatiser ces optimisations, avec l’appui de hooks Git par exemple.

Si tu souhaites de l’aide, n’hésite pas à me contacter pour un accompagnement.

Comment agit sparse-checkout ?

La commande git sparse-checkout permet de contrôler les fichiers extraits (checked-out) dans l’espace de travail d’un dépôt Git. Contrairement à un clonage standard qui extrait tout le contenu d’un dépôt, cette fonctionnalité offre la possibilité de ne récupérer qu’une partie spécifique des fichiers ou dossiers. Cela est particulièrement utile pour les dépôts contenant des centaines de milliers de fichiers.

Cette fonctionnalité est encore considérée comme expérimentale bien que pleinement intégrée, notamment depuis Git 2.37 (2022). Il est peu probable que des changements majeurs soient opérés pusque d’autres outils sont basés dessus, notamment Scalar dont nous parlerons en fin d’article.

L’activation de cette fonctionnalité repose sur la configuration du mode core.sparseCheckout.

Schéma animé décrivant les subtrees : initialisation en 1 fois, récupération via la synchronisation standard

Quand utiliser sparse-checkout ?

Sparse-checkout est idéal dans plusieurs scénarios :

  1. Dépôts monolithiques : les dépôts contenant plusieurs projets ou modules indépendants (souvent utilisés dans de grandes organisations). Par exemple, si on travaille sur un seul microservice parmi des dizaines, inutile de télécharger tout le dépôt.

  2. Optimisation des performances : travailler sur de grands dépôts peut être gourmand en mémoire et en espace disque. En récupérant uniquement les fichiers nécessaires, on réduit ces contraintes.

  3. Amélioration de la navigation : dans des dépôts massifs, limiter le contenu à ce qui est pertinent pour notre tâche simplifie l’exploration et la manipulation des fichiers.

  4. Environnements CI/CD : les pipelines CI/CD peuvent bénéficier de sparse-checkout pour économiser du temps et des ressources en extrayant uniquement les fichiers requis pour une tâche donnée.

Cone ou pas cone ?

Le sparse-checkout permet de définir soit une liste des répertoires avec lesquels on souhaite travailler (mode cone par défaut), ou pour alors une liste de patterns (mode non cone).

Comment utiliser sparse-checkout ?

Voici un cas simple d’introduction :

1. Activer le mode sparse-checkout :

git sparse-checkout init

Cette commande configure le dépôt pour activer le mode “sparse”.

2. Définir les chemins à inclure :

Pour spécifier les fichiers ou dossiers à inclure dans notre espace de travail :

git sparse-checkout set <chemin1> <chemin2>

Par exemple :

git sparse-checkout set src/ utils/

3. Modifier les chemins extraits :

On peut ajuster à tout moment les chemins à inclure :

git sparse-checkout set new-folder/

4. Désactiver le mode sparse-checkout :

Si on souhaite revenir à une récupération des fichiers complète :

git sparse-checkout disable

Avantages de sparse-checkout

  • Réduction de l’empreinte disque : seuls les fichiers pertinents sont extraits, économisant ainsi espace et ressources.
  • Amélioration des performances Git : les commandes Git, comme git status, s’exécutent plus rapidement sur des dépôts restreints.
  • Focus sur l’essentiel : permet de se concentrer sur les parties pertinentes du projet sans distraction due à la présence de nombreux fichiers inutilisés.
  • Facilité d’intégration : Compatible avec d’autres commandes Git, sparse-checkout s’intègre naturellement dans votre workflow existant.

Limites de sparse-checkout

Bien que puissant, sparse-checkout n’est pas toujours la solution idéale. Par exemple, si le projet nécessite fréquemment des changements de contexte impliquant différents modules, cela peut entraîner des ajustements répétitifs dans la liste des chemins sélectionnés.

Vers une gestion optimisée avec Scalar

Si sparse-checkout répond à des besoins précis, il reste un outil parmi d’autres pour gérer de grands dépôts. Scalar, un outil open source développé par Microsoft, va encore plus loin. Conçu pour optimiser la gestion des monorepos, Scalar automatise et améliore les performances des grandes bases de code en s’appuyant sur des fonctionnalités comme sparse-checkout, partial clone, et des optimisations avancées du serveur Git.

Scalar se distingue par sa simplicité d’installation et son focus sur l’expérience utilisateur, rendant les monorepos plus faciles à gérer sans nécessiter de configuration complexe.

Conclusion

La commande git sparse-checkout est une solution puissante pour naviguer efficacement dans les dépôts Git volumineux, en économisant du temps et des ressources. Elle permet de personnaliser l’espace de travail et de se concentrer uniquement sur ce qui est nécessaire. Cependant, pour les environnements encore plus exigeants, des outils comme Scalar apportent une couche supplémentaire d’optimisation. En combinant ces solutions, les développeurs peuvent tirer le meilleur parti de leurs dépôts, qu’ils soient monolithiques ou fragmentés.

Tu veux aller plus loin et maîtriser pleinement les fondamentaux de Git ou être accompagné pour garantir la qualité de tes projets grâce à une bonne mise en place de Git ? On peut t’aider ou te former, il suffit de nous décrire ton besoin !
Tu peux aussi regarder le programme de notre formation "Comprendre Git" ou nous poser tes questions sur notre forum discord.