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