View on GitHub

git101

Git-opas Haaga-Helian opiskelijoille

Git 101 git-logo

Git-opas Haaga-Helian opiskelijoille.
Auttaa alkuun Gitin käytön kanssa!

Sisällysluettelo

  1. Mikä on Git ja mihin sitä tarvitaan?
  2. Git:n asennus
  3. Komentorivin käyttö
  4. Git-komentoja
  5. Repositoryn luonti omalle koneelle
  6. Miten viedä muutokset omasta repositorystä etärepositoryyn
  7. Hiukan Githubista
  8. Haarat ja miksi niitä tarvitaan
  9. Merge conflict! Mitä tapahtui, mitä teen?
  10. Muita huomoita
  11. Commit-viesteistä
  12. Mikä ihmeen Github?
  13. SSH-avaimen generointi
  14. Github Students-pack
  15. Lisää Git-hosting-palveluista
  16. Muita hyödyllisiä linkkejä

1. Mikä Git on ja mihin sitä tarvitaan?

Git on versionhallintajärjestelmä. Versionhallinnalla tarkoitetaan palvelua, joka säilyttää koodia, eli toisin sanoen varmuuskopioi sitä. Versionhallinnan avulla voidaan muutosten tekemisen jälkeenkin palata aiempiin versioihin, jos esim. jotain menee pieleen. Koodin lisäksi versionhallinnan avulla tehdyt muutokset on helppo dokumentoida. Git on ilmainen ja hajautettu, eli siinä ei ole minkäänlaista keskitettyä palvelinta. Jokainen Git-tietovarasto on itsenäinen.

1.1 Git:in historia

Git:in on kehittänyt suomalais-amerikkalainen ohjelmistoinsinööri Linus Torvalds, joka tunnetaan myös Linux kernelin kehittämisestä. Hän kehitti Git:in Linux kernelin versiohallintaa varten. Git julkaistiin ensimmäisen kerran 7. huhtikuuta 2005. Viimeisin vakaa versio Git:istä julkaistiin 17. helmikuuta 2020.

2. Git:n asennus

Git:n käyttämiseksi Git-ohjelmiston on oltava asennettuna tietokoneella, jolla sitä halutaan käyttää. Git-ohjelmiston asentamiseen löytyy useita eri ohjeita. Alla Git:n omat ohjeet.

Git lataus
Git asennusohjeet

2.1 Konfigurointi

Jotta Git:in käyttö olisi mahdollisimman helppoa ja tehokasta, se kannattaa konfiguroida käyttämään tietynlaisia asetuksia ja työkaluja. Konfiguroinnin avulla Git saadaan toimimaan sillä tavalla kuin itse, tai projektitiimi haluaa.

Konfigurointikomentoja löytyy lukusia, jotka kaikki löytyy komennolla:

2.1.1 Käyttäjätiedot

Jokaiseen versionhallintaan talletettavaan muutokseen tallennetaan sen tehneen käyttäjän nimi ja sähköpostiosoite. Git-ohjelmiston asentamisen jälkeen olisikin hyvä asettaa käyttäjätiedot komennoilla:

<username> ja <email> kohdat korvataan omalla nimellä ja sähköpostilla. Käyttäjätiedot tarvitsee asettaa vain kerran tietokoneelle. –global -tarkentimella tiedot asetetaan siten, että asetukset ovat tietokoneen käyttäjäkohtaiset. Halutessaan voi myös tallentaa käyttäjätietoihin tässä oletus-editorin konfliktien ratkomista varten. Tätä komentoa käyttäen editori avautuu automaattisesti, kun mergessä on konflikti:

2.1.2 Tekstieditori

Git-ohjelmistoa käyttäessä tulee esiin tilanteita, joissa on tarve käyttää tekstieditoria. Ohjelmiston asentamisen jälkeen oletusarvoinen tekstieditori on Vi. Vi:n käyttäminen voi tuntua haastavalta (ohjeita tosin löytyy esim täältä), joten Git-ohjelmistossa on mahdollista vaihtaa tekstieditoria komennolla:

Tekstieditoriksi voi yrittää asettaa varmaan minkä tahansa ohjelman. Perusteelliset ohjeet eri editorien asettamiseksi löytyy täältä.

3. Komentorivin käyttö

Käyttöliittymä on tapa kommunikoida tietokoneen kanssa. Nykyään suurin osa ihmisistä on tottunut graafiseen käyttöliittymään, jossa tietokoneen kansioihin siirrytään kaksoisklikkaamalla kansion kuvaketta, ohjelmat suoritetaan klikkaamalla ohjelman kuvaketta ja niin edelleen.

Komentorivi, komentoliittymä tai terminaali (englanniksi command line tai terminal) on tekstikäyttöliitymä. Teksikäyttöliittymässä kansioiden välillä siirtyminen, ohjelmien suorittaminen jne tapahtuu kirjoittamalla komentoja ja antamalla näppäinyhdistelmiä.

Komentoliittymässä ajetaan tyypillisesti komentotulkkia. Käyttäjä kirjoittaa komentoliittymään (ts komentoriville tai terminaaliin) käynnistettävän ohjelman nimen tai komentotulkin sisäisen komennon mahdollisine parametreineen ja painaa syöttöpainiketta, jolloin komentotulkki käsittelee käskyn ja tulostaa vastineen näytölle (tai suorittaa ohjelman).

Komentotulkkeja on useita ja on tärkeää huomata, etteivät kaikki komennot toimi kaikissa tulkeissa. Ehkä tärkeintä on tietää, että Unixin kaltaisissa käyttöjärjestelmissä (Linux, Mac) on eri oletus-tulkki kuin Windows-käyttöjärjestelmissä.

git for windows asennuksen yhteydessä asennetaan Bash-emulaattori, jossa käytetään Unix-shell -komentoja. Tämä siis mahdollistaa bash-komentojen käyttämisen myös Windows-käyttöjärjestelmissä.

HUOM! Kaikki bash komennot ei toimi Git Bashissa

Yksinkertaisuuden vuoksi, tässä oppassa tullaan keskittymään nimen omaan bash-komentoihin ja kaikki esitellyt komennot toimivat myös Git Bashissa. Git-komentoja ei käsitellä tässä luvussa, ne löytyvät luvusta 4

3.1 Komentorivin käynnistäminen

Jos tietokoneeseen on asennettu git for windows, Git Bash:n saa avattua klikkaamalla missä tahansa hakemistossa (kansio) hiiren oikealla näppäimellä ja valitsemalla Git Bash Here. Klikkaus käynnistää komentoliittymän, jonka työhakemisto (tästä myöhemmin lisää) on se hakemisto, johon hiiren oikealla näppäimellä klikattiin.

MacOS tietokoneessa terminal löytyy Finderistä:

Applications>Utility>Terminal

tai painamalla cmd + space (avaa Spotlight Search) ja kirjoittamalla terminal.

Ubuntussa (ja ilmeisesti useissa muissa Linux-käyttöjärjestelmissä) komentorivin saa auki painamalla CTRL + ALT + T.

HUOM! Jos käyttää Visual Studio Code-ohjelmaa, on hyvä tietää, että siitä löytyy integroitu terminaali. Terminaalin saa näkyviin kirjoittamalla Command Palette:en (aukeaa painamalla F1) terminal ja valitsemalla View: Toggle Integrated Terminal.
Integroidusta terminaalista tulee tarkastaa, mikä komentotulkki on käytössä.

Komentorivi näyttää käynnistymisen jälkeen Git-Bashissä seuraavalta:

<tietokoneen-nimi>@<käyttäjä> MINGW64 ~<hakemisto>
$

ja terminal MacOS:ssä seuraavalta:

<tietokoneen-nimi>:<hakemisto> <käyttäjä>$

Vaikka erojakin on, on hyvä huomata, että molemmista löytyy lähes sama informaatio, ehkä tärkeimpänä <hakemisto>, jolla tarkoitetaan nykyistä työhakemistoa (tästä lisää myöhemmin). Jos <hakemisto>n tilalla on pelkkä ~ -merkki tarkoittaa tämä, että nykyinen hakemisto on käyttäjän oletushakemisto (kotihakemisto).

HUOM! Molemmissa komentoriveissä viimeinen merkki on $. Tätä ei siis tarvitse itse kirjoittaa komentoriville, vaikka se saattaa jossain ohjeissa olla kirjoitettu ennen annettavaa komentoa

3.2 Työhakemisto

On tärkeää ymmärtää, että komentorivia käyttäessä työskennellään aina jossain työhakemistossa (ts working directory tai kansio). Kaikki annetut komennot suoritetaan tässä työhakemistossa ellei toisin komenneta.

Esimerkiksi komennon git init suorittaminen luo paikallisen tyhjän repositorion sen hetkiseen työhakemistoon.

Työhakemistoa ei tule sekoittaa kotihakemistoon. Kotihakemisto on hakemisto, jossa oletusarvoisesti sijaitsee käyttäjän asetustiedostot ja muut omat tiedostot. Kotihakemistoa kuvataan komentorivillä (myös Git Bash) usein merkillä ~.

3.3 Komennot

Komennot annetaan komentoriville muodossa:

command param1 param2 param3 … paramN

jossa:

Komennon vaihtoehtoina (options) voidaan esimerkiksi antaa tarkennuksia, miten komento suoritetaan ja argumentteina esimerkiksi mille tiedostolle komento suoritetaan.

Komentorivin komentojen käyttö ei välttämättä vaadi suurta järjestelmän tuntemusta, sillä komennot ovat usein lyhennyksiä selväkielisistä englanninkielisistä sanoista, ja niille on yleensä saatavilla käytönaikainen ohje komennoilla help tai man.

HUOM! man komennolla avataan parametrina annettavan komennon man-sivu, josta pääsee pois painamalla q

Esimerkki: Haluan käyttää komentoa cd, jolla siirrytään työhakemistosta toiseen, mutta en ole täysin varma, miten komentoa käytetään. Kirjoitan siis komentoriville

help cd

ja painan entteriä. Komentotulkki suorittaa tällöin komennon help parametrilla cd ja tulostaa jotain seuraavan laista:

cd: cd [-L|-P] [dir]
    <Hirveä määrä tekstiä>
    ...
    <Ja vielä usella rivillä :( >

Tulostuksen ensimmäisellä rivillä on ns ‘synopsis’ komennon käytöstä. Toisin sanoen siinä lukee, mitä optioita ja mitä argumentteina voi antaa komennon parametreina. taas kerrotaan, mitä mikäkin parametri tekee.

HUOM! Kaikille komennoille ei löydy help komennolla apua, eikä Git Bash tue man -komentoa, mutta ongelmatilanteissa kannattaa kokeilla helpin antamista komennon parameterina (ei siis komentona). Esimerkiksi help ls komennon antaminen ei tulosta neuvoja, mutta ls --help tulostaa.

HUOM2! Toinen vaihtoehto on etsiä esimerkiksi googlesta bash <komento> manual

Komentorivin komennoista ja käytöstä löytyy lisää ohjeita internetistä, ihan suomeksikin.

Tässä bash komentoja fiksusti kategorisoituna

Tässä bash manuaali

3.3.1 Yleisiä komentoja

Nykyisen työhakemiston saa selville komennolla

pwd

print working directory.

Työhakemistossa olevat tiedostot ja alihakemistot saa selville suorittamalla komennon

ls

ls -komennon voi suorittaa myös esimerkiksi vaihtoehdolla (option) -a, jolloin listataan myös tiedostot ja kansiot, jotka alkavat . merkillä (‘piilotetut tiedostot/kansiot’).

Esimerkiksi git init -komennolla luodaan .git hakemisto, joka ei näy pelkällä ls -komennolla, mutta näkyy suorittamalla ls -a.

Komentoa voi myös käyttää antamalla sille argumenttina hakemisto, jonka tiedostot halutaan listata. Esimerkiksi suorittamalla ls -a /c -komento, saadaan listattua kaikki tiedosto ja hakemistot, jotka sijaitsevat /c -hakemistossa (ts c-asema).

Nykyistä työhakemistoa vaihdetaan komennolla

cd

change directory

HUOM! Ilman argumentteja annettaessa komennon suorittaminen vaihtaa työhakemistoksi käyttäjän kotihakemiston.

Yleensä komennolle kuitenkin annetaan argumenttina se hakemisto, jonka halutaan olevan uusi työhakemisto. Argumentin hakemisto voidaan antaa joko täydellisenä polkuna (absolute path) tai suhteellisena polkuna (relative path). Esimerkiksi, jos työhakemistoksi halutaan vaihtaa C:\Users\Git-user\Documents, voidaan käyttää mistä tahansa työhakemistosta komentoa: cd /C/Users/Git-user/Documents TAI jos nykyinen työhakemisto on C:\Users\Git-user antamalla komento: cd Documents.

4. Yleisimpiä git-komentoja

4.1 Muita git komentoja

5. Ensimmäisen repositoryn luonti omalle koneelle

Avaa Bash-komentokehote kansiossa, josta haluat tehdä repositoryn tai siirry oikeaan kansioon komennolla cd <kansio>

Voit myös luoda Bashin kautta kansion johon haluat reposirotyn tehdä komennoilla mkdir <kansion nimi> jonka jälkeen siirtyä kansioon komennolla cd <kansio>

Anna sitten seuraavat komennot:

  1. git init
  2. git add .
  3. git commit -m 'Ensimmäinen commit'

«««< HEAD

5.1 Olemassa olevan repositoryn kloonaaminen omalle koneelle

Useasti projektien etä-repository on keskitetty yhteen paikkaan, jolloin yleisin tapa saada repository myös omalle paikalliselle koneelle on kloonata se. Kuten paikallisen repositoryn luominen, myös kloonaaminen on kertaluonteinen tapahtuma. Kloonattu repository tuodaan paikalliseen koneeseen aina kansion sisällä, jolloin sille ei tarvitse välttämättä luoda oma kansiotaan.

Helpoin tapa kloonata etä-repository on painaa projektin GitHub-sivulla vihreää nappia “clone or download” ja kopioda siinä annettu URL. Tämän jälkeen avaa Git Bash ja anna komento:

git clone <repo url>

5.1.1 Repositoryn kloonaaminen omalle koneelle käyttäen SSH protokollaa

Jossain tapauksissa etä-repository vaatii SSH-avainta suorittaakseen kloonauksen onnistuneesti. Git kuitenkin onneksi tukee muutamia verkkoprotokollia, kuten SSH protokollaa, jonka avulla tiedot voidaan antaa yhdessä komennossa. Luvusta 11 löydät enemmän tietoa SSH-protokollasta ja miksi sitä käytetään.

Etä-repositoryn kloonaaminen käyttäen SSH protokollaa tapahtuu hieman eri tavalla kuin yllä mainitussa komennossa. Komennossa käyttäjän täytyy antaa GitHub-URL:in sijasta SSH URL, jolloin komento on mallia:

git@HOSTNAME:USERNAME/REPOSITORYNAME.git

6. Miten viedä muutokset omasta repositorystä etärepositoryyn

  1. git remote add origin https://github.com/user/example.git
  2. git push origin master
    • komento vie paikallisen master-haaran origin-repoon (origin on etärepositoryn oletusnimi) TAI
      git push --all jolloin kaikki paikalliset haarat viedään. Jos ensimmäisellä kerralla käytät laajenninta -u (=–set-upstream) haaran etärepository on asetettu oletukseksi ja komennoksi riittää pelkkä git push

7. Hiukan Githubista

Git itsessään on vain komentorivillä toimiva ohjelma, joten sen käytön helpottamiseksi on kehitetty lukuisia eri graafisia käyttöliittymiä. Niistä Github on ainakin tällä hetkellä käytetyin, ja omien raporttiensa mukaan se on virallisesti “maailman suurin lähdekoodi-verkkopalvelu”. Kun siis puhutaan Gitin käytössä etärepositoreista, niin niillä tarkoitetaan Githubissa (tai Githubin kaltaisessa palvelussa) säilytettävää ohjelmakoodia. Githubilla on kuitenkin nykyään myös muita palveluita, esimerkiksi erilaisia työkaluja projektinhallinnan helpottamiseksi.

8. Haarat ja miksi niitä tarvitaan

Haarat branch ovat mainio keino pitää saman projektikokonaisuuden eri kehityisvaiheita erillään toisistaan kuitenkin pitäen ne samassa repositoryssä. Yleisimpiä haarakehyksiä ja haarojen käyttöä erilaisissa projekteissa löytyy tästä linkistä.

Haarojen tarkoitusperä on siis pitää esimerkiksi kehityksessä olevan sovelluksen valmiit testatut osat master haarassa ja toteuttaa testausta sekä jatkokehitystä esimerkiksi development haarassa. Lisäksi voidaan hyvin käyttää omia haaroja ei niin tärkeille komponenteille tai ideoille. Tällä tavoin ohjelmistokehittäjä voi turvata ettei mikään erillinen osuus projektissa vaikuta mihinkään muuhun, ennenkuin hän näin päättää ja yhdistää merge haaran masteriin.

Ennen kuin siirryt haaroista toiseen, muista aina commitoida muutoksesi! Staging-alue ei ole riippuvainen mistään haarasta, joten jos jätät staging-alueella olevat muutokset committoimatta ja vaihdat haaraa, nämä samat muutokset säilyvät staging-alueella. Muutokset siirtyvät haaraan vasta commit-komennon jälkeen.

Yleisesti ottaen masterissa ei koodata mitään, ja se toimiikin vain loppusijaintina täydelliselle koodille, jota ei tulla enää muuttamaan.

Luvusta 4 löydät erilaisia git-komentoja, joilla luoda haaroja, navigoida eri haarojen välillä sekä yhdistää haaroja.

8.1 Hyvä haaroitusmalli

Hyvässä haaroituksessa master haarassa julkaistaan vain valmiita versioita. Develop haarassa on kaikki valmiit muutokset, mitä seuraavaan julkaisuun ollaan lisäämässä. Kaikki kehitys tapahtuu feature haaroissa, joista valmiit ominaisuudet lisätään develop haaraan. Kun develop haara on vakaa se voidaan yhdistää master haaraan, ja silloin tulee uusi versio ohjelmasta, mikä kuuluu tagata.

git-malli

9. Merge conflict! Mitä tapahtui, mitä teen?

Merge conflicteja tapahtuu silloin kun yhdistettävissä haaroissa on keskenään ristiriitaisia muutoksia ja git ei tiedä, mitkä niistä tulisi sisällyttää committiin.

Tällöin on käsin ratkaistava konfliktit ja valittava pidettävät koodit. Git ilmoittaa, missä kansiossa konflikti on tapahtunut ja toisensa poissulkevat commitit on eroteltu tiedostossa:

Tarkista kumpi otetaan käyttöön, jonka jälkeen poista konflikti merkit, tallenna tiedostot ja commitoi koodi. Lisää tietoa merge konfliktien korjaamiseen löytyy [täältä] (https://www.atlassian.com/git/tutorials/using-branches/merge-conflicts)

10. Muita huomioita

Valmiita .gitignore malleja löytyy tästä linkistä

Esim.

11. Commit-viesteistä

Commit-viestin tarkoituksena on kommentoida, miksi jokin muutos on tehty ja mitä sillä on tarkoitus saada aikaan. Hyvin laaditut commit-viestit ovat arvokasta informaatiota muille kehitystiimin jäsenille ja myöskin kehittäjälle itselleen, jos pitää jäljittää jälkeenpäin, miksi on päädytty tietynlaisiin ratkaisuihin tai muutoksiin. Jotta git log -tulosteen seuraaminen olisi helpompaa, olisi hyvä, että viestit on laadittu systemaattisesti tietyn käytännön mukaisesti, jota kaikki kehitystiimin jäsenet noudattavat.

Committiin tulevien muutosten tulisi muodostaa looginen kokonaisuus, josta on helppo kirjoittaa kuvaava viesti. Selkeästi koostetut commitit helpottavat muutosten perumista tai lisäämistä muiden työhön. Commit-viestien käytännöistä kannattaa sopia projektin alussa kaikkien tiimiläisten kesken.

Hyvän commit-viestin säännöt:

Esimerkki hyvästä commit-viestistä

12. Mikä ihmeen Github?

GitHub on verkkosivusto, joka tarjoaa paikan Git-versionhallintaa käyttäville ohjelmakehitysprojekteille. Git itsessään on komentoriviohjelma, jolle Github tarjoaa erään graafisen käyttöliittymän. Gitin lisäksi GitHub tarjoaa projekteille toimintoja kuten bugienseurannan, kehitystoiveet, tehtävien hallinta ja wiki.

Git-versionhallintaa toteutetaan siis paikallisesti, mutta viemällä projektin Githubiin tai vastaavaan palveluun saadaan toteutettua Gitillä etärepository, jonka voi halutessa jakaa muiden käytttöön.

Huhtikuun 2016 GitHubin raportin mukaan sillä oli yli 14 miljoonaa käyttäjää ja yli 35 miljoonaa ohjelmavarastoa. Tämä tekee siitä maailman suurimman lähdekoodi-verkkopalvelun.

Tutustu Githubiin

13. SSH-avaimen generointi

SSH-protokollan avulla voit muodostaa yhteyden etäpalvelimiin ja palveluihin ja todentaa ne. SSH-avaimet ovat tapa tunnistaa luotettavat tietokoneet ilman salasanoja. Jotta kirjautuminen onnistuisi, tarvitsee ensin luoda julkinen (public) ja salainen (private) avain. Sitten julkinen avain kopioidaan kohdekoneelle.

ssh-keygen -komennolla voit luoda avainparin. Komennon jälkeen varmennetaan tiedostojen tallennuspaikka sekä sen jälkeen sille voi määritellä salasanan.

14. Github Students-pack

Github tarjoaa opiskelijoille Students-packin ilmaiseksi. Students-pack sisältää useita kehittämistyökaluja opiskelijoille. Esimerkiksi opiskelijan paketista löytyy DigitalOcean, joka tarjoaa palvelimia. Opiskelijan paketti tarjoaa $50 credittiä uusille käyttäjille. Opiskelijan paketista löytyy myös useita ilmaisia kursseja.

Liittyminen on helppoa. Omaan github-käyttäjään pitää liittää oppilaitoksen sähköposti. Liittyminen onnistuu helposti täältä: Github Students-pack

15. Lisää Git-hosting-palveluista

GitHub ei ole ainoa etärepositoriovaihtoehto. Muistetaan, että Git on teknologia, joka mahdollistaa versionhallinnan ja että palvelut, kuten GitHub tai GitLab hyödyntävät Git teknologiaa. Voimme valita mieltymystemme mukaan tarpeeseen sopivan palveluntarjoajan. Sama asia voidaan toteuttaa molemmissa palveluissa ja eri palveluntarjoajat tarjoavat hieman erilaisia toiminnallisuuksia.

Suosituimmat Git hosting-palveluntarjojat

Linkki videoon, jossa vertaillaan GitHubia ja GitLabia

16. Muita hyödyllisiä linkkejä

Gitin perusteet 50 minuutissa
GitHubin YouTube kanava
Git Handbook
Git Cheat sheet
Resourses to learn Git
Git 101, with Exercises
Git Exercise