- TIE-0240x
- 2. Työskentely ohjelmistotiimissä
- 2.3 Tekninen näkökulma: Submodulet Gitissä
Tekninen näkökulma: Submodulet Gitissä¶
On tavallista, että projektin aikana huomataan, että projektissa tarvitsee käyttää toisen projektin koodia. Tällaisia tilanteita ovat esimerkiksi toisten kehittämät kirjastot tai tilanne, jossa projektin toteuttaminen on useamman koodarin vastuulla ja tehdään toisista erillään. Tarvitaan siis kaksi toisistaan erillään olevaa projektia, mutta samalla toiselle mahdollisuus käyttää toista.
Git ratkaisee tilanteen submoduleilla. Submodulet mahdollistavat yhden Git repositorion sijoittamisen toisen gitrepositorion alihakemistoksi. Näin saadaan toinen projekti kloonattua osaksi omaa projektia mutta samalla commit-historiat pysyvät siististi erillään.
Submodulet käytännössä¶
Omaan repositorioon saa lisättyä submodulen komennolla git submodule add URL
. Kurssilla tämä on tehty valmiiksi. Kannattaa kuitenkin huomioida, että submodulen lisääminen luo uuden tiedoston .gitmodules
. Tämän tiedoston tehtävä on tallettaa tieto siitä, miten repositoriot sijoittuvat. Tämä tiedosto on versionhallinnan alla.
Submoduleja sisältävän projektin kloonaaminen¶
Kun kloonaat projektin (esim. projektirepositoriosi), jossa on submodule (tai useita), et saa submoduleissa sijaitsevia tiedostoja itsellesi, vaikka saatkin submodulen hakemiston. Tiedostot saadaksesi, sinun pitää ajaa kaksi komentoa git submodule init
ja git submodule update
. Ensimmäinen alustaa paikallisen konfiguraatiotiedostosi ja jälkimmäinen hakee submodulen sisällön. Esimerkiksi:
git clone https://course-gitlab.tuni.fi/esim.git
git submodule init
git submodule update
Helpompi ja siten suositeltava tapa on käyttää kloonamisen yhteydessä lisävipua --recurse-submodules
, jolloin alustus ja sisällön päivittäminen tapahtuu automaattisesti eli
git clone --recurse-submodules https://course-gitlab.tuni.fi/esim.git
Submodulet ja projektin eteneminen¶
Työn edetessä submoduleen tulleet uudet päivitykset pitää tasaisin väliajoin hakea itselle käyttöön. Tämä tapahtuu komennolla
git submodule update --remote
Näin submodulen päivittäminen omasta projektista käsin ei ole mahdollista. Toisaalta, kurssin tapauksessa mitään tarvetta tällaiselle ei ole.
Lisätietoa¶
Lisää submoduleista löydät esim. Git bookista. Submodule-dokumentaatio on saatavilla: https://git-scm.com/docs/git-submodule.