git clone
Scopri il comando Git clone, il suo utilizzo, le opzioni di configurazione più comuni e i formati degli URL Git.
Cosa fa git clone
Il comando git clone copia un repository esistente in una nuova directory sul tuo computer. In un unico passaggio:
- Crea la directory di destinazione e inizializza al suo interno un nuovo repository locale (non è necessario eseguire prima git init).
- Scarica l'intera cronologia del progetto — ogni commit, branch e tag.
- Aggiunge il repository sorgente come remote con il nome
origin. - Crea un branch di tracciamento remoto per ciascun branch sul remote e fa il checkout del branch predefinito (di solito
mainomaster) nella tua directory di lavoro.
È così che quasi ogni sviluppatore ottiene una copia di lavoro di un progetto condiviso, quindi git clone è solitamente il primissimo comando Git che si esegue su un nuovo progetto.

Utilizzo di base
La forma generale del comando accetta un URL del repository e, facoltativamente, un nome di directory:
git clone <repo> [<directory>]Ad esempio, clonare un progetto via SSH da un server raggiungibile su example.com usando il nome utente x_person:
git clone ssh://[email protected]/path/to/team-project.git
cd team-project
# Start editing files, committing snapshots, and pushing to the remoteQuesto inizializza un nuovo repository nella cartella team-project e la riempie con i contenuti del repository centrale. Dopo la clonazione puoi fare cd nel progetto e iniziare a modificare i file, creare commit degli snapshot e interagire con il remote.
Clonare in una cartella specifica
Per impostazione predefinita Git assegna alla nuova directory il nome del repository. Per clonare in una cartella di tua scelta, aggiungi un argomento <directory>:
git clone https://example.com/team-project.git my-project
cd my-projectQuesto clona il repository in my-project anziché in team-project.
Clonare un singolo branch o tag
Passa --branch (abbreviazione: -b) con il nome di un branch o di un tag per fare il checkout di qualcosa di diverso dal branch predefinito del remote:
# Check out the develop branch instead of the default
git clone --branch develop https://example.com/team-project.git
# Check out the state at tag v1.0 (results in a detached HEAD)
git clone --branch v1.0 https://example.com/team-project.gitQuando passi un tag, il working tree viene estratto su quel tag in uno stato di detached HEAD, poiché un tag non è un branch su cui puoi fare commit.
Opzioni utili di clone
Queste opzioni ti permettono di personalizzare cosa scarica git clone e come si comporta il nuovo repository.
--depth (clone superficiale)
--depth <n> crea un clone superficiale che mantiene solo gli ultimi <n> commit invece dell'intera cronologia. Questo è molto più veloce per repository di grandi dimensioni ed è comune nelle pipeline CI dove la cronologia completa non è necessaria.
git clone --depth 1 https://example.com/team-project.git--single-branch
--single-branch scarica la cronologia di un solo branch (il branch predefinito, oppure quello specificato con --branch) invece di tutti i branch. È implicato da --depth.
git clone --single-branch --branch main https://example.com/team-project.git--recurse-submodules
Se il progetto utilizza sottomoduli, --recurse-submodules li clona e ne fa il checkout nello stesso passaggio, così non devi eseguire git submodule update --init in seguito.
git clone --recurse-submodules https://example.com/team-project.git-o (rinominare il remote)
Per impostazione predefinita la sorgente viene aggiunta come remote origin. Usa -o <name> per scegliere un nome diverso. Consulta git remote per gestire i remote in seguito.
git clone -o upstream https://example.com/team-project.git--bare e --mirror
--barecrea una copia del repository senza una directory di lavoro. Il repository risultante contiene la cronologia del progetto e può ricevere push o essere usato per pull, ma non ha file estratti da modificare. Questo è il formato usato per i repository che risiedono su un server.--mirrorimplica--barema va oltre: copia tutti i riferimenti (branch, tag, note, ref di tracciamento remoto) e configura il remote in modo che il mirror rimanga un riflesso esatto della sorgente. Viene principalmente usato per spostare o fare il backup di un repository.
git clone --bare https://example.com/team-project.git
git clone --mirror https://example.com/team-project.gitDifferenza tra git init e git clone
git init e git clone vengono spesso confusi. La distinzione chiave:
git initcrea un repository locale completamente nuovo e vuoto — non c'è nessun remote e nessuna cronologia.git clonecopia un repository remoto esistente sul tuo computer, portando con sé l'intera cronologia e configurandooriginautomaticamente.
git clone non richiede che tu esegua prima git init; inizializza il repository locale e configura per te i branch di tracciamento remoto.
URL Git
Git ha una propria sintassi degli URL per indicare ai comandi dove risiede un repository remoto. Poiché git clone punta quasi sempre a un remote, capire questi URL è importante. Git supporta quattro famiglie di protocolli: Git, SSH, HTTPS e Local. Tutti tranne HTTPS richiedono che Git sia installato e in esecuzione sul server.
Protocollo Git
Il protocollo Git è esclusivo di Git. È gestito da un demone che ascolta sulla porta 9418 e offre accesso anonimo principalmente in lettura, simile a SSH ma senza alcuna autenticazione.
git clone git://host.xz/path/to/repo.gitIl suo vantaggio è il trasferimento veloce. Gli svantaggi sono la mancanza di autenticazione (quindi viene usato raramente per le scritture) e una configurazione del server più complessa.
Protocollo SSH
Secure Shell (SSH) è un protocollo di rete per accedere da un computer a un altro in modo sicuro. È il protocollo più comune per l'accesso autenticato in lettura/scrittura, e l'accesso SSH è configurato per impostazione predefinita sulla maggior parte delle piattaforme di hosting. Devi stabilire le credenziali (una chiave SSH) con il server prima di connetterti.
git clone ssh://user@server/project.git
# Many hosts also accept the shorter "scp-like" form:
git clone user@server:project.gitSSH cifra e autentica tutto il traffico, comprime i dati prima del trasferimento ed è facile da configurare. Il suo principale limite è che non supporta l'accesso anonimo. Consulta la sezione chiave SSH per la configurazione delle chiavi.
Protocollo HTTPS
HTTPS (HyperText Transfer Protocol Secure) è il protocollo usato per trasmettere dati in modo sicuro sul web, e Git può condividere repository tramite esso.
git clone https://example.com/gitproject.gitHTTPS è semplice da configurare, cifra il trasferimento e attraversa facilmente i firewall aziendali (la porta 443 è quasi sempre aperta), il che lo rende uno dei protocolli più usati. Il suo principale svantaggio è un overhead leggermente maggiore dovuto alla cifratura, che può rendere la clonazione marginalmente più lenta rispetto al protocollo Git puro.
Protocollo Local
Con il protocollo Local il repository "remoto" è semplicemente un'altra directory sullo stesso disco o su un file system condiviso. Quando i membri del team condividono un file system, possono clonare, fare push e pull tramite percorsi semplici.
git clone /opt/git/project.git
# Or with an explicit file:// URL:
git clone file:///opt/git/project.gitComandi correlati
Dopo la clonazione, questi capitoli coprono il flusso di lavoro quotidiano:
- git fetch e git pull — scaricano e integrano gli aggiornamenti dal remote.
- git branch e git checkout — creano e passano tra i branch.
- git remote — visualizza e gestisce il remote
originconfigurato dagit clone.