Back

Clone superficiel Git : définition, utilisation et méthodes

Clone superficiel Git : définition, utilisation et méthodes

Cloner un dépôt avec git clone récupère généralement tout l’historique des commits. Mais que faire si vous n’avez pas besoin de l’intégralité ? C’est là qu’interviennent les clones superficiels. Dans cet article, nous expliquerons ce qu’est un clone superficiel, comment il fonctionne et quand il est judicieux de l’utiliser — avec des exemples prêts à copier-coller.

Points clés

  • Un clone superficiel limite la quantité d’historique récupérée lors d’un git clone
  • Il est idéal pour l’intégration continue, les grands dépôts ou les configurations rapides
  • Apprenez à utiliser --depth, --single-branch et --shallow-since

Qu’est-ce qu’un clone superficiel dans Git ?

Un clone superficiel est un clone Git qui ne récupère qu’une partie de l’historique d’un dépôt au lieu de tout depuis le début. Cela réduit considérablement la taille du téléchargement et le temps nécessaire. C’est particulièrement utile lorsque :

  • Vous n’avez pas besoin de l’historique complet des commits
  • Vous souhaitez une configuration plus rapide pour les pipelines CI/CD
  • Vous travaillez avec de grands dépôts

Clone superficiel vs clone normal

Fonctionnalité Clone normal Clone superficiel Récupère tout l’historique Oui Non (commits limités) Vitesse de clonage Plus lente Plus rapide Opérations Git (rebase, bisect) Entièrement supportées Certaines limitations Idéal pour CI/CD Pas optimal Oui

Comment effectuer un clone superficiel

Cloner uniquement le commit le plus récent

git clone --depth=1 https://github.com/owner/repo.git

Cloner une branche spécifique avec un historique limité

git clone --depth=1 --branch main --single-branch https://github.com/owner/repo.git

Cloner les commits depuis une date spécifique

git clone --shallow-since="2024-01-01" https://github.com/owner/repo.git

Vous pouvez également utiliser --filter=blob:none avec des clones partiels si vous souhaitez éviter complètement le téléchargement de gros fichiers.

Peut-on “désuperficialiser” un clone superficiel ?

Oui. Si vous décidez plus tard que vous avez besoin de l’historique complet :

git fetch --unshallow

Cette commande récupère les commits manquants et convertit votre clone superficiel en un clone complet.

Quand utiliser un clone superficiel ?

Utilisez un clone superficiel lorsque :

  • Vous n’avez besoin que de la dernière version du code
  • Vous exécutez des pipelines d’intégration continue et souhaitez des builds plus rapides
  • Vous inspectez ou testez du code sans avoir besoin de l’historique complet

Évitez les clones superficiels lorsque :

  • Vous devez effectuer des opérations git bisect, git rebase ou des fusions
  • Vous contribuez à des changements et avez besoin d’accéder à l’historique des commits
  • Vous développez des outils qui dépendent du contexte complet du dépôt

Problèmes courants avec les clones superficiels

Certaines opérations Git peuvent échouer

Certaines commandes supposent un historique complet et généreront des erreurs dans les clones superficiels :

  • git merge-base
  • git rebase
  • git bisect

Solution : Exécutez git fetch --unshallow ou évitez le clone superficiel dans ces contextes.

Les clones superficiels peuvent perturber les outils de monorepo

Des outils comme Lerna ou Nx peuvent supposer un accès complet à l’historique des commits du dépôt pour les graphes de dépendances ou les packages affectés. Testez avec votre chaîne d’outils spécifique.

Conclusion

Les clones superficiels sont un excellent moyen d’accélérer les flux de travail de développement, en particulier dans l’intégration continue ou lors du travail avec de grands dépôts. Soyez simplement conscient des compromis — et vous pouvez toujours désuperficialiser plus tard si nécessaire.

FAQ

Oui. Il récupère moins de commits, donc il est plus rapide à télécharger et à traiter, surtout dans les grands dépôts.

Oui, mais certaines opérations liées à l'historique peuvent échouer à moins que le clone ne soit d'abord désuperficialisé.

Exécutez `git fetch --unshallow` pour convertir votre dépôt en un clone complet.

Oui — en fait, GitHub Actions utilise des clones superficiels par défaut (avec `fetch-depth: 1`).

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers