Git ja etätietovarastot (remote)

Kun ensimmäisellä kierroksella loit itsellesi paikallisen tietovaraston ja työkopion versionhallinnan keskustietovarastostasi (kloonasit repositorion), siellä oli valmiina vain kierrosten 1-3 materiaalit. Nyt kurssin henkilökunta on saanut lisää materiaaleja valmiiksi ja sinun pitää saada uudet materiaalit haettua käyttöösi.

Kurssin henkilökunta on tallentanut uudet materiaalit keskustietovarastoon, jota kutsumme nimellä student_template_project. Tämän keskustietovaraston osoite on:

https://course-gitlab.tuni.fi/comp.cs.110-ohj-2_2021-KEVAT/student_template_project

Koska Git on hajautettu versionhallintajärjestelmä, voi paikalliseen tietovarastoon hakea muutoksia useammasta keskustietovarastosta. Nyt haet uuden kierroksen materiaalit edellämainitusta student_template_project:sta omaan paikalliseen tietovarastoosi, josta sitten viet ne omaan keskustietovarastoosi.

../../_images/git_jarjestelyt.png

Kurssilla toimitaan siten, että kurssin henkilökunta työstää materiaaleja student_template_project:ssa. Sinä työstät omia ratkaisujasi omassa tietovarastossasi. Lisäksi välillä (viikottain) sinun täytyy hakea muutoksia student_template_project:sta.

Jotta voit hakea muutoksia jostain muualta kuin omasta keskustietovarastostasi, sinun pitää asettaa tämä toinen keskustietovarasto nk. remoteksi paikalliseen tietovarastoosi. Nyt siis asetat student_template_project:n remoteksi seuraavien ohjeiden mukaan.

Voit tehdä toimenpiteen joko Qt Creatorissa tai komentorivillä. Valitse siis jompikumpi pari seuraavista neljästä osioista.

Vaihtoehto 1: komentorivi

Remoten asettaminen komentorivillä

Avaa komentorivi ja siirry paikalliseen tietovarastoosi. Suorita seuraava komento:

git remote add <shortname> <url>

jossa <shortname> on valitsemasi lyhyt, kuvaava nimi uudelle remotelle ja <url> remoteksi asetettavan tietovaraston osoite. Esimerkiksi:

git remote add kurssi https://course-gitlab.tuni.fi/comp.cs.110-ohj-2_2021-KEVAT/student_template_project

Voit testata, että edellinen onnistui, antamalla seuraavan komennon:

git remote –v

Tämä tulostaa listan kaikista remoteista, esim. seuraavasti:

kurssi https://course-gitlab.tuni.fi/comp.cs.110-ohj-2_2021-KEVAT/student_template_project (fetch)
kurssi https://course-gitlab.tuni.fi/comp.cs.110-ohj-2_2021-KEVAT/student_template_project (push)
origin https://course-gitlab.tuni.fi/comp.cs.110-ohj-2_2021-KEVAT/user_id.git (fetch)
origin https://course-gitlab.tuni.fi/comp.cs.110-ohj-2_2021-KEVAT/user_id.git (push)

Jos kaikki menee hyvin, tätä remoten lisäämistä sinun ei tarvitse tehdä kuin kerran tämän kurssin aikana.

Uusien materiaalien hakeminen remotesta komentorivillä

Kun remote on asetettu, voit hakea muutokset remotesta paikalliseen tietovarastoosi kirjoittamalla komennon:

git pull <remote> <branch>

jossa <remote> on edellä valitsemasi ja remotelle antamasi nimi, ja <branch> on se etätietovaraston haara, josta haluat muutokset hakea.

Huomaa, että tämä käynnistää Gitille määritellyn tekstieditorin (oletuksena vi), jossa sinun pitää kirjoittaa merge-viesti, joka kuvailee sitä, miksi merge on tehty, samoin kuin commit-viestejä olemme opetelleet kirjoittamaan. (Jos sattuu niin, että päädyt editoriin nimeltä vi, sieltä pääsee pois näppäilemällä merkit “:wq”.)

Esimerkiksi edellä esitetyn komennon voisi suorittaa näin:

git pull kurssi master

Haaroja emme ole vielä käsitelleet kurssin materiaaleissa, ne ovat enemmänkin seuraavan ohjelmointikurssin asiaa. Toistaiseksi käytä haarana aina masteria.

Tämä toimenpide sinun pitää tehdä kurssin aikana aina, kun kurssin henkilökunta on laittanut uutta materiaalia jaettavaksi student_template_project:in, tyypillisesti siis aina uuden kierroksen avautuessa.

Vaihtoehtoisesti (jos et halua kirjoittaa merge-viestiä editorissa) voit myös tehdä pull-komennon sijaan kahdessa vaiheessa seuraavasti:

git fetch <remote> <branch>
git merge <remote>/<branch> -m "Kirjoita viesti tähän"

Tästä huomaatkin, että git pull on oikeastaan vain git fetch + git merge.

Vaihtoehto 2: Qt Creator

Remoten asettaminen Qt Creatorissa

Avaa Qt Creatorissa jokin versionhallintaan talletetuista projekteista, jotta tarvittava valikko on käytettävissä. Valitse Qt Creatorin valikosta toiminto Tools > Git > Remote Repository > Manage Remotes...:

../../_images/git_manage_remotes.png

URL:na pitäisi olla https://course-gitlab.tuni.fi/comp.cs.110-ohj-2_2021-KEVAT/xyz.git tai git@course-gitlab.tuni.fi:comp.cs.110-ohj-2_2021-KEVAT/xyz.git, missä kohdan xyz tilalle lukee käyttäjätunnuksesi.

Klikkaa “Add…” ja kirjoita avautuvaan dialogiin kohtaan “Name” jokin lyhyt, kuvaava nimi uudelle remotelle (esim. kurssi), sekä kohtaan “URL” tämän materiaaliosion alussa mainittu osoite. Tämän jälkeen uusi remote näkyy listalla:

../../_images/git_manage_remotes_new.png

Jos kaikki menee hyvin, tätä remoten lisäämistä sinun ei tarvitse tehdä kuin kerran tämän kurssin aikana.

Uusien materiaalien hakeminen remotesta Qt Creatorissa

Kun remote on lisätty listalle, valitse se hiirellä klikkaamalla. Tämän jälkeen, kun klikkaat “Fetch”, haetaan remotesta muutokset, eli student_template_project:n tapauksessa uuden kierroksen materiaalit paikalliseen tietovarastoosi, mutta ne eivät vielä näy hakemistorakenteessa. Klikkaa “Close”.

Seuraavaksi valitse Qt Creatorin valikosta toiminto Tools > Git > Local Repository > Branches...:

../../_images/git_branches.png

Valitse listalta juuri lisäämäsi remoten alla oleva haara master (rivi, jolla lukee master, mutta älä sekoita tätä toiseen master-riviin). Klikkaa “Merge” (ja jos aukeaa valikko, valitse avautuvista vaihtoehdoista “Fast Forward”). Jos tietovarastosi oli siinä tilassa, jossa sen piti olla, muutosten pitäisi nyt näkyä hakemistorakenteessa. Tässä tapauksessa siis templates-hakemiston alta pitäisi löytyä uusia kierroksia.

Jos esimerkiksi olet muuttanut templates-hakemiston sisältöä, voi olla mahdollista, ettei edellä kuvattu toimenpide onnistu. Tässä tapauksessa ota yhteyttä kurssin henkilökuntaan.

Tämä toimenpide sinun pitää tehdä kurssin aikana aina, kun kurssin henkilökunta on laittanut uutta materiaalia jaettavaksi student_template_project:in, tyypillisesti siis aina uuden kierroksen avautuessa.