Sinossi
git clone [--branch <name>] [--depth <n>] [--recurse-submodules] <url> [directory]
Descrizione
Il comando git clone copia un repository esistente (tipicamente da un server remoto) in una nuova directory locale. Esegue tre azioni: crea una nuova directory, esegue git init al suo interno, e poi scarica tutti i branch e la storia dal remote. Dopo il clone, il remote viene configurato automaticamente come origin, e il branch predefinito viene checkoutato nella working tree.
Il cloning supporta più protocolli: HTTPS (il più comune, più facile con i credential helper), SSH (preferito per accesso in scrittura usando auth basata su chiave) e il protocollo legacy git://. Per repository molto grandi, partial clone, shallow clone e sparse checkout possono ridurre drasticamente la quantità di dati trasferiti.
L'autenticazione è uno degli ostacoli più comuni. Con HTTPS, Git moderno usa credential helper (Keychain su macOS, Credential Manager su Windows, libsecret su Linux) per cachare token o password in sicurezza. Con SSH, il tuo SSH agent locale fornisce la chiave — assicurati che ssh-add l'abbia caricata. Dopo il clone, git config --get remote.origin.url conferma cosa è stato effettivamente configurato. Per repository su scala monorepo o supercomputer, partial clone (--filter=blob:none) combinato con sparse checkout (git sparse-checkout init --cone) ti permette di lavorare con solo una fetta del progetto, riducendo drasticamente sia il tempo di clone che lo spazio su disco. Le pipeline CI beneficiano ulteriormente di --depth=1 e --no-tags quando non hanno bisogno della storia.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
--branch <name> / -b | Fa checkout del branch o tag specificato invece del default. |
--depth <n> | Crea un clone shallow con storia troncata. |
--single-branch | Clona solo la storia di un singolo branch. |
--recurse-submodules | Inizializza e clona i submodule subito dopo il clone principale. |
--filter=blob:none | Crea un partial clone senza contenuto blob (scaricato pigramente al bisogno). |
--bare | Crea un clone bare senza working tree. |
--mirror | Configura un mirror con tutti i ref, adatto per i backup. |
Esempi
git clone https://github.com/user/project.git
# Clone standard su HTTPS
git clone [email protected]:user/project.git my-fork
# Clone via SSH in una directory specifica
git clone --depth 1 --branch v2.0 https://github.com/user/project.git
# Clone shallow di un tag specifico, utile per CI
git clone --filter=blob:none https://github.com/torvalds/linux.git
# Partial clone per repo enormi — blob scaricati al bisogno
Errori comuni
Clonare un repository gigante senza filtri può richiedere minuti o ore e consumare gigabyte. Per esplorazione o build CI, preferisci --depth 1. Un altro errore è clonare via HTTPS quando intendi pushare modifiche — senza setup delle credenziali, ogni push richiederà una password. Usa SSH o un credential helper per accesso in scrittura. Infine, sappi che i clone --single-branch non possono accedere facilmente ad altri branch senza riconfigurare il remote.
Comandi correlati
git init, git fetch, git remote, git submodule