Alkuasetelma

Kurssin Telegram-botti -tehtävä aloitettiin luomalla tehtäväpohjana toimivasta git-repositorysta opiskelijan oma kopio, fork. Fork on pitkälti samankaltainen operaatio kuin clone, luoden käyttäjälle uuden projektin version.aalto.fi -palvelun sisällä. Tehtävä jatkui kloonaamalla tämä uusi projekti omalle tietokoneelle, jossa varsinainen kehitystyö lopulta tehdään.

Projekti on nyt edennyt, ja omalla koneella tehtyä työtä on tallennettu sekä paikalliseen git-repositoryyn, että viety version.aalto.fi:hin git push -komennolla.

Alkuperäinen projekti päivittyy

Samanaikaisesti opiskelijan työn kanssa, myös alkuperäinen projekti, josta forkkimme tehtiin, kehittyy eteenpäin. Kuinka nämä muutokset saadaan mukaan omaan projektiimme?

git remote

Komennolla git remote voidaan tehdä muutoksia gitin tuntemiin etärepositoryihin, sekä listata tunnetut etärepositoryt. Kun kirjoitat git remote -v saat listan repositoryista ja niille annetuista nimistä.

git remote -v
origin  git@version.aalto.fi:tteekkari/esimerkki.git (fetch)
origin  git@version.aalto.fi:tteekkari/esimerkki.git (push)

Ylläolevassa esimerkissä repository on osoitteessa git@version.aalto.fi:tteekkari/botti.git ja siihen viitataan nimellä origin. Tämä voisi olla mitä tahansa, mutta origin on tyypillinen etärepositoryn nimi.

Jotta saamme haettua uudet päivitykset projektiin, täytyy gitille kertoa alkuperäisestä projektista josta teimme forkkimme. Annetaan sille nimeksi vaikka upstream. Jälleen kerran nimi voisi olla mitä tahansa.

> git remote add upstream git@version.aalto.fi:kkylteri/esimerkki.git

> git remote -v
origin  git@version.aalto.fi:tteekkari/esimerkki.git (fetch)
origin  git@version.aalto.fi:tteekkari/esimerkki.git (push)
upstream git@version.aalto.fi:kkylteri/esimerkki.git (fetch)
upstream git@version.aalto.fi:kkylteri/esimerkki.git (push)

Ennen projektimme päivittämistä

Ennen projektin päivittämistä kannattaa mahdollisuuksien mukaan tallentaa oman projektisi keskeneräiset työt ja viedä uudet tiedostosi git:iin. (add, commit). Tämä helpottaa tulevia tehtäviä.

Keskeneräisestä työstä

Aina keskeneräistä työtä ei voi viedä git:iin, koska se on liian pahasti kesken. Komennolla git stash, voi gitin jo tuntemien tiedostojen paikalliset muutokset viedä hetkeksi sivuun odottamaan (stash). Muutokset voi myöhemmin tuoda takaisin komennolla git stash pop

Kaikki valmista - haetaan päivitykset

Päivitysten noutamisen voi tehdä muutamalla eri tavalla. Palaamme myöhemmin kurssilla siihen, kuinka eri tavat toimivat, ja mikä niiden ero on. Noudamme muutokset nyt upstream-repositorysta, sen master-haarasta komennolla:

git pull upstream master

Tämän jälkeen paikallisessa repositoryssamme on alkuperäisen repositoryn sisältämät muutokset. Korjattuamme mahdolliset merge-confliktit (kts. aiemmat ohjeet ja ohjeet alla), on projektimme ajan tasalla. Voimme nyt päivittää muutokset myös omaan version.aalto.fi -projektiimme tekemällä tavallisen git push -komennon.

Git kieltäytyi, mitä teen?

Git pyrkii olemaan mahdollisimman varovainen, jotta se ei ylikirjoittaisi työtä, jota et ole laittanut vielä versionhallintaan. Tällaisia voivat olla luomasi uudet tiedostot, joiden päälle pull kopioisi toisesta repositorysta saman nimisen tiedoston, tai tiedostot, joita olet muuttanut, mutta joita et ole vielä vienyt talteen.

Molemmissa tapauksissa helpoin ratkaisu on suorittaa ensin tarvittavat add ja commit -operaatiot ja laittaa oma työ talteen ja koettaa pullia vasta sitten uudestaan.

Sain merge-confliktin, mitä teen?

Merge-konflikti on tilanne, jossa pull-komennolla saamasi versiossa jostakin tiedostosta on jokin muutos ja vastaavasti omassa repositoryssasi on itse tekemäsi muutos tuohon samaiseen tiedostoon. Jotta työtä ei mene hukkaan ja jotta voit itse päättää mitkä osat muutoksista halutaan mukaan yhdisteltyyn versioon, merkitsee git- molemmat muutokset tiedostoon merkkien <, = ja > avulla seuraavasti.

Tämä osa tekstistä ei muuttunut lainkaan...
<<<<<
tätä muutin omalla koneellani
=====
tämän muutoksen sain pull-komennolla
>>>>>

Yhdistele tekstit ja poista <<<< === ja >>> -merkinnät, ja vie yhdistelty tiedosto versionhallintaan komennoilla add ja commit. Konflikti korjattu.

Viimeksi muutettu: keskiviikkona 9. lokakuuta 2019, 07.42