Da Anonimo (non verificato) , 29 Aprile 2026

Introduzione

git clone copia un repository remoto sulla tua macchina. Crea una nuova directory, inizializza .git al suo interno, scarica tutti gli oggetti e i ref, configura un remote chiamato origin e fa il checkout del branch predefinito. Dopo il clone hai un repository completo e indipendente.

Clone di base

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)

Scegliere un nome di directory

Per impostazione predefinita Git usa l'ultimo componente del path. Sovrascrivilo:

git clone https://github.com/example/widget.git my-widget

Scegliere un protocollo

  • HTTPS: il più semplice, funziona attraverso i firewall, spesso richiede un credential helper o token.
  • SSH: comodo con autenticazione a chiave, veloce per utenti esperti.
  • git://: anonimo, non autenticato, perlopiù storico.
  • file:// o path locale: clone da un'altra directory.
git clone [email protected]:example/widget.git
git clone /srv/git/widget.git
git clone file:///srv/git/widget.git

Opzioni utili

git clone --depth 1 <url>            # shallow: solo la punta
git clone --branch v1.2.3 <url>     # checkout di un branch o tag specifico
git clone --single-branch <url>     # scarica solo un branch
git clone --bare <url>              # clone bare, senza working tree
git clone --recurse-submodules <url>

I clone shallow risparmiano banda per la CI; converti dopo con git fetch --unshallow.

Cosa fa clone, passo per passo

  1. Crea la directory di destinazione.
  2. Esegue git init al suo interno.
  3. Aggiunge origin come remote.
  4. Esegue git fetch origin.
  5. Configura il tracking per il branch predefinito.
  6. Esegue git checkout per quel branch.

Sparse e partial clone per repo enormi

I repository che si estendono per gigabyte (sistemi operativi, monorepo) sono dolorosi da clonare in toto. Due funzionalità complementari aiutano:

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 rimanda il download dei blob finché non sono necessari, mentre sparse-checkout popola solo le directory che elenchi. Insieme ti permettono di lavorare su una piccola fetta di un repo enorme con costi proporzionali di disco e banda.

Hook al momento del clone

Alcuni progetti includono passi di setup che dovrebbero girare al clone (installazione di pre-commit hook, fetch di oggetti LFS, inizializzazione di submodule). Git non esegue hook al clone, ma puoi concatenarli:

git clone --recurse-submodules <url> repo
cd repo
git lfs install
pre-commit install

Per i nuovi contributori, documenta questa sequenza in CONTRIBUTING.md o avvolgila in uno script scripts/bootstrap. I progetti intelligenti rendono il loro target make setup idempotente in modo che ri-eseguirlo dopo un clone stantio sia sicuro.

Errori comuni

Clonare in una directory non vuota: Git rifiuta a meno che non passi un target esplicitamente vuoto. Clonare repository enormi senza --depth su connessioni lente, poi rinunciare a metà strada. Clonare via HTTPS verso un server che richiede SSO, poi non poter fare push perché il tuo token manca dello scope giusto. Testa sempre con git push --dry-run dopo il primo commit. Infine, clonare in ~/Desktop o un'altra cartella di sync (Dropbox, iCloud, OneDrive) porta a corruzione quando il client di sync scrive a metà .git/index. Tieni i clone di lavoro su storage locale semplice.