Hyppää sisältöön

Git-ohjeet

Hyödyllisiä linkkejä

Gitin käyttö projektissa

Työskentely perustuu seuraavaan toimintamalliin: a successful Git branching model.

Development-branchiin mergetään kaikki kehitysvaiheen muutokset. Kun development-branchin muutokset on yhdessä todettu hyviksi ja toimiviksi, se mergetään masteriin, joka on lopullinen, julkaisukelpoinen versio projektista.

Development-branch jaetaan tarpeen mukaan feature-brancheihin. Brancheja mergetään säännöllisesti developmentiin, jotta ajan tasalla olevat versiot ovat helposti eri kehitystiimien saatavilla.

Gitin konfigurointi

Määritä Gittiin sama käyttäjätunnus ja sähköposti kuin GitLabissa. Tiedot näkyvät jokaisen tekemäsi commitin yhteydessä.

Avaa komentorivi ja tarkista Gittiin määritetyt käyttäjätiedot:

$ git config --global --list

Päivitä käyttäjätietoja:

$ git config --global user.name "[name]"
$ git config --global user.email "[email address]"

Työskentelyn aloittaminen

Siirry haluamaasi kansioon ja kloonaa projektin repositorio komennolla git clone [url]:

$ cd your/development/folder
$ git clone https://gitlab.labranet.jamk.fi/path/to/repository.git

Siirry projektikansioon ja asenna tarvittavat moduulit:

$ npm install

 

Yleiset komennot

Näe nykyisen edistymisesi tila – missä branchissa olet, mitä tiedostoja on muokattu, mitä on lisätty staging-tilaan, missä mennään:

$ git status

Git add

Staging on eräänlainen välitila, jossa muutokset odottavat committiin paketointia.

Lisää yksi tai useampi työstämäsi tiedosto staging-tilaan:

$ git add [index.html] [styles.css]

Voit myös lisätä kaikki muutokset kaikista kansioista staging-tilaan komennolla:

$ git add .

Git commit

Luo staging-tilassa olevista muutoksista commit ja lisää siihen lyhyt ja ytimekäs kuvaus:

$ git commit -m "[descriptive message]"

Commit-viestien tulee olla:

  • Selkeitä ja kuvaavia, jotta projektin ulkopuolisetkin ymmärtävät, mitä commitissa tapahtuu
  • Pituudeltaan mielellään noin 50, enintään 72 merkkiä. Jos commitin muutokset eivät ole itsestäänselviä, commit-viestiin on mahdollista lisätä pidempi kuvaus (kts. ohje)
  • Aloitettu isolla kirjaimella ja verbillä käskymuodossa, ilman lopetuspistettä. "Fix spacing in search results", "Add styling to TreeNode component", "Improve footer icons". Tämä noudattaa Gitin generoimien committien kieliasua ja helpottaa commit-historian lukemista.

Massiivisen kokoisia committeja tulisi välttää ja pyrkiä committaamaan jokainen toiminto erikseen. Pienetkin muutokset viedään muille ryhmäläisille mahdollisimman aikaisessa vaiheessa, jotta vältytään konflikteilta. Erilaisia muutoksia voi oman harkinnan mukaan niputtaa samaan committiin, esimerkiksi ”Improve readability”, jossa on useampi typografiamuutos samassa.

Muokkaa viimeisimmän local commitin viestiä:

$ git commit --amend
amend-komento avaa VS Codessa editorin, jossa voit tarvittaessa lisätä committiin myös pidemmän kuvauksen.

Tarkastele kätevästi branchin commit-historiaa:

$ git log --oneline -n 5

-n-tagilla voidaan rajoittaa näytettävien committien määrää.

Git pull

Hae tiedot remoteen tehdyistä muutoksista ja yhdistä muutokset lokaaliin repositorioosi. Aiheesta löytyy hyödyllistä lisätietoa täältä.

$ git pull

Jos et ole varma pullaamisesta, voit pelkästään hakea tiedot kaikista remoten brancheihin tehdyistä muutoksista:

$ git fetch

Tämän jälkeen git status-komento antaa ajantasaisen tiedon siitä, onko remotessa uusia committeja.

Git push

Pushaa eli ”työnnä” muutokset remoteen muiden nähtäville ja työstettäväksi:

$ git push origin [branch]

Voit helpottaa pushaamista ajamalla seuraavan komennon:

$ git push -u origin HEAD

-u-tagi asettaa git push-komennolle oletuskohteeksi HEAD (eli branchin, jossa milloinkin olet).

Seuraavan kerran pushatessa riittääkin siis pelkästään:

$ git push

 

Branch-workflow

Branchin luominen

Seuraavalla komennolla näet mitä brancheja on tällä hetkellä saatavilla ja missä olet:

$ git branch

Siirry branchiin, josta haluat luoda uuden branchin ja varmista että se on ajan tasalla:

$ git checkout [branch]
$ git pull

Näin luot uuden branchin ja siirryt sinne:

$ git checkout -b [branchname]

Voit aina tarkistaa missä branchissa olet komennolla git status.

Branchien mergeäminen

Siirry esim. development-branchiin ja hae branchin uusin versio:

$ git checkout development
$ git pull

Sitten mergeä haluamasi branch developmentiin:

$ git merge [branchname]

Nyt voit siirtyä alkuperäiseen, mergettyyn branchiin takaisin:

$ git checkout [branchname]

Tai voit poistaa branchin, jos sitä ei enää tarvitse. Poista branch lokaalisti:

$ git branch -d [branchname]

Poista branch myös remote reposta:

$ git push origin --delete [branchname]

Pidä branchit ajan tasalla

Hae lokaaliin repositorioosi development-branchin uusin versio:

$ git checkout development
$ git pull

Siirry päivitystä kaipaavaan branchiin, pullaa tarvittaessa myös sen uusimmat muutokset remotesta ja mergeä sitten development siihen:

$ git checkout frontend
$ git pull
$ git merge development

Työnnä vielä ajan tasalle päivitetty branch remoteen:

$ git push

 

Ongelmatilanteet

Merge conflict

Yleensä merge conflict on helppo selvittää. Merge conflictin tullessa tärkeintä on selvittää mitä tiedostoja on muokattu ja mikä muokkaus on uusin. Muuttuneet tiedostot saa näkyviin tuttuun tapaan git status.

Katso conflictaavat tiedostot ja etsi tiedostosta rivit ”<<<<<<<< [branch]", jotka osoittavat, mistä muutos alkaa ja mihin se päättyy. Tee korjaukset ja poista "<<<<<<<<" -kommentit. Lisää korjatut tiedostot staging-tilaan (git add –A), committaa ne (git commit) ja pushaa ne (git push). Tämän jälkeen kaikki on kunnossa ja merge on tehty onnistuneesti.

Korjaa viimeisintä local committia

Unohtuiko commitista jokin muutos? Onko commitin viestissä virhe? Jos et pushannut muutoksia vielä remoteen, voit korjata asian.

Lisää tarvittavat muutokset staging-tilaan:

$ git add [index.html]

Lisää staging-tilan muutokset tuoreimpaan committiin:

$ git commit --amend

Komento avaa editorin, jossa voit vielä muokata commitin viestiä.

Tiedoston .gitignoraaminen

Kun .gitignorea päivitetään, .gitignore osaa ignorata vain tiedostot, joita ei ole aiemmin commitattu osaksi repositoriota. Tiedosto poistetaan repositoriosta (mutta säilytetään lokaalissa tiedostojärjestelmässä) komennolla:

$ git rm -r --cached [filepath]

Apua muihin ongelmatilanteisiin