- COMP.CS.300
- 2. Git
- 2.3 Course-upstream uusien ohjeiden vetämistä (pull) varten
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.
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:
- Avaa unmerged tiedostot: Avaa jokainen yhdistämätön (unmerged) tiedosto tekstieditorissa.
- 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.
-
Lisää muutokset git stagingiin:
Kun olet ratkaissut jokaisen konfliktin tiedostossa, laita tiedosto git:n stageen suorittamalla komento
git add ~filename~
-
Tee commit muutoksista:
Kun olet ratkaissut kaikki konfliktit, suorita komento:
tehdäksesi commitin muutoksista.git commit -m "Merge changes from course-upstream" -a
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.