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.