I sottomoduli Git sono come repository all’interno di repository, che ti consentono di includere librerie di codice esterne o dipendenze nel tuo progetto, il tutto senza collegare il controllo della versione del modulo al progetto stesso. Ciò mantiene i moduli separati e facili da aggiornare ed è facile convertire una directory in un nuovo sottomodulo.
Cos’è un sottomodulo in Git? Un sottomodulo è un repository Git incorporato in un altro repository Git. Ciò consente di includere il codice di un altro progetto come dipendenza, pur mantenendo il proprio controllo della versione.
Quando si clona il repository principale, clona automaticamente anche il repository del sottomodulo. Ciò significa che il codice del sottomodulo e la cronologia Git sono tenuti separati dal controllo della versione principale e possono essere aggiornati per più repository che utilizzano la libreria.
Un’alternativa ai sottomoduli consiste nel pubblicare le tue librerie come pacchetti in gestori di pacchetti come NPM, Maven o NuGet. Tuttavia, questo non funziona per tutti i tipi di progetti e se stai lavorando con codice privato, dovrai impostare un registro di pacchetto privato, che può essere più complicato del semplice incorporamento del codice sorgente della libreria come sottomodulo .
Uno dei principali problemi con la trasformazione di una directory esistente in un sottomodulo è che il sottomodulo deve essere gestito esternamente. Git si aspetta che tu crei una nuova directory vuota per esso e cloni il sottomodulo in il progetto. Puoi copiare il codice in una nuova cartella, ma perderai tutta la cronologia Git ad esso correlata, il che può essere molto dannoso nei progetti di grandi dimensioni. Invece, cloneremo il repository, filtreremo il codice non necessario e invieremo la nuova cronologia al nuovo sottomodulo.
Il primo passo è creare un nuovo repository per il sottomodulo. Questo di solito è su un servizio di hosting Git come Git Hubanche se puoi creare un repository locale sul tuo computer.
Successivamente, vorrai ottenere una nuova copia del tuo repository principale da cui creare il repository del sottomodulo.
git clone git@github.com:username/repository.git submodule-repo cd submodule-repo Successivamente, vorrai filtrare tutto ciò che non è correlato al tuo sottomodulo. Questo eliminerà tutta la cronologia dei commit che non è correlata al codice contenuto nel sottomodulo. Questo è un operazione distruttivaquindi assicurati di farlo sulla copia del tuo repository, non su quella principale.
git filter-branch –subdirectory-filter submoduledirectory — –all Ti verrà lasciato solo il codice che era nella directory e solo i commit che lo riguardano. Ciò ti consentirà di trasferire tutta la cronologia di Git relativa a quel sottomodulo.
Ti consigliamo di modificare l’URL remoto di questa directory del modulo nel tuo nuovo repository di sottomoduli, che in genere è denominato “origine”.
git remote set-url origin https://github.com/new-repository.git Quindi, puoi spingere la cronologia come faresti normalmente.
git push -u origin main Aggiunta di un nuovo sottomodulo Tornando al progetto principale, vorrai aggiungere il sottomodulo.
Innanzitutto, devi interrompere il tracciamento della directory che desideri trasformare in un sottomodulo dal repository principale. Sarà ancora presente nella cronologia delle versioni di Git e lo hai appena aggiunto al nuovo repository del modulo.
rm -rf directory_name Successivamente, puoi aggiungere l’URL remoto per il repository del sottomodulo che hai creato su Github, utilizzando il file git submodule add comando:
git submodule add git@github.com:username/repository.git directory_name Quando esegui questo comando, Git creerà una nuova directory del sottomodulo nel repository principale e clonerà il repository del sottomodulo in questa directory. Inizierà anche a tracciare nuovamente la cartella del modulo.
Per aggiornare il sottomodulo, puoi usare il file git submodule update comando:
git submodule update –remote submodule_name