Menu
Coddy logo textTech

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.

Un git submodule incorpora un altro repository dentro il tuo, fissato a un commit preciso.

Sintassi

ComandoCosa fa
git submodule add <url> libs/xAggiunge un repo come submodule in libs/x
git clone --recurse-submodules <url>Clona un repo e i suoi submodule
git submodule update --init --recursiveInizializza e scarica i submodule dopo un clone normale
git submodule update --remoteAggiorna i submodule al loro ultimo commit
git submodule statusMostra il commit di ogni submodule

Casi comuni

ObiettivoComando
Clonare un progetto che usa submodulegit clone --recurse-submodules <url>
Scaricare i submodule dopo aver già clonatogit submodule update --init --recursive
Portare un submodule all'ultima versionegit 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.
Illustrazione dei linguaggi di programmazione di Coddy

Impara Git con Coddy

INIZIA