Creare repository annidate con Git

Con i Submodules è possibile inizializzare un progetto composto da più repository diverse.

Pubblicato da ,
Ultima modifica

Accade spesso dopo aver clonato un repository da github, che questa per poter funzionare correttamente ha bisogno di includere un altro repository, ad esempio il repository repo1 deve includere necessariamente il repository repo2 ed entrambi vanno mantenuti aggiornati con le ultime modifiche, poichè ci si sta lavorando in team.

Sicuramente non varrebbe la pena lavorare su due repositories diversi, ma sarebbe più comodo avere una struttura come la seguente

  • repo1/
    • repo2/
    • css/
    • js/
    • images/

e lavorare su un unico progetto e tenere sotto controllo le modifiche sia di uno che dell'altro repository e effettuare il push delle modifiche separatamente per ognuna di essi.

Per ottenere un risultato come questo possiamo usare i submodules.

Prendiamo in considerazione l'esempio precedente, quindi effettuiamo il clone del repo1 col seguente comando

git clone https://github.com/<username>/repo1.git

quindi avremo una cartella repo1 contenente tutti i file e le cartelle del repository appena clonato, spostiamoci all'interno di questa cartella usando il comando

cd repo1

e includiamo al suo interno il repository repo2 col seguente comando

git submodule add https://github.com/<username>/repo2.git

in particolare esiete un modo per effettuare il clone di un branch specifico e indicare anche un percorso specifico con il comando submodule

git submodule add -b branch_name https://github.com/<username>/repo2.git path_repo

branch_name è il nome del branch, path_repo è il percorso in cui clonare il repository, al termine dell'esecuzione del comando avremo così una struttura di cartelle simile all'esempio precedente, e verrà generato un file .gitmodules simile a questo

[submodule "repo2"]
 path = repo2
 url = https://github.com/<username>/repo2.git

Per poter effettuare le operazioni di commit, push, pull o anche visualizzare soltanto lo stato delle modifiche col comando git status, ci si sposta nella cartella principale del repository su cui si vogliono effettuare queste operazioni.