Tämä kurssi on jo päättynyt.

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.

Palautusta lähetetään...