Cosa sono i sottomoduli Git e come li usi?

Cosa sono i sottomoduli Git e come li usi?

I sottomoduli Git sono un modo per includere un repository Git come sottodirectory di un altro repository. Questo tipo di nidificazione del codice sorgente può essere molto utile per i progetti che desiderano un controllo più preciso sulle proprie dipendenze e sul processo di compilazione ed è facile da configurare.

Perché utilizzare i sottomoduli?

Quando aggiungi un sottomodulo a un repository Git, stai essenzialmente creando un collegamento tra i due repository. Il repository principale e il repository del sottomodulo possono essere aggiornati indipendentemente l’uno dall’altro. Il repository principale conterrà un URL remoto e un riferimento all’ID commit estratto nella cronologia del sottomodulo. Quando cloni il repository principale, clonerà anche i sottomoduli.

Ciò può essere utile se si dispone di un progetto che dipende dal codice di un altro progetto e si desidera mantenere separati i due progetti (e le rispettive cronologie delle versioni), ma essere comunque in grado di lavorare facilmente con entrambi.

L’alternativa principale ai sottomoduli è l’utilizzo di gestori di pacchetti come NPM, NuGet o Maven. I gestori di pacchetti forniscono un repository centralizzato di pacchetti e librerie che possono essere facilmente installati e aggiornati. Tuttavia, devi pubblicare una versione specifica di ciascun pacchetto che desideri utilizzare. E se il tuo codice è privato, devi usare il tuo registro di pacchetto privato.

I sottomoduli Git ti consentono di gestire le dipendenze più da vicino rispetto alla maggior parte dei gestori di pacchetti. Con i sottomoduli, puoi scegliere esattamente quali versioni di ogni dipendenza vuoi includere nel tuo progetto, ed è più facile aggiornare l’ID commit del sottomodulo piuttosto che pubblicare un nuovo pacchetto.

I sottomoduli semplificano inoltre la manutenzione e l’utilizzo di fork di librerie comuni, che è qualcosa che molte aziende scelgono quando sono necessarie funzionalità aggiuntive o personalizzazioni. In definitiva, se stai mantenendo un repository per il modulo e hai bisogno di un controllo granulare sulle tue dipendenze, potresti prendere in considerazione l’utilizzo di sottomoduli invece di gestori di pacchetti.

Come utilizzare i sottomoduli Git

Se stai clonando un repository che utilizza già i sottomoduli, la maggior parte del lavoro è già stata eseguita per te. Il tuo client git dovrebbe clonare e scaricare automaticamente il repository del sottomodulo e dovrebbe aggiornarsi ogni volta che altri manutentori inviano modifiche al sottomodulo.

In caso contrario, potrebbe essere necessario eseguire git clonecon il --recursiveflag, che analizzerà e aggiornerà tutti i sottomoduli.

git clone --recurse-submodules URL

L’aggiunta di un nuovo sottomodulo è abbastanza semplice. Se stai aggiungendo un sottomodulo nuovo di zecca da un repository di origine, dovrai solo eseguire git submodule add:

git submodule add URL submodule_directory

Questo scaricherà il repository del sottomodulo dall’URL e lo clonerà nella submodule_directorycartella.

Tuttavia, se desideri convertire una cartella esistente, il processo è un po’ più complicato. Puoi leggere la nostra guida per convertire una directory in un sottomodulo qui , ma il processo prevede la clonazione del repository principale, il filtraggio della cronologia dei commit per includere solo la directory del modulo e quindi il push del sottomodulo in un nuovo repository.

Una volta aggiunto il sottomodulo, sarà necessario eseguire il commit delle modifiche nel repository principale. Questo aggiornerà la configurazione per tutti gli altri che estraggono il repository principale.

git commit -m "Added submodule submodule_directory"

Aggiornamento dei sottomoduli Git

Se qualcun altro ha aggiornato il sottomodulo o hai bisogno di estrarre gli aggiornamenti dal repository del sottomodulo, ti consigliamo di utilizzare git submodule update:

git submodule update --remote

Tuttavia, se devi apportare modifiche da solo, diventa un po’ più complicato. Apportare modifiche al codice nei sottomoduli Git richiede un po’ di attenzione in più rispetto all’aggiornamento del codice in un normale repository Git e generalmente hai due opzioni:

  • Apporta le modifiche in un repository separato per il sottomodulo, esegui il commit e aggiornale normalmente. Sarà necessario eseguire git submodule updatenel repository principale per estrarre le nuove modifiche.
  • Apporta le modifiche all’interno del repository principale. Poiché un sottomodulo è fondamentalmente un repository Git incorporato, puoi accedere cdalla directory del sottomodulo ed eseguire i comandi Git normalmente. Questo è uno dei principali vantaggi dei sottomoduli, poiché puoi mantenere repository separati mentre lavori su entrambi contemporaneamente.

Se stai apportando modifiche all’interno del repository principale, dovrai accedere cdal sottomodulo e aggiornare:

cd submodule_dir

git commit -am "submodule commit"


git push

Quindi, torna al repository principale e invia gli aggiornamenti al sottomodulo al repository principale:

cd. .

git commit -am "updated submodule"


git push

Dovresti vedere le modifiche sia sul repository Github del sottomodulo che sul repository principale.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *