Git ja etätietovarastot (uusien koodipohjien haku)

Kun ensimmäisellä kierroksella loit itsellesi paikallisen tietovaraston ja työkopion versionhallinnan keskustietovarastostasi (kloonasit repositorion), siellä oli valmiina vain kierrosten 1-3 materiaalit. Sitten kun kurssin henkilökunta on saanut lisää materiaaleja valmiiksi, 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/compcs110-spring2024/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.

Komennot ``push`` ja ``pull`` opiskelijan ja henkilökunnan tietovarastojen välillä

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ä (Terminal). Valitse siis jompikumpi seuraavista vaihtoehdoista.

Varoitus

Ennen uusien materiaalien hakua, varmistuthan siitä, että sinulla ei ole paikallisia muutoksia, joita et ole puskenut keskustietovarastoon. Tämän saat selville komennolla git status. Jos komento tulostaa:

On branch main
Your branch is up-to-date with 'origin/main'.
nothing to commit, working tree clean

keskeneräisiä muutoksia ei ole. Jos komento git status tulostaa jotakin muuta, kannattaa poistaa kaikki kääntäjän generoimat tiedostot ja hakemistot. Tällaiset tiedostot päättyvät yleensä merkkijonoon .pro.user, ja hakemistot taas sisältävät sanan build. Tarpeelliset muutokset voit puskea keskustietovarastoosi.

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/compcs110-spring2024/student_template_project.git

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/compcs110-spring2024/student_template_project.git (fetch)
kurssi https://course-gitlab.tuni.fi/compcs110-spring2024/student_template_project.git (push)
origin https://course-gitlab.tuni.fi/compcs110-spring2024/user_id.git (fetch)
origin https://course-gitlab.tuni.fi/compcs110-spring2024/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 main

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

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...:

Kuvakaappaus etätietovaraston asettamisesta Qt Creatorissa

URL:na pitäisi olla https://course-gitlab.tuni.fi/compcs110-spring2024/xyz.git tai git@course-gitlab.tuni.fi:compcs110-spring2024/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:

Kuvakaappaus lisätystä etätietovarastosta Qt Creatorissa

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...:

Kuvakaappaus etätietovaraston haaran valitsemisesta Qt Creatorissa

Valitse listalta juuri lisäämäsi remoten alla oleva haara main (rivi, jolla lukee main (kuvassa master), mutta älä sekoita tätä toiseen main-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.

Mahdollisia ongelmatilanteita

Jos edellä mainittu pull-komento ei onnistu, vaan Git tulostaa virheilmoituksen, jossa esiintyy seuraavanlaisia rivejä:

hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only

voit yrittää valita näistä ensimmäisen (merge-vaihtoehdon). Kirjoita komentoriville:

git config pull.rebase false

ja yritä sen jälkeen pull-komentoa uudelleen.

Huomaa myös tämän osion alussa oleva varoitus paikallisista muutoksista. Kannattaa siis myös tarkistaa git status.