Course-upstream uusien ohjeiden vetämistä (pull) varten

course-upstreamia käytetään ohjeiden ja viikottaisten tehtävien jakeluun. Kurssin henkilökunta tallettaa tarvittavat tiedostot opiskelijoille course-upstreamiin; varsinaisesti upstream on tällä kurssilla student_template_project-repository. Uuden materiaalin tallentamisen jälkeen opiskelijoiden tarvitsee vain vetää (pull) muutokset.
Lisää course-upstream git remoteksi viikkotehtäviä ja projekteja varten
Henkilökohtaiset repositoriot on luotu gitiin: course-gitlab.tuni.fi. Aluksi git-repositorioon sisältyvät pelkästään ne tiedostot, jotka olivat repositoriossa sitä kloonatessa, myöhemmin myös mahdollisesti lisäämäsi tiedostot.
Jotta saat jatkossa päivitykset, uudet testit ja muutokset kurssin upstream-repositoriosta, sinun täytyy lisätä student_template_project remoteksi omalle git-repositoriollesi. Voit lisätä course-upstreamin remoteksi seuraavasti:

git remote add course-upstream git@course-gitlab.tuni.fi:compcs300-october-2024/student_template_project.git

Tästä lähtien kutsutaan sitä course-upstreamiksi ja sinne kurssihenkilökunta päivittää materiaaleja josta opiskelijat voivat vetää (pull) päivityksiä heidän omille repositorioilleen.
Lisäämisen jälkeen voit tarkastella remotejasi komennolla

git remote -v


ja voit vetää pull course-upstream:stä

git pull course-upstream main

Komento käy hakemassa viimeisimmät muutokset course-upstreamistä ja yhdistää ne paikalliseen main-haaraan. Se kysyy sinulta yhdistämisen commit-viestiä. Oletusviestiä ei tarvitse muuttaa.

Tässä vaiheessa voit saada myös seuraavan virheviestin:

fatal: Need to specify how to reconcile divergent branches.

Gitiä on ohjeistettava toimimaan toivotulla tavalla tilanteessa, jossa muutoksia vedetään ulkoisesta repositoriosta paikalliseen. Erityisesti täytyy määritellä mitä halutaan, jos sekä ulkoisessa että paikallisessa repositoriossa on tapahtunut muutoksia.

Tämä ohje neuvoo asettamaan pull.rebasen epätodeksi, jolloin git historia pysyy puhtaampana ja lineaarisena, ja vain lokaalit commit-viestit huomioidaan:

git config pull.rebase false

Jos yhdistäminen ei vieläkään onnistu virheilmoituksen vuoksi:

fatal: refusing to merge unrelated histories

lisää siinä tapauksessa vaihtoehto:

git pull course-upstream main --allow-unrelated-histories

allow-unrelated-histories ilmaisee ettei yhteisen kannan (base) puuttuminen haittaa, vain yhdistäminen voidaan tehdä siitä huolimatta.

Jos yhdistäminen vielä epäonnistuisi esim. (merge failure) konfliktien (conflicts) takia:

Automatic merge failed; fix conflicts and then commit the result.

..voit ratkaista konfliktit:

  1. Avaa unmerged tiedostot: Avaa jokainen yhdistämätön (unmerged) tiedosto tekstieditorissa.
  2. Paikanna ja ratkaise konfliktit: Etsi konfliktimerkkejä (<<<<<<<, =======, and >>>>>>>). Merkkien <<<<<<< ja ======= välissä ovat sinun muutokset, ja merkkien ======= ja >>>>>>> välissä ovat mergeämisestä tulevat konfliktit. Päätä, mitkä muutokset säilytetään, muokkaa tiedostoa sen mukaisesti ja poista konfliktimerkit.
  3. Lisää muutokset git stagingiin: Kun olet ratkaissut jokaisen konfliktin tiedostossa, laita tiedosto git:n stageen suorittamalla komento
    git add ~filename~
  4. Tee commit muutoksista: Kun olet ratkaissut kaikki konfliktit, suorita komento:
    git commit -m "Merge changes from course-upstream" -a
    tehdäksesi commitin muutoksista.

Mahdolliset yhdistämiskonfliktit (merge conflict) on ratkaistava manuaalisesti.

Ole tietoinen siitä, että

git pull

vetää edelleen omasta repositoriostasi osoitteesta course-gitlab.tuni.fi, EI course-upstream:sta.

Git-repojen työnkulku on seuraava:

  • Kurssin henkilökunta lisää materiaalia: course-upstream
  • Opiskelijat saavat ilmoituksen Teamsissa ja Plussassa uutisissa
  • Opiskelijat vetävät (pull) sitten course-upstream:ista, jotta heidän repositoriansa päivittyvät sisältämään viimeisimmät asiat

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.