Introduction
git clone copie un dépôt distant sur votre machine. Il crée un nouveau répertoire, initialise .git à l'intérieur, récupère tous les objets et refs, configure un remote nommé origin, et fait le checkout de la branche par défaut. Après le clone, vous avez un dépôt complet et indépendant.
Clone basique
git clone https://github.com/torvalds/linux.git
cd linux
git remote -v
# origin https://github.com/torvalds/linux.git (fetch)
# origin https://github.com/torvalds/linux.git (push)
Choisir un nom de répertoire
Par défaut, Git utilise le dernier composant du chemin. Surchargez-le :
git clone https://github.com/example/widget.git my-widget
Choisir un protocole
- HTTPS : le plus simple, fonctionne à travers les pare-feu, nécessite souvent un assistant d'identifiants ou un token.
- SSH : pratique avec l'authentification par clé, rapide pour les utilisateurs avancés.
- git:// : anonyme, non authentifié, surtout historique.
- file:// ou chemin local : cloner depuis un autre répertoire.
git clone [email protected]:example/widget.git
git clone /srv/git/widget.git
git clone file:///srv/git/widget.git
Options utiles
git clone --depth 1 <url> # shallow : seulement la pointe
git clone --branch v1.2.3 <url> # checkout d'une branche ou d'un tag spécifique
git clone --single-branch <url> # récupérer une seule branche
git clone --bare <url> # clone nu, sans arborescence de travail
git clone --recurse-submodules <url>
Les clones shallow économisent de la bande passante pour la CI ; convertissez ensuite avec git fetch --unshallow.
Ce que clone fait, étape par étape
- Crée le répertoire cible.
- Exécute
git inità l'intérieur. - Ajoute
origincomme remote. - Exécute
git fetch origin. - Configure le tracking pour la branche par défaut.
- Exécute
git checkoutpour cette branche.
Clones sparse et partiels pour les énormes dépôts
Les dépôts qui s'étendent sur des gigaoctets (systèmes d'exploitation, monorepos) sont pénibles à cloner intégralement. Deux fonctionnalités complémentaires aident :
git clone --filter=blob:none --no-checkout <url> repo
cd repo
git sparse-checkout init --cone
git sparse-checkout set src/myteam
git checkout main
--filter=blob:none reporte le téléchargement des blobs jusqu'à ce qu'ils soient nécessaires, tandis que sparse-checkout ne peuple que les répertoires que vous listez. Ensemble, ils vous permettent de travailler sur une petite tranche d'un dépôt massif avec un coût en disque et bande passante proportionnel.
Hooks au moment du clone
Certains projets fournissent des étapes de configuration qui devraient s'exécuter au clone (installation des hooks pre-commit, récupération des objets LFS, initialisation des sous-modules). Git n'exécute pas de hooks au clone, mais vous pouvez les enchaîner :
git clone --recurse-submodules <url> repo
cd repo
git lfs install
pre-commit install
Pour les nouveaux contributeurs, documentez cette séquence dans CONTRIBUTING.md ou enveloppez-la dans un script scripts/bootstrap. Les projets bien conçus rendent leur cible make setup idempotente afin que la réexécuter après un clone obsolète soit sûr.
Erreurs fréquentes
Cloner dans un répertoire non vide : Git refuse à moins que vous ne passiez explicitement une cible vide. Cloner d'énormes dépôts sans --depth sur des connexions lentes, puis abandonner à mi-chemin. Cloner via HTTPS vers un serveur qui exige le SSO, puis être incapable de pusher parce que votre token n'a pas la bonne portée. Testez toujours avec git push --dry-run après le premier commit. Enfin, cloner dans ~/Desktop ou un autre dossier de synchronisation (Dropbox, iCloud, OneDrive) provoque une corruption quand le client de synchronisation interrompt l'écriture de .git/index. Gardez les clones de travail sur du stockage local simple.