Pikakatsaus git:iin

Terminologiaa (yksinkertaistetusti)

Repository

Paikka, jossa Git säilyttää tietoja tiedostoista ja niiden muutoksista. Tuttavallisemmin vain "repo". Gitin tapauksessa tällainen repo on tyypillisesti sekä omalla koneellasi, että palvelimella. Molemmissa on versiohistoria kaikista projektin tiedostoista. komennoilla push ja pull, voidaan tietoa uusista versioista ja muutoksista välittää reposta toiseen.

Staging area

"lastausalue" on paikka, jossa valmistellaan tulevat muutokset git repositoryyn (ns. commit). Komennolla git add voi lisätä jonkin muuttuneen tiedoston staging:iin.

Commit

Kun kaikki halutut tiedostot ovat alueella, viedään muutokset repositoryyn. Tämä tapahtuu komennolla git commit -m "muutosta kuvaava viesti" Mahdollisuuksien mukaan pyritään siihen, että muutoksen jälkeen repositoryssa on toimiva, tai ainakin paremmin toimiva ohjelma kuin ennen muutosta. On tärkeää että jos muutokset eri tiedostoissa liittyvät yhteen, viedään muutokset yhtenä commit:ina repositoryyn. Commitin tekeminen tyhjentää lastausalueen.

Tärkeimmät git-komennot

git status

Tämän komennon voi aina turvallisesti kirjoittaa selvittääkseen mitä repossa on kulloinkin meneillään. git status-komento kertoo missä tilassa repository tällä hetkellä on. Se kertoo käyttäjälle mm.:

  • mitkä tiedostot sijaitsevat repositoryn hakemistossa mutta eivät kuulu versionhallintaan

  • Mitkä tiedostot ovat muuttuneet

  • Mitä muutoksia ollaan viemässä seuraavaksi versionhallintaan (tiedostot staging arealla)

  • Missä haarassa (branch) kulloinkin ollaan.

git clone

git clone repositoryn_osoite hakee palvelimelta kokonaisen repositoryn ja tekee siitä sinulle oman kopion. Kloonattu projekti tietää automaattisesti missä etärepository on, koska se luotiin sieltä käsin. Löydät repositoryn osoitteen version.aalto.fi:stä clone-napin takaa. Valitse "Clone with SSH". (Jos et näe tätä vaihtoehtoa, et ole vielä onnistuneesti lisännyt ssh-avaintasi käyttäjäprofiiliisi)

Huomaa, että git clone luo uuden hakemiston, jonka nimi on tyypillisesti kloonaamasi projektin nimi. Sinun ei siis kannata luoda ensin käsin hakemistoa projektillesi. Jos haluat kloonata readme:lla alustetun tyhjän projektin kansioon, jossa sinulla on tiedostoja joista haluat tehdä git-projektin, voit antaa hakemiston polun parametrina tyyliin git clone https://github.com/esimerkki/jokuprojekti oma_projektikansioni

git add

git add muuttuneen_tiedoston_nimi.scala lisää muuttuneen tiedoston staging arealle. git add:in voi peruuttaa komennolla git reset muuttuneen_tiedoston_nimi.scala`

git commit

git commit -m "muutosta kuvaava viesti" vie staging arealla olevien tiedostojen muutokset talteen ja liittää niihin haluamasi viestin. Viesti alkaa tyypillisesti verbilla ja on lyhyt mutta kuvaava. Esim Fixes the bug with empty pizzas tai Adds a function for ordering slices.

Commit tekee muutoksen paikalliseen repositoryyn. Jos haluat jakaa muutoksen muiden ryhmäläistesi kanssa täytyy muutokset siirtää etärepositoryyn.

git push

git push lähettää paikalliset muutoksesi palvelimella olevaan repositoryyn. Jos sinulla on paikallisessa repositoryssa uusin etänä oleva muutos, kaikki sujuu mukinoitta ja näet version.aalto.fissä uusimman muutoksesi. Jos sen sijaan joku on ehtinyt tehdä muutoksia sillä aikaa kun työstit omaa osuuttasi, sinun täytyy hakea nuo muutokset itsellesi ja varmistaa että työnne sopivat yhteen. Tätä varten tarvitaan komento git pull

git pull

git pull hakee palvelimella olevasta repositorysta uusimman tilan sinun paikalliseen repositoryysi. Jos sinulla ei ole keskeneräistä työtä, tämä usein sujuu mukinoitta. Jos sen sijaan olet muuttanut jotakin ja et ole vienyt sitä commit:ina talteen, git pelaa varman päälle eikä suostu kirjoittamaan tiedostojesi päälle.

git init

git init luo sinulle tyhjän repositoryn siihen hakemistoon missä olet. Jos olet jo aloittanut työt, tai loit projektin jollakin aloitus-skriptillä voit mennä hakemistoon, joka sisältää projektisi tiedostot ja ajaa komennon siellä. Tämän jälkeen voit lisätä projektisi tiedostot komennolla git add ja viedä projektin alkutilan git:iin git commit:illa.

git remote add

Toisin kuin kloonatun projektin tapauksessa, täytyy init:illä luodulle projektille kertoa gitlabista "käsin". Tämä on kuitenkin helppoa. Voit luoda gitlabissa projektin kuten aiemmin on neuvottu ja kopioida osoitteen kuten teit clone-komentoa varten. Nyt kuitenkin kirjoitamme:

git remote add origin gitlab-repositorymme-osoite

Tämä kertoo gitille että nimellä "origin" viitataan nyt etärepositoryyn. Tämän jälkeen push ja pull toimivat repositoryn kanssa kuten kloonatun repositoryn kanssa.

.gitignore

Tämä ei ole komento, vaan tiedosto, jonka voi laittaa hakemistoon ja jossa voi listata ne tiedostot joita ei kuulu laittaa repositoryyn. Tiedoston sisältö voisi olla esim:

bin
*.class
*.log

...jolloin käännetyt scala-tiedostot (class), erilaiset logit ja hakemisto bin jäävät aina repositoryn ulkopuolelle vaikka ovatkin samassa hakemistossa. Class-tiedostojen ja bin kansion jättäminen gitin ulkopuolelle on fiksua, koska jokainen käyttäjä voi kääntää .scala-tiedostoista omalle koneelleen sopivan version ja binääritiedostojen vienti vain veisi turhaa tilaa ja mahdollisesti toimi repositoryyn tiedostoja jotka eivät toimi kaikilla käyttäjillä.

FAQ - usein kysyttyjä kysymyksiä

  • Git sanoo ettei tiedä kuka olen.
*** Please tell me who you are.

Run

git config --global user.email "you@example.com"
git config --global user.name “Your Name”

Käytännössä tämä tarkoittaa juuri sitä mitä yllä lukeekin. Koneesi käyttäjälle ei voida suoraan päätellä sähköpostiosoitetta tai nimeä, joten joudut itse syöttämään ne. Suosittelen käyttämään Aallon mailiosoitetta ja oikeaa nimeä, koska nimi näkyy tekemiesi muutosten yhteydessä muille ja voimme ottaa käyttäjien tekemän työn huomioon tehtäviä pisteyttäessä myöhemmissä tehtävissä. Jos haluat käyttää nimimerkkiä githubissa tms., voit tehdä aina projektikohtaisen asetustiedoston joka käyttää k.o. projektissa eri käyttäjää.

Viimeksi muutettu: torstaina 26. syyskuuta 2019, 10.19