Git-versiohallinta Ohjelmointi 1 -kurssilla
Tässä dokumentissa kerrotaan miten harjoitustyön koodia ja muita tiedostoja, kuten suunnitelmakuvia, käsitellään versiohallinnan avulla.
Asenna kehitystyökalut ja Git-versiohallinta ennen tämän ohjeen käyttämistä.
Jotta saat suunnitelman onnistuneesti Gitlabiin, sinun on toimittava kappaleiden 3-8 ohjeiden mukaan.
Harjoitustyön suunnitelman viemisestä versiohallintaan on myös videotutoriaali: https://youtu.be/MQJ69rmd1sw.
1. Mikä Git on
Git on hajautettu versiohallintaohjelmisto. Versionhallintaohjelmiston ideana on tarjota säilytyspaikka yhteisesti käytettävälle tiedolle ja pitää kirjaa tietoon tehdyistä muutoksista. Ohjelmistotyössä versiohallinnan käyttäminen yhteistyöskentelyyn ja muutosten jäljittämiseen on normi.
Versiohallinta mahdollistaa myös saman koodin parissa työskentelyn eri tietokoneilta, mikä sopii hyvin tälle kurssille, koska usein tehdään töitä eri tietokoneilta (mikroluokka, kotikone, jne.).
Toisaalta versiohallinta toimii myös varmuuskopiona työllesi. Näin koodisi ei häviä, vaikka tietokoneesi hajoaisi.
Tällä kurssilla emme käytä Dropboxia, muistitikkuja, sähköpostia tai vastaavia palveluita kooditiedostojen jakamiseen, koska ne eivät sovellu todelliseen yhteistyöskentelyyn. Vaikka työskentelisitkin yksin, käytä versiohallintaa ohjaajien työn helpottamiseksi sekä harjoitustyön esittelyn mahdollistamiseksi.
GitLab (ja myös GitHub) ovat internetissä toimivia palveluita, joissa Git-muotoisia varastoja (engl. repository) voidaan säilyttää.
Tällä sivulla on kukin Git-komennon aluksi linkki myös ohjeeseen ja referenssiin. Niitä ei kannata ehkä klikkailla ensimmäisellä lukukerralla, vaan siten kun haluaa tietää asiasta lisää.
2. Muistilista
Alla on muistilista tyypillisimmistä tilanteista, ja kuinka näissä gitin kanssa toimitaan erityisesti tällä kurssilla. Lue kuitenkin myös tarkemmat kuvaukset tämän dokumentin seuraavista luvuista.
Aloitan harjoitustyön ➔ Teen fork-toiminnolla gitlab.jyu.fi-palvelussa uuden etävaraston.
Menen koneelle, jossa sisältöä ei vielä ole ➔ Kloonaan etävaraston omaan koneeseen.
git clone https://gitlab.jyu.fi/Anonymous/ohj1ht.git .
Menen koneelle jossa sisältö jo on ➔ Päivitän etävaraston version koneelle.
git pull
Muutan tai lisään tiedostoja (esimerkiksi suunnitelmakuva
suunnitelma
-kansioon) ➔ Lisään muuttuneet ja uudet tiedostot stage-tilaan,git add --all
➔ ja siirrän stage-tilan tiedon lokaaliin varastoon,
git commit -m "Muutoksia kuvaava viesti."
➔ ja "pusken" tekemäni
commit
in etävarastoon.git push
Nämä samat ohjeet pätevät myös ryhmätyössä, mutta silloin kannattaa kiinnittää erityistä huomiota siihen, että tekee pull
, commit
- ja push
-toimintoja riittävän usein konfliktien välttämiseksi.
git status
-komentoa voi viljellä missä tahansa välissä. Se kertoo oman tietovaraston tilasta, muun muassa mitä tiedostoja on muutettu/poistettu/lisätty.
Alla on kuvio, jossa on havainnollistettu muutamia yleisimpiä git-komentoja.

Näitä komentoja voit kokeilla Ohjelmointi 2 -sivulla, jossa on luotu Timiin Git-"leikkikenttä" jossa komentojen kokeileminen on turvallista.
3. Oman etävaraston luominen gitlab-palveluun
Tässä vaiheessa luodaan henkilökohtainen etävarasto (engl. remote repository
) gitlab.jyu.fi-palveluun. Tämä on jatkossa sinun työsi (tai ryhmäsi työn) origin
. Kunkin opiskelijan etävarasto perustuu valmiiseen pohjaan, josta tehdään kopiohaara, eli GitLab-terminologiassa fork. Forkkauksen ansiosta saadaan uuteen projektiin kurssin alkuasetukset.
Tämä vaihe tehdään kurssilla yhden kerran.
- Jos sinulla on JY-tunnukset: Kirjaudu gitlab.jyu-palveluun (https://gitlab.jyu.fi/) JY-tunnuksilla.
- Jos sinulla ei ole JY-tunnuksia: Tee tunnukset GitHub-palveluun (https://github.com), ja kirjaudu palveluun.
- JY: Avaa Ohj1-kurssin pohjaprojekti selaimessa:
https://gitlab.jyu.fi/tie/ohj1/2022s/ohj1ht - GitHub: Avaa Ohj1-kurssin pohjaprojekti selaimessa:
https://github.com/ITKP102-Ohjelmointi-1/ohj1ht.git
- JY: Avaa Ohj1-kurssin pohjaprojekti selaimessa:
- JY: Valitse oikeasta ylänurkasta
fork
- GitHub: Vastaavasti...
- JY: Valitse oikeasta ylänurkasta
- Valitse omaa tunnustasi vastaava
namespace
(ryhmä). - Valitse näkyvyydeksi
public
. - Päivitä oman maun mukaan
Settings
-->General
-kohdasta esimerkiksi projektisi nimi ja kuvaus. Näiden muuttaminen onnistuu toki myöhemminkin.
Projektisi etävaraston URL-osoite on nyt:
https://gitlab.jyu.fi/Anonymous/ohj1ht.git
Tallenna URL-osoite Omat tiedot -sivulle.
Näet etävarastosi URL-osoitteen gitlab.jyu-palvelussa kohdasta Clone -> Clone with HTTPS. Käytä tätä osoitetta tulevissa ohjeissa.
Jatka tästä tekemällä etävarastosta paikallinen klooni koneeseesi: clone
Milloin tämä pitäisi tehdä? Vasta silloin, kun aletaan tekemään harjoitustyötäkö?
Joo vasta silloin. -MR
VL: Harjoitustyön suunitelmaa varten tarvitaan tämä kuvan laittamista varten
—Fork on projektista tehtävä itsenäinen "haara" (älä sotke branch
-termiin sitä käytetään Gitissä eri tavalla), joka jatkaa omaa elämäänsä, mutta josta on viite alkuperäiseen projektiin. Alkuperäisestä projektista (siis siitä josta fork otettiin) voi seurata mitä haaroja siitä on tehty.
4. Oikeuksien antaminen muille ryhmäläisille
Yksin tekevät voivat ohittaa tämän kohdan.
Forkin tekijä antaa oikeudet muille ryhmäläisille. Tämä tapahtuu projektin vasemman reunan kohdasta Members
ja kohtaan GitLab member or Email address
syötetään ryhmän jäseniä yksi kerrallaan.
Huom! Jäsenten tulee olla tätä ennen olla kirjautunut gitlabiin vähintään kerran.
Kaikki ryhmäläiset käyttävät samaa etävaraston osoitetta. Tämä on otettava huomioon alempana olevissa ohjeissa joissa tällöin on "väärän" henkilön tunnus.
5. Omien tietojen (nimi, sähköposti) asettaminen
Tämä vaihe tehdään yhden kerran jokaisella tietokoneella jolla harjoitustyötä työstetään.
Versiohallinta säilyttää tiedot muutoksen tekijän nimestä ja sähköpostiosoitteesta.
Aseta omat tietosi git-asiakasohjelmaan seuraavasti.
Mene komentoriville ja aseta tietosi antamalla alla olevat komennot:
git config --global user.name "Anonymous user" git config --global user.email "None"
Jos ei tulostu virheviestiä, niin komennot ovat onnistuneet.
Lisätietoa kiinnostuneille: git config
komentorivillähän ensin näkyy tämä C:> Users kauttaviiva nimeni eli olen c aseman käyttäjät kohdassa niin lisäänkö nuo komennot vain tuon rimpsun loppuun…? vai mitä täytyy näkyä komentorivillä ensin missä kansiossa pitäis olla?
git config -komentojen osalta ei ole väliä missä kansiossa olet. -AJL
—6. Etävaraston hakeminen omalle tietokoneelle (clone)
Tämä vaihe tehdään yhden kerran jokaisella tietokoneella jolla harjoitustyötä työstetään.
Seuraavaksi haetaan etävarasto omalle paikalliselle tietokoneelle. Tästä käytetään termiä kloonaaminen (engl. clone). Kloonattuun paikalliseen tietovarastoon tehdyt muutokset voi aikanaan lähettää takaisin etävarastoon; tästä kerrotaan lisää kohdassa 8.
Kloonaus tehdään tyhjään hakemistoon.
Mikäli haluat kloonata ei-tyhjään hakemistoon, on tähän ohjeet Gitin keskustelupalstalla, mutta melkein helpompi on tässä vaiheessa:
- nimeä olemassa oleva hakemisto uudelleen
- tee uusi työhakemisto
- tee sinne clone
- siirrä sisältö vanhasta hakemistosta
- poista vanha hakemisto
- jatka kuten muuten kloonin jälkeen
Valitse alta tapa jota haluat käyttää. Suositeltava tapa on bash-pohjaiset ohjeet (GitBash, Mac, Linux)
TODO: tulevina vuosina voisimme keskittyä vain ja ainoastaan komentoriviin, jotta ohjeita saisi virtaviivaistettua. Muut työkalut sitten omaehtoisesti jos osaaminen riittää. -JuhoK
—Avaa
cmd
-komentorivi taigit bash
.Tee uusi hakemisto, jonka haluat menevän versionhallintaan (ts. jossa harjoitustyösi tulee sijaitsemaan tietokoneella jossa työskentelet). Mikroluokassa kansio voi olla esimerkiksi:
C:\MyTemp\Anonymous\ht
Kotona hyvä kansionimi olisi esimerkiksi (levykirjain voi olla muukin)
C:\kurssit\ohj1\ht
Siirry tekemääsi kansioon
cd
-komentoja käyttämällä.Jos käytät cmd-komentoriviä, komento vaihtamiseen on (vaihda MyTemp... jne kohdalle äsken luomasi kansion polku):
cd c:\MyTemp\Anonymous\ht
git bash -komentorivillä komento vaihtamiseen on:
cd /c/MyTemp/Anonymous/ht
Voit halutessasi vaihtaa
ht
-sanan paikalle valitsemasi pelin nimen. Hakemiston nimen voi vaihtaa myöhemminkin.Kyseinen kansio toimii nyt projektin juurikansiona. Jatkossa kaikki komennot annetaan tässä kansiossa.
Anna komentoriviltä tässä kansiossa komento. Huomaa välilyönti ja piste lopussa, nekin on annettava.
git clone https://gitlab.jyu.fi/Anonymous/ohj1ht .
Antamalla komennon
ls -la
näet, että hakemistoon haettiin pohjaprojektin tiedostot
.gitignore
,README.md
sekä kansiosuunnitelma
..gitignore
-tiedosto sisältää tiedot sellaisista tiedostoista, joita ei oletusarvoisesti viedä versionhallintaan. Näitä ovat muun muassa erilaiset väliaikaistiedostot sekä käännetyt tiedostot.README.md
sisältää projektin kuvauksen Markdown-formaatissa.suunnitelma
-kansioon laitetaan pelin suunnitelmakuva (tai -kuvat).
Avaa Pääte (Terminal).
Tee uusi hakemisto, jonka haluat menevän versionhallintaan, ts. jossa harjoitustyösi tulee sijaitsemaan. macOS:ssa ja Linuxissa hakemisto järkevintä lienee tehdä hakemisto kotihakemiston alle. Alla on esimerkki uuden kansion luontikomennosta. Vaihda
MunKayttaja
-sanan kohdalle todellinen kotihakemistosi nimi. Jos et tiedä mikä kotihakemistosi nimi on, kirjoita avattuasi Pääte aivan ensimmäiseksi komentopwd
, joka tulostaa koko kotihakemistosi polun.mkdir /Users/MunKayttaja/ohj1/ht
Siirry tekemääsi kansioon
cd
-komentoja käyttämällä esimerkiksi seuraavasti:cd /Users/MunKayttaja/ohj1/ht
Voit halutessasi vaihtaa
ht
-sanan paikalle valitsemasi pelin nimen. Hakemiston nimen voi vaihtaa myöhemminkin.Kyseinen kansio toimii nyt projektin juurikansiona. Jatkossa kaikki komennot annetaan tässä kansiossa.
Anna komentoriviltä tässä kansiossa komento. Huomaa välilyönti ja piste lopussa, nekin on annettava.
git clone https://gitlab.jyu.fi/Anonymous/ohj1ht .
Tarkista
ls -la
-komentoa käyttämällä että hakemistoon tuli tiedostot.gitignore
,README.md
sekä kansiosuunnitelma
..gitignore
-tiedosto sisältää tiedot sellaisista tiedostoista, joita ei oletusarvoisesti viedä versionhallintaan. Näitä ovat muun muassa erilaiset väliaikaistiedostot sekä käännetyt tiedostot.README.md
sisältää projektin kuvauksen Markdown-formaatissa.suunnitelma
-kansioon laitetaan pelin suunnitelmakuva (tai -kuvat).
Lisätietoa kiinnostuneille:
💡 Huomautus: Visual Studio 2019:ssä tulee oman git-asiakasohjelmisto, joka riittää tämän kurssin tarkoituksiin, mutta joka tukee vain osaa gitin toiminnoista. Kotikoneelle kannattaakin joka tapauksessa asentaa myös git
-komentorivityökalut.
Avaa Visual Studio ja valitse
Clone or check out code
:Syötä etävaraston osoite
Repository location
-kohtaan (ks. kohta 4)Valitse
Local path
-kohdassa etävaraston tallennuskansioksi osoiteC:\MyTemp\Anonymous\Harjoitustyo
Syötä etävaraston osoite ja tallennuskansio Paina
Clone
. Etävarasto tallentuu valitsemaasi kansioon. Lopuksi Visual Studio avaa haetun kansion. Huomaa kuitenkin, että kansio ei sisällä vielä solutionia, vaan se pitää itse luoda.Visual Studio avaa haetun etavaraston Solution Explorer -ikkunassa. Kansiosta
C:\MyTemp\Anonymous\Harjoitustyo
löytyvät nyt etävarastosi tiedostot. Jos juuri forkkasit projektipohjan, sisältää se vain seuraavat kansiot ja tiedostot:.gitignore
-tiedosto sisältää tiedot sellaisista tiedostoista, joita ei oletusarvoisesti viedä versionhallintaan. Näitä ovat muun muassa erilaiset väliaikaistiedostot sekä käännetyt tiedostot.README.md
sisältää projektin kuvauksen Markdown-formaatissa.suunnitelma
-kansioon laitetaan pelin suunnitelmakuva (tai -kuvat).
Jos etävarastosi on juuri forkattu, siinä ei projektia ole; silloin luo uusi projekti Visual Studiosta kohdasta
File > New > Project
. Varmista, että tallennat uuden projektisi kansioonC:\MyTemp\Anonymous\Harjoitustyo
(eli siihen kansioon, johon hait etävarastosi).Huomaa: Jos git-varastossa
.sln
-tiedosto ei ole varaston "juuressa" (eli samassa kansiossa kuinREADME.md
), Visual Studio avaa etävaraston kansiona eikä projektina. Et siinä tapauksessa pysty ajamaan taikka debuggamaan koodiasi. Siinä tapauksessa sinun on erikseen etsittävä ja avattava.sln
-tiedosto.Lopuksi, valitse etävarastosi Visual Studiosta. Valitse Solution Explorer -ikkunan alanurkasta Team Explorer -välilehti:
Jos et näe Home-ikkunaa, valitse etävarastosi Local Git Repositories -listasta klikkaamalla se kaksi kertaa:
Valitse hakemasi etävarasti klikkaamalla se kaksi kertaa Lopuksi pääset Home-ikkunaan, josta löytyvät kaikki tarvittavat git-toiminnot:
Visual Studion Team Explorer -välilehden Home-ikkuna.
Team Explorer -välilehteä ei näy. Home-ikoni on mutta siitä ei löydy kaikkia lueteltuja ominaisuuksia. Onko ongelma että valitsin projektiksi Fysiikkapelin (Farseer)?
Projektimalli ei vaikuta Visual Studion ikkunoihin. Oletko vielä löytänyt ratkaisua? Suosittelen komentorivityökaluja jos tämä ei toimi. -JuhoK
—Siirry haluamaasi kansioon, valitse tiedostonäkymässä valkoisella, tyhjällä alueella hiiren oikea, ja sitten Git Clone.

Anna URL-kenttään forkkaamasi projektin URL, oletusarvoisesti https://gitlab.jyu.fi/Anonymous/ohj1ht
(Jos et käytä gitlabia, sovella tätä kohtaa.)
Anna Directory-kenttään se kansio, johon haluat harkkatyösi laittaa. Huomaa, että jos olet jo tehnyt tyhjän kansion, esim C:\Mytemp\Anonymous\ohj1ht
, niin Tortoise ehdottaa todennäköisesti Directory-kenttään pidempää polkua. Voit siinä tapauksessa poistaa turhat osat polun lopusta.

Valitse Clone existing repository
Laita Remote Git -osoitteeksi etävarastosi URL-osoite:
https://gitlab.jyu.fi/Anonymous/ohj1ht.git
Klikkaa Nextiä kaksi kertaa
Local directory -kohdassa valitse polku johon haluat sijoittaa projektin paikallisella tietokoneella. Käytä tarvittaessa kansiokuvaketta, jonka avulla voit navigoida haluamaasi hakemistoon. Klikattuasi kansiokuvaketta voit myös tarvittaessa luoda uuden kansion.
Windowsilla tämä uusi hakemisto voisi olla esimerkiksi
C:\MyTemp\anlakane\ohj\ht
MacOS:ssa ja Linuxissa hakemisto voi olla esimerkiksi
/Users/MunKayttaja/ohj1/ht
Huomaa, että voit tehdä uuden kansion (yllä olevassa esimerkissä
ht
ikkunan kansiokuvakkeesta.Suositus: Tee tästä projektistasi suosikki (Favorite) klikkaamalla hiiren oikealla projektiasi, ja Mark as Favorite. Tällöin SmartGit hakee projektiin mahdollisesti tehtyjä muutoksia taustalla.
Tämä valitsemasi kansio toimii nyt projektin juurikansiona.
Klikkaamalla projektisi päällä hiiren oikealla, ja Open in Explorer (TODO: macOS:ssa vastaava komento??) näet, että hakemistoon haettiin pohjaprojektin tiedostot .gitignore
, README.md
sekä kansio suunnitelma
.
.gitignore
-tiedosto sisältää tiedot sellaisista tiedostoista, joita ei oletusarvoisesti viedä versionhallintaan. Näitä ovat muun muassa erilaiset väliaikaistiedostot sekä käännetyt tiedostot.README.md
sisältää projektin kuvauksen Markdown-formaatissa.suunnitelma
-kansioon laitetaan pelin suunnitelmakuva (tai -kuvat).
reference: clone
7. Tiedostojen vieminen paikalliseen tietovarastoon (add, commit)
Kun tiedostoja lisätään, muokataan tai poistetaan, lisätään kaikki nämä muutokset lokaaliin tietovarastoon.
Tämä vaihe tehdään joka kerta kun olet tehnyt muutoksia koodiin tai muihin tiedostoihin.
7.1 Muista: Tallennathan suunnitelman oikeaan paikkaan
Tallenna harjoitustyösi suunnitelman sekä luonnoskuvan suunnitelma
-kansioon. Sekä suunnitelmatekstiä varten että kuvaa varten on olemassa esimerkit suunnitelma
-kansiossa.
Huomioitavaa:
- Kuvan pikselikoon tulee olla enintään 1920 x 1080 pikseliä.
- Kuvan tiedostokoon tulee olla enintään 500 kilotavua (500 kB).
voiko tän tehdö ihan resurssien hallinnan kautta eli siirtää sen kuvan vain kansioon?
Kyllä kuvan voi siirtää myös resurssienhallinnan kautta oikeaan kansioon. -AJL
—7.2 Komentorivi tai Git Bash (suositus, Windows, macOS, Linux)
Siirry cd
-komentoja käyttämällä harkkatyökansioosi ja anna seuraavat kaksi komentoa:
git add --all
git commit -m "kuvaava viesti miksi muutokset on tehty"
Ensimmäinen komento lisää kaikki muokatut tiedostot ns. index/stage-alueelle, ja seuraava komento tekee varsinaisen tietovarastoon tallentamisen.
On tärkeää, että aina add
-komennon jälkeen tarkistat git status
-komennolla mitä tiedostoja tietovarastoon on menossa. Älä lähetä tietovarastoihin suuria tiedostoja.
Mikäli et halua lähettää tietovarastoon kaikkia muutoksia, vaan esimerkiksi vain yhden tiedoston, laita --all
-option tilalle haluamasi tiedoston nimi:
git add TIEDOSTONNIMI (hakemistoineen, /-viiva hakemistomerkkinä)
Jotkut pitävät parempana luetella kukin lisättävä tiedosto erikseen ensinmainitulla komennolla. Kummassakin tavassa (all
-vipu, tai kukin tiedosto erikseen) on puolensa.
Huomaa, että .gitignore
-tiedosto sisältää tiedot sellaisista tiedostoista, joita ei lähtökohtaisesti viedä versiohallintaan. Jos kuitenkin ehdottomasti haluat lisätä tällaisen, esimerkiksi .jar
-päätteisen tiedoston, niin silloin on käytettävä -f
-optiota, jolla pakotetaan lisäys. Esimerkiksi:
git add -f kerho.jar
Toinen vaihtoehto on erikseen sallia vastava jar
lisäämällä .gitignore
-tiedostoon rivin .jar
perään rivi:
!kerho.jar
Joissakin lähteissä index/stage-tilaan lisäämisestä käytetään verbiä stage tai staging.
8. Tehtyjen muutosten lähettäminen etävarastoon (push)
Tässä vaiheessa paikalliseen tietovarastoon lähetetyt muutokset lähetetään etävarastoon.
Tämä vaihe tehdään joka kerta kun olet tehnyt muutoksia koodiin tai muihin tiedostoihin. Älä unohda tehdä tätä työskentelyn päätteeksi. Muutoin tiedot jäävät vain paikalliseen tietovarastoon.
8.1 Komentorivi tai Git Bash (Windows, macOS, Linux)
Siirry harjoitustyökansioosi ja anna komento
git push
Ensimmäisellä kerralla sinulta kysytään käyttäjätunnusta ja salasanaa. Anna käyttäjätunnus lyhyessä muodossa Anonymous
ilman @-merkkiä ja loppuosaa. Salasana on sama jota käytät JYUNET-verkossa. Mikäli annat salasanan väärin, joudut muokkaamaan kirjautumistietojasi, ks. kohta 12.1.
Mac-käyttäjät huomatkaa, että salasana on KIRJOITETTAVA vaikka sen kohdalla näkyisi avaimen kuva. Kun salasanaa kirjoitetaan, ei näyttöön tule mitään. Lopuksi on painettava enter. Jos tässä tulee virhe, niin gitlab-salasana on poistettava avainnipusta.
“Mikäli annat salasanan väärin, joudut muokkaamaan kirjautumistietojasi, ks. kohta x.x.” #-Mitenkäs tämä onnistuu kun terminal antaa “remote: HTTP Basic: Access denied”
—Kokeilepa tuolla Push ei onnistu (Access denied)
-kohdassa olevaa ongelmanratkaisua. -AJL
9. Muutosten hakeminen etävarastosta paikalliseen varastoon (pull)
Kun joku toinen (tai sinä jollain toisella tietokoneella) on muuttanut tiedostoja ja pushannut muutokset etävarastoon, niin muutokset tulee hakea omalle koneelle. Yhteistyöskentelyssä on syytä aina työskentelyä aloittaessa antaa pull
-komento.
9.1 Komentorivi tai Git Bash (Windows, macOS, Linux)
Siirry hakemistoon, johon olet kloonannut projektin (ks. clone
) ja anna komento:
git pull
Tässä kohti voi tulla kysymys siitä että miten pullin haluaa jatkossa toimiva. Ohj1 kurssin osalta toimiva vaihtoehto voisi olla
git config pull.rebase false
Lue tästä lisää esimerkiksi StackOverflowsta.
10. Huomioitavaa
10.1 Tiedostojen koko
Versionhallintajärjestelmä ei sovi suurten tiedostojen tallennukseen. Älä lähetä versiohallintaan esimerkiksi suuria kuva-, musiikki- tai videotiedostoja. Myöskään käännetyt ohjelmat eivät kuulu versiohallintaan. Täydennä tarvittaessa .gitignore
-tiedostoa.
10.2 Älä laita salaisuuksia versiohallintaan
Älä lisää projektisi commiteihin mitään salaista, kuten salasanoja tai henkilötietoja. Vaikka poistaisit tiedon seuraavassa commitissa, se jää Gitin projekti-historiaan, ja on löydettävissä julkaisun jälkeen.
11. Tapoja käyttää Git:iä
Aluksi ehdottomasti suositeltavin tapa on Git ja komentorivi.
Kaikkia alla mainittuja tapoja (työkaluja) voit kuitenkin käyttää ristiin. Kannattaa kokeilla eri tapoja. Mikroluokista löytyy ainakin komentorivityökalut, Eclipse sekä TortoiseGit.
- Git ja komentorivi (Windows, Linux ja macOS)
- Git ja Eclipse (Windows, Linux, macOS; nykyisin valmiina Eclipsen mukana)
- SmartGit (Windows, Linux, macOS)
- Fork (Windows, macOS)
- TortoiseGit (Windows)
- GitHub Desktop (Windows, macOS)
- Gitiä voi käyttää myös Windows Subsystem for Linuxin läpi.
Asenna näistä kohdista ainakin komentoriviin liittyvät asiat. Voit asentaa myös muita jos siltä tuntuu.
Gitin yksi oleellinen ero esimerkiksi SVN:ään on se, että varastoista (repository) voi olla useita kopioita lokaalisti ja etänä. Lokaalivarasto voidaan kopioida etävarastoon (remote repository
) ja sieltä edelleen toiseen lokaaliin varastoon. Lisäksi etävarastojakin voi olla useita. Tämän takia komentoja on enemmän svn:ään verrattuna.
Gitissä on 4 tärkeää "tilaa", joiden välillä tietoa liikutetaan: working directory
, index/stage
, local repository
ja remote repository
. Alla olevassa kuvassa on esitetty tärkeimmät komennot tähän liikutteluun. Kaikista tärkeimmät niistä punaisilla nuolilla. Kuvassa keltaisella on merkitty omassa koneessa olevia tiloja ja sinisellä viitataan edellisen kuvan palvelimeen.
11.1 Git termejä:
repository
= (tieto)varasto, paikka jossa versioitava tieto tallennetaan, voi olla lokaali (local
) tai etä (remote
), kumpiakin voi gitissä olla useita.local repository
on käytännössä hakemistossa oleva.git
-hakemisto. Repository koostuu loogisesti "commiteista", jotka muodostavat kokoelman projektin eri vaiheista, haaroista ja tageistä. Näin mihin tahansa commitoituun kohtaan voidaan viitata tai palata.fork
= projektista tehty "kopiohaara", joka elää omaa elämäänsä (tällä kurssilla). Fork ei ole Gitin toiminto, mutta useat ulkoiset Git- palvelimet (kuten GitHub ja GitLab) tarjoavat tämän toiminnon.origin
= lyhenne käytettävän etävaraston osoitteelle (remote repository
)project
= jokin selkeä projekti, joka tähtää esimerkiksi jonkin yhden ohjelmatuotteen tekemiseenworking directory
= työhakemisto (workspace joissakin dokumeteissa), lokaalin koneen työhakemisto (kaikki tiedostot ja versiot löytyvät tämän alla olevasta .git -hakemistosta, jos ne on koneelle haettu (fetch))index
= varastoon seuraavalla commitilla siirrettävien tiedostojen luettelo (versioitavien, staging area joissakin lähteissä, koska tiedosto laitetaan "näytille"). Käytännössä tiedosto.git/index
.master
= projektin päähaara, joka pyritään pitämään toimivana koodina
Vaativampaan käyttöön ja viimeistään Ohjelmointi 2 -kurssilla tarvittavia termejä:
branch
= kehityshaara jossa kehitetään uutta koodia. Kehityshaaroja voi olla useita. Kun koodi on hyväksi todettu, se voidaan yhdistää (merge
) päähaaraan.tag
= jäädytetty haara (esimerkiksi ohjelman tietty versio), jota ei aktiivisesti kehitetä, mutta johon voi tulla esimerkiksi tietoturvapäivityksiäHEAD
= viite aktiivisen haaran "päähän" tietyssä lokaalissa
Kurssilla käytettäviä Git-komentoja:
git config --global user.name "Anonymous"
git config --global user.email "None"
git clone https://gitlab.jyu.fi/Anonymous/ohj1ht.git .
git status # tätä komentoa kannattaa käyttää ahkeraan vaikka joka välissä
git log # samoin tätä, kunhan opit lukemaan sen sisältöä
# tee tarvittavia muutoksia
git add --all
git commit -m "Vaihe 1, kuvat"
git push # kaverin pitää tämän jälkeen tehdä kotona tehdä git pull
git pull
12. Ongelmia?
Ongelmia...
Kohta 6.1 git clone komennon jälkeen antaa tälläisen: fatal: destination path ‘.’ already exists and is not an empty directory.
VL: Sun pitää olla tyhjässä hakemistossa tekemässä tuo!
—Ongelma: Git ei anna viedä mitään repoon (push ei onnistu). Antaa virheilmoituksen:
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'https://gitlab.jyu.fi/NIMI/ohj1ht.git'

Huomaa, että virheilmoitus voi näyttää hieman erilaiselta riippuen siitä käytätkö komentoriviä vai jotain muuta Git-asiakasohjelmaa.
Syy: Olet kirjautumisikkunassa kirjoittanut käyttäjätunnuksesi tai salasanasi väärin.
Korjaus Windows: Tarkistetaan käyttäjänimi ja kirjoitetaan salasana uudelleen.
- Avaa Control panel (ohjauspaneeli).
- Valitse 'User accounts' (käyttäjätilit).
- Valitse 'Manage your credentials'.
- Valitse 'Windows credentials'.
- Laajentamalla gitin kohtaa, pitäisi päästä muokkaamaan asetettuja käyttäjänimeä ja salasanaa.
Korjaus Mac: Sama homma macOS:ssa (??): https://help.github.com/en/github/using-git/updating-credentials-from-the-osx-keychain
Mulla ei tuolla Generic-listalla edes näy mitään gitejä. Mikä vaihe on jäänyt siis tekemättä?
Oletko siis jo tehnyt otsikoiden 3-7 toimet, ja otsikon 8 push-komennolla tulee tämä ongelma? -JuhoK
—git clone
komennon jälkeen antaa tälläisen:
fatal: destination path ‘.’ already exists and is not an empty directory.
Korjaus: Kun tehdään clone, pitää olla tyhjässä hakemistossa
Poista projektin hakemistosta .git
-kansio. (Huom. älä poista ylätason hakemistosta.) Piilotetu kansiot eivät välttämättä näy resurssienhallinta-ikkunassa (Finder yms.). Komentorivillä tuon poisto onnistuu esim
rm -rf .git
13. Lisätietoa kiinnostuneille
- Gitin käyttö Ohjelmointi 2 -kurssilla
- Git reference: Git-yhteisön ylläpitämä dokumentaatio Git-komennoille.
- A curious tale - from snaphots to git - tämä ja sen jatko-osa kannattaa lukea, ne selvittävät hyvin Gitin ideaa.
- Pro Git book: Git-yhteisön ylläpitämä Git-kirja.
- Git - Tutorial / Lars Vogel
- Git Handbook
- git - the simple guide
- Helsingin yliopiston Git-kurssi
- ohshitgit - ratkaisuja yleisiin virhetilanteisiin (osittain humoristisia)
- git cheatsheet
Mullakaan ei auta salasanan korjaaminen tai kredentiaalin poistaminen. Itselläni myös ilmoittaa, että “ou won’t be able to pull or push project code via SSH until you add an SSH key to your profile”.
Ohjeiden kohdassa 6 sinun olisi pitänyt kloonata HTTPS-osoitteella, eikä SSH-osoitteella. Helpointa on nyt ottaa muuttamasi tiedostot talteen kotikoneellasi, ja poistaa koneeltasi GitLabista kloonaamasi kansio. Sitten kloonaat sen uudestaan koneellesi ohjeiden mukaisesti HTTPS-osoitteella. -JuhoK
—These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.