Cloner avec Git partiellement votre projet

Saviez vosu que vous pouvez ne cloner qu’un répertoire ou plusieurs répertoire de votre repository Git? Ainsi vous économiserez de la place ! Ceci est particulièrement pertinent dans les monorepos, un monorepo est un repository unique mais avec plein de projets à l’intérieur. Google par exemple travaille en monorepo.

Vous savez alors qu’on ne peut pas cloner tous les projets de Google dsur son ordinateur, telle la volumétrie est grande. Il faut cloner ce dont on a besoin.

Comment fait on alors pour ne cloner ue partiellement un repository?

Vient la commande sparse checkout

Imaginez que vous êtes sur votre ordinateur et que vous vouliez cloner partiellement un repository, en ligne de commande voilà ce que l’on va faire

# Initialiser un nouveau dépôt Git
git clone --filter=blob:none --no-checkout https://github.com/vous/ledepot.git
cd ledepot

# Activer sparse-checkout
git sparse-checkout init --cone

# Spécifier le dossier à récupérer
git sparse-checkout set htdocs/todolist.com

# Récupérer les fichiers
git checkout main

Cette méthode vous permet néanmoins d’avoir l’historique des commits complet. Vous n’avez peut être pas besoin des commit précédents (on a rarement besoin), donc il est plus léger de n’avoir que le dernier commit.

Clonage encore plus light

git clone --depth 1 --filter=blob:none --sparse https://github.com/vous/ledepot.git
cd ledepot
git sparse-checkout set htdocs/todolist.com

  • --depth 1 = télécharge uniquement le dernier commit (pas d’historique)
  • Parfait si vous voulez juste travailler sur la version actuelle

Les blob sont des fichiers binaire, on a avec commande éviter des les télécharger.

Cette méthode télécharge uniquement les fichiers du dossier spécifié au lieu de tout le repository. L’option --cone optimise les performances pour les grandes arborescences, et --filter=blob:none évite de télécharger les blobs inutiles initialement.

Si vous voulez modifier le sparse-checkout plus tard pour ajouter d’autres dossiers :

git sparse-checkout add htdocs/autre-dossier

Un mot à propos du flag –cone

--cone fait référence au mode « cone » du sparse-checkout, qui est une approche optimisée pour gérer les patterns de fichiers.

Sans --cone (mode pattern traditionnel) :

  • Vous pouvez spécifier des patterns complexes comme *.js, src/**/test
  • Plus flexible mais plus lent sur les gros repositories
  • Git doit vérifier chaque fichier individuellement

Avec --cone (mode cone) :

  • Vous ne pouvez spécifier que des dossiers entiers (pas de wildcards)
  • Beaucoup plus rapide et performant
  • Git optimise en travaillant par « cônes » de répertoires
  • C’est le mode recommandé par défaut depuis Git 2.26

Donc le flag –cone permet d’être plus rapide quand vous avez un vraiment gros repository

Retour en haut