Git-versiohallinta Ohjelmointi 1 -kurssilla
Tässä dokumentissa kerrotaan miten harjoitustyön suunnitelmaa, lähdekoodia sekä muita tiedostoja (mm. kuvat) käsitellään Git-versiohallinnan avulla. Lue tämä ohje huolellisesti.
Asenna kehitystyökalut ja Git-versiohallinta ennen tämän ohjeen käyttämistä.
Harjoitustyön suunnitelman viemisestä versiohallintaan on myös videotutoriaali, ks. https://youtu.be/MQJ69rmd1sw. Huomaa, että videolla projektin alku tehdään käyttäen Visual Studiota, mutta voit käyttää myös Rideria.
Kevään toteutuksilla harjoitustyön suunnitelma kirjoitetaan Gitiin suunnitelma.md
-tiedostoon; tarkemmat ohjeet ovat yllä olevalla videolla.
Syksyn toteutuksilla suunnitelma kirjoitetaan TIMiin, ja README.md-tiedostoon laitetaan suunnitelman linkki. Kuvat laitetaan GitLabiin. Suunnitelman saa tehdä myös README.md-tiedostoon. Muuten video osittain pätee syksynkin kurssilla
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.
GitLab ja GitHub ovat internetissä toimivia palveluita, joissa Git-muotoisia varastoja (engl. repository) voidaan säilyttää.
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. Pro tip: Voit hyödyntää versiohallintaa opinnoissa muutenkin, esimerkiksi tutkielmien kirjoittamisessa.
2. Muistilista
Alla on lyhyt muistilista tyypillisimmistä tällä kurssilla vastaan tulevista tilanteista gitin kanssa. Lue kuitenkin ensin 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 paikallisen varaston tilasta, muun muassa mitä tiedostoja on muutettu, poistettu tai 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.
stage = näyttämö, vaihe; ajattele, että add
-komennolla valitset tai kokoat yhteen tiedostot seuraavaa vaihetta varten
commit = sitoutua; ajattele, että commit
-komennolla sitoudut tekemiisi muutoksiin
Komennot push
ja pull
sitten siirtävät muutokset, joihin olet sitoutunut, muiden saataville (push), tai hakevat muiden tekemeät muutokset sinulle (pull)
Kun yritän saada git push komennolla komentoriviltä gitlabiin korjaukset tallennettua saan tämän herjauksen aina "To https://gitlab.jyu.fi/hesalone/ohj1ht.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'https://gitlab.jyu.fi/hesalone/ohj1ht.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details." Olen kloonannut gitlabin asiat koneelleni jo kertaalleen (ei anna tehdä uudelleen) mutta en tiedä mikä tämä ongelma on tai miten ratkaista sitä.
—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 git-varastoosi 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 sisään.
- JY: Avaa Ohj1-kurssin pohjaprojekti selaimessa:
https://gitlab.jyu.fi/tie/ohj1/2024k/ohj1ht (kevään toteutus)
https://gitlab.jyu.fi/tie/ohj1/2024s/ohj1ht (syksyn toteutus, myös avoin ja lukiot) - 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
Kevään kurssi: Tallenna URL-osoite Omat tiedot -sivulle. Syksyn kurssi: Tallenna URL-osoite suunnitelmasi -sivulle niihin kohti, joissa viitataan Gitiin.
Näet oman etävarastosi URL-osoitteen gitlab.jyu.fi-palvelussa kohdasta Clone -> Clone with HTTPS. Käytä oman etävarastosi URL-osoitetta tulevissa ohjeissa.
Tämä teksti kannattaa lukea, kun ymmärrät, mitä commit, push ja pull tarkoittavat.
Fork on itsenäinen kopio olemassa olevasta git-varastosta. Fork säilyttää aikaisemman historian (commitit), ja jatkaa omaa elämäänsä irrallaan alkuperäisestä projektista. Tähän kopioon (fork-projektiin) tehtävät commitit eivät mene alkuperäiseen projektiin, eivätkä alkuperäisen projektin commitit tule kopioon.
Käytännön elämässä fork-projekti tehdään usein tilanteessa, kun kehittäjä haluaa syystä tai toisesta erottaa oman työnsä alkuperäisen projektin työstä. Kehittäjä voi esimerkiksi olla pettynyt projektin suuntaan ja haluaa jatkaa itsenäisesti eteenpäin. Yksi esimerkki tästä ovat striimausohjelmistot OBS Studio ja Streamlabs Desktop: OBS Studio on maksuton, vapaan lähdekoodin (Gnu GPL v2) projekti. Streamlabs forkkasi OBS-projektin vuonna 2014, ja on siitä eteenpäin tuonut omaan forkkiinsa yhä enemmän kaupallisia ominaisuuksia, kun taas OBS jatkaa edelleen ilmaisohjelmiston periaatteella.
Tällä kurssilla forkkaaminen mahdollistaa opiskelijalle helpon tavan perustaa oma git-repo GitLabiin, ja toisaalta forkin ansiosta opettaja voi samalla jakaa opiskelijoille projektin pohjakoodit (suunnitelmien pohjat jne.) valmiiksi.
Älä sotke fork-termiä branch
-termiin. Brancheja käytetään Gitissä aivan eri tarkoitukseen, vaikka myös branch usein suomennetaan "haaraksi".
Fork-projektista on viite alkuperäiseen projektiin, siis siihen, josta fork otettiin, jotta alkuperäisestä projektista käsin voidaan seurata mitä haaroja siitä on tehty.
Lisätietoa kiinnostuneille: https://help.github.com/en/github/getting-started-with-github/fork-a-repo
4. Oikeuksien antaminen muille ryhmäläisille
Jos teet harjoitustyön yksin, voit ohittaa tämän kohdan.
Forkin tekijä antaa oikeudet muille ryhmäläisille. Tämä tapahtuu projektin vasemman reunan kohdasta Members
. Syötä kohtaan GitLab member or Email address
ryhmän jäsenet yksi kerrallaan.
Huom! Jäsenten tulee olla tätä ennen olla kirjautunut gitlab.jyu.fi-palveluun 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 näkyy "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 liittää jokaiseen muutokseen tiedot muutoksen tekijän nimestä ja sähköpostiosoitteesta. Tästä syystä git-ohjelmalle täytyy antaa nimi ja sähköposti.
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
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 käyttöjärjestelmästi mukainen käyttötapa.
Avaa
git bash
taicmd
-komentorivi.Tee uusi hakemisto, jonka haluat menevän versionhallintaan (ts. jossa harjoitustyösi tulee sijaitsemaan tietokoneella jossa työskentelet).
Omalla koneellasi hyvä kansionimi voisi olla esimerkiksi (levykirjain saattaa olla muukin)
C:\kurssit\ohj1\ht
Mikroluokassa kansio voi olla esimerkiksi
C:\MyTemp\Anonymous\ht
Paina tarkasti mieleen kansion sijainti, sillä tulet tarvitsemaan sitä useita kertoja harkkatyötä tehdessä!
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.git .
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. Paina tarkasti mieleen kansion sijainti, sillä tulet tarvitsemaan sitä useita kertoja harkkatyötä tehdessä!
Anna komentoriviltä tässä kansiossa komento. Huomaa välilyönti ja piste lopussa, nekin on annettava.
git clone https://gitlab.jyu.fi/Anonymous/ohj1ht.git .
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).
7. Tiedostojen vieminen paikalliseen tietovarastoon (add, commit)
Kun tiedostoja lisätään, muokataan tai poistetaan, tulee kaikki nämä muutokset lisätä paikalliseen 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).
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 edellä mainitulla 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.
Avaa Pääte (macOS), Git Bash (Windows) tai muu komentorivi. Siirry harjoitustyökansioosi cd-komentoja käyttämällä ja anna sitten komento
git push
Ensimmäisellä kerralla sinulta kysytään käyttäjätunnusta ja salasanaa. Valitse kirjautumisikkunassa muodoksi salasana.
Anna käyttäjätunnus lyhyessä muodossa Anonymous
ilman @-merkkiä ja loppuosaa. Salasana on se, jota käytät JY-verkossa.
Mikäli annat salasanan väärin, joudut muokkaamaan kirjautumistietojasi, ks. kohta 12.
MacOS-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.
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.
Siirry hakemistoon, johon olet kloonannut projektin (ks. clone
) ja anna komento:
git pull
Tässä kohti voi tulla kysymys siitä, että miten käyttäjä haluaa pull-komennon jatkossa toimivan. Ohj1-kurssin osalta toimiva vaihtoehto on
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 bin
, obj
ja vastaavat kansiot (sis. käännetyt ohjelmat ja muut IDE:n tuottamat käännöksen oheistiedostot) 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. Mikäli kuitenkin lähetit etävarastoon jotain, jonka haluat poistaa myöhemmin, se onnistuu esimerkiksi BFG Repo-Cleaner-työkalun avulla.
11. Tapoja käyttää Gitiä
Aluksi ehdottomasti suositeltavin tapa on käyttää Gitiä komentoriviltä. On olemassa kuitenkin myös graafisia ympäristöjä Gitin käyttämiseen. Myös IDEissä on nykyään varsin asialliset Git-asiakasohjelmistot (eli suomeksi käyttöliittymä Git-komentojen käyttämistä varten), joskin jokainen on aina vähän omanlaisensa ja vaatii totuttelua. Kaikkia alla mainittuja 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.
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.
Etäsäilytykseen ei muutoksia kannata tallentaa jokaisen sitoutumisen jälkeen, vaan kokonaisuuksina sitten, kun on varma, että kaikki on kunnossa. Tarvittaessa on helpompi peruuttaa paikallisia muutoksia kuin etäsäilytykseen joutuneita muutoksia.
—12. Git termejä:
repository
(suom. säilytyspaikka, tietovarasto tai arkisesti "repo") = 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
(taiworkspace
) = työhakemisto, 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
.main
= projektin päähaara, joka pyritään pitämään toimivana koodina (aikaisemminmaster
)
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
commit = sitoutua, eli commit
-komennolla sitoudut tekemiisi muutoksiin tallentamalla ne varastoon.
Tuossa termi stage on verbi. Termi staging area tarkoittaa sitä paikkaa, mihin mihin muutokset kerätään (index). Sanoisin että muutokset koostetaan tai kasataan yhteen (stage) ja kun muutoksiin sitoudutaan allekirjoittamalla (commit) kooste, se siirtyy paikalliseen säilytyspaikkaan (varasto, local repository).
—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
13. Ongelmia?
Joskus käy niin että Gitissä tulee touhuttua jotakin mikä saa hommat ihan solmuun. Joihinkin probleemiin vastauksia voi löytyä täältä: https://ohshitgit.com/. Ko. saitin kielenkäyttö ei ehkä sovi perheen pienimmille mutta varsinaiset vinkit voivat pelastaa kiperistä tilanteista.
Joitain muita ongelmia on lueteltu alla.
Ongelma: Git ei anna viedä mitään etävarastoon (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 (vaihtoehto 1): Etävaraston url-osoitteesta puuttuu lopusta osa .git
.
Korjaus: Anna git bashissa / Päätteessä komento git remote -v
Jos fetch- ja push-urlien lopussa ei ole .git
-osaa, käy kopioimassa GitLab-palvelussa varastosi HTTPS-url-osoite, ks. kuva alla.
Anna sitten alla oleva komento, ja pasteta URL-kohtaan äsken kopioimasi osoite.
git remote set-url URL
Kokeile nyt tehdä git push.
Syy (vaihtoehto 2): Olet kirjautumisikkunassa kirjoittanut käyttäjätunnuksesi tai salasanasi väärin.
Korjaus Windowsilla: 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
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.) Piilotetut kansiot eivät välttämättä näy tiedostonhallinta-ikkunassa (macOS:lla Finder). Komentorivillä tuon poisto onnistuu esim
rm -rf .git
Syy: Kloonatessasi etävarastoa olet todennäköisesti valinnut SSH-osoitteen HTTPS-osoitteen sijaan.
Suositellaan, että otat tässä kohden työstäsi varmuuskopion.
Korjaus, tapa 1:
- Kopioi Gitlab-palvelusta (tai muusta palvelusta) tietovarastosi HTTPS-osoite.
- Avaa komentorivi.
- Siirry cd-komentoja käyttäen harjoitustyösi kansioon.
- Anna komentorivillä komento
git remote
. Näyttöön pitäisi tulostua tekstiorigin
. Mikäli tulostuu jotain muuta, korvaa seuraavassa kohdassaorigin
-sana sillä, mitä sinulle tulostui. - Anna komentorivillä alla oleva komento ja korvaa
UUSIOSOITE
kohdassa 1 kopioimallasi osoitteella
git remote set-url origin UUSIOSOITE
Korjaus, tapa 2: Jos tapa 1 ei toimi, voit tehdä uuden clonen uuteen kansioon käyttäen HTTPS-osoitetta, ja kopioida aikaisempaan kansioon tekemäsi muutokset tähän uuteen kansioon. Tämän jälkeen pitää tehdä add- ja commit-komennot uudestaan, sen jälkeen push pitäisi onnistua.
14. 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
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.