Git Submodule
Ultimo aggiornamento
Un submodule incorpora un repository Git dentro un altro, bloccato su un commit specifico. Il repository padre registra da quale commit del submodule dipende, così tutti ottengono la stessa versione. È il modo per includere una libreria o un componente condiviso che vive in un proprio repository, senza copiarne il codice.
Prova questi comandi nel terminal playground: una vera shell nel tuo browser, senza installare nulla.
Sintassi
| Comando | Cosa fa |
|---|---|
git submodule add <url> libs/x | Aggiunge un repo come submodule in libs/x |
git clone --recurse-submodules <url> | Clona un repo e i suoi submodule |
git submodule update --init --recursive | Inizializza e scarica i submodule dopo un clone normale |
git submodule update --remote | Aggiorna i submodule al loro ultimo commit |
git submodule status | Mostra il commit di ogni submodule |
Casi comuni
| Obiettivo | Comando |
|---|---|
| Clonare un progetto che usa submodule | git clone --recurse-submodules <url> |
| Scaricare i submodule dopo aver già clonato | git submodule update --init --recursive |
| Portare un submodule all'ultima versione | git submodule update --remote |
Domande frequenti su git submodule
Cos'è un git submodule?
Un submodule è un repository Git annidato dentro un altro repository Git, fissato su un commit preciso. Il repository padre conserva un puntatore a quel commit esatto invece dei file del submodule, così i collaboratori fanno il checkout della stessa versione. Si usa per includere una dipendenza o un componente condiviso che ha un proprio repo e una propria cronologia.
Come clono un repository con i submodule?
Usa
git clone --recurse-submodules <url> per clonare il padre e tutti i suoi submodule in un solo passo. Se hai già clonato senza quell'opzione, esegui dopo git submodule update --init --recursive per riempire le cartelle dei submodule.Come aggiorno un submodule all'ultimo commit?
Esegui
git submodule update --remote, che scarica il branch tracciato di ogni submodule e lo sposta all'ultimo commit. Poi fai il commit della modifica nel repository padre, perché il padre registra a quale commit del submodule punta: l'aggiornamento non viene salvato finché non committi quel puntatore.Perché la cartella del mio submodule è vuota dopo il clone?
Perché hai clonato senza
--recurse-submodules, quindi Git ha creato le cartelle ma non ne ha scaricato il contenuto. Risolvi con git submodule update --init --recursive, che inizializza e scarica tutti i submodule.Posso esercitarmi online?
Sì. Apri il terminal playground per eseguire
git submodule in una vera shell nel tuo browser, senza installare nulla. Il corso interattivo gratuito di Git di Coddy spiega anche come configurare un repository passo dopo passo.