Skip to content

Viikon 3 paikanpaalla tehtavat

Matti Luukkainen edited this page Nov 11, 2016 · 36 revisions

KESKEN, ÄLÄ TEE

Tutustumme tänään versionhallintaan.

viimeviikosta ...

  • tab-complete
  • terminaalin tabit

Versionhallinta

Mitä tarkoitetaan versionhallinnalla? Lainaus sivulta https://www.atlassian.com/git/tutorials

Version control systems are a category of software tools that help a software team manage changes to source code over time. Version control software keeps track of every modification to the code in a special kind of database. If a mistake is made, developers can turn back the clock and compare earlier versions of the code to help fix the mistake while minimizing disruption to all team members.

Vaikka ylläoleva puhuu versionhallinnasta ohjelmistotiimien yhteydessä, kannattaa versionhallintaa käyttää oikeastaan yhdenkin hengen projekteissa ja muunkinlaisen materiaalin kuin koodin hallinnoimiseen. Esim. tämän kurssin kaikki materiaali on versionhallinnassa.

Nykyään suosituin versionhallintaohjelmisto on git. Tutustumme tänään gitin alkeisiin.

HUOM tämä tehtävä tulee tehdä Linuxilla tai Macilla, jolle on asennettu Git. Helpointa lienee tehdä tehtävä laitoksen koneella. Git kannattaa joka tapauksessa asentaa omalle koneelle. Gitin voi asentaa myös windowsille.

Gitin alkeet

konfiguraatioita

Avaa terminaali.

Määrittele gitille oma nimesi sekä käyttämäsi email-osoite antamalla komennot:

 git config --global user.name "Your Name"
 git config --global user.email [email protected]

Varmista, komennolla git config -l, että määrittelyt menivät oikein.

Määritellään vielä git käyttämään sopivia värejä komennolla git config --global color.ui

repositorio

Tee nyt sopiva hakemisto gitin harjoittelua varten ja mene hakemistoon

Luodaan hakemistosta paikallinen git-repositorio antamalla komento git init

Git ilmoittaa alustaneensa repositorion:

mluukkai@melkinpaasi:~/otm_viikko3$ git init
Initialised empty Git repository in /home/ad/fshome4/u4/m/mluukkai/Linux/otm_viikko3/.git/

Jos katsot hakemiston sisältöä komennolla ls -la huomaat, että hakemiston sisälle on ilmestynyt hakemisto .git. Git käyttää luotua hakemistoa pitääkseen kirjaa repositorioon talletetuista tiedostoista.

HUOM koska hakemiston nimi (.git) alkaa pisteellä, ei komento ls näytä sitä oletusarvoisesti. Parametri a näyttää myös pisteellä alkavat tiedostot ja hakemistot.

Luo hakemistoon tiedosto nimeltään tiedosto.txt, esim. komennolla touch. Luotuasi tiedoston, suorita komento git status:

mluukkai@melkinpaasi:~/otm_viikko3$ touch tiedosto.txt
mluukkai@melkinpaasi:~/otm_viikko3$ git status
On branch master

Initial commit

Untracked files:
  (use "git add ..." to include in what will be committed)

	tiedosto.txt

nothing added to commit but untracked files present (use "git add" to track)
mluukkai@melkinpaasi:~/otm_viikko3$

Git ilmoittaa, että on olemassa tiedosto, joka on tilassa untracked, eli tiedostoa ei ole lisätty versionhallinnan pariin.

Kuten komennon tuloste kertoo, tiedoston lisääminen gitin alaisuuteen (...to include in what will be committed) tapahtuu komennolla git add tiedosto.txt

Suorita lisäys ja sen jälkeen komento git status:

mluukkai@melkinpaasi:~/otm_viikko3$ git add tiedosto.txt
mluukkai@melkinpaasi:~/otm_viikko3$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached ..." to unstage)

	new file:   tiedosto.txt

Git kertoo nyt, että tiedosto.txt on niiden muutosten joukossa, jotka voidaan commitoida.

commit

Commitoimisella tarkoitetaan tiedostojen ja niihin liittyvien muutosten tallentamista git-repositorioon.

Suoritetaan commitointi antamalla komento git commit -m"tiedosto.txt luotu"

mluukkai@melkinpaasi:~/otm_viikko3$ git commit -m"tiedosto.txt luotu"
[master (root-commit) 0e12cfa] tiedosto.txt luotu
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 tiedosto.txt

Suorita jälleen komento git status

mluukkai@melkinpaasi:~/otm_viikko3$ git status
On branch master
nothing to commit, working directory clean

Git ilmoittaa, että working directory clean, eli hakemistosi on samassa tilassa kuin git-repositorio.

working directory, index/staging, repository

Kun teet muutoksia hakemistosi alla oleviin tiedostoihin (tai hakemistoihin), kohdistuvat muutokset working directoryyn eli työhakemistoon. Tee jokin muutos tiedostoon tiedosto.txt (esim. komennolla gedit-käynnistyvällä graafisella editorilla tai komentoriviltä toimivalla nano-editorilla) sekä luo hakemistoon uusi tiedosto, nimeltään toinen.txt

Suorita jälleen git status

mluukkai@melkinpaasi:~/otm_viikko3$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

	modified:   tiedosto.txt

Untracked files:
  (use "git add ..." to include in what will be committed)

	toinen.txt

no changes added to commit (use "git add" and/or "git commit -a")

Git ilmoittaa nyt, että uusi tiedosto on untracked ja että aiemmassa tiedostossa on muutoksia, jotka eivät ole staged for commit.

Toimitaan ohjeen mukaan eli lisätään muutokset ja uusi tiedosto commitoitavien joukkoon. Molempien tiedostojen yhtäaikainen "addaaminen" onnistuu komennolla git add .

Tarkistetaan taas tilanne koennolla git status

mluukkai@melkinpaasi:~/otm_viikko3$ git status On branch master Changes to be committed: (use "git reset HEAD ..." to unstage)
modified:   tiedosto.txt
new file:   toinen.txt

Sekä muutos että uusi tiedosto ovat nyt valmiina committoitavaksi.

Committointi onnistuu komennolla git commit. Kuten edelliselläkin kerralla, annetaan komennolle parametrina commit-viesti, eli merkkijono, joka kuvaa mitä muutoksia uusi commit tuo edelliseen nähden:

git commit -m"muutos ja lisäys"

Tarkasta committoinnin jälkeen jälleen tilanne komennolla git status.

Tiedostot ja niihin tehdyt muutokset voivat siis olla gitin suhteen kolmessa eri tilassa. Aluksi tiedostot (tai niihin tehdyt muutokset) ovat vain working directoryssä ja git ei noteeraa niitä ennen kun ne lisätään komennolla git add. Tämän jälkeen tiedostot ovat valmiina commitoitavaksi. Gitin terminologian mukaan valmiina committoitavaksi olevat tiedostot ovat staging-alueella. Komento git commit siirtää stagingissa olevat muutokset muutokset repositorioon eli luo uuden commitin.

Seuraava kuva havainnollistaa sitä, miten tiedoston muutosten tilat vaihtuvat git-komentoja tekemällä.

git commit

Jokainen komennon git commit suorittaminen siis synnyttää repositorioon uuden commitin, eli uuden "tilan". Komennolla git log on mahdollista nähdä mitä committeja repositorio sisältää:

mluukkai@melkinpaasi:~/otm_viikko3$ git log
commit 50c786fdc41104cdfe3e60845df40820feb33d40
Author: Matti Luukkainen 
Date:   Mon Nov 7 18:18:19 2016 +0200

    lisäys ja muutos

commit 0e12cfa5de9186eb948ac446c6b3f240ff11189d
Author: Luukkainen Matti 
Date:   Mon Nov 7 16:11:33 2016 +0200

    tiedosto.txt luotu
mluukkai@melkinpaasi:~/otm_viikko3$

Gitin logi kertoo jokaisen commitin ajan, tekijän, viestin ja tunnisteen. Tunnisteita käytetään, jos on esim. tarvetta palata johonkin vanhan commitin tilaan.

lisää harjoittelua

Muista käyttää komentoa git status mahdollisimman usein!

  • Luo tiedosto kolmas.txt.
  • Lisää se commitoitavaksi ja commitoi.
  • Muuta tiedostojen toinen.txt ja kolmas.txt sisältöä ja commitoi muutokset
  • Luo hakemisto stuff ja sen sisälle jokin tiedosto.
  • Lisää muutokset committoitavaksi ja committoi.
    • Huomaa, että hakemiston lisääminen riittää, sen sisältämät tiedostot tulevat automaattisesti lisätyksi.
  • Katso miltä git logi näyttää

gitk

Giting committeja voi tarkastella myös graafisella gitk-komennolla (OSx:lle vastaava työkalu on gitx). Suorita komento repositoriossa:

Vasemmalla yläkulmassa näet kaikki commitit. Uusin tilanne ylimpänä. Uusimman commitin nimi on master. Klikkaamalla commitia, näet muissa ikkunoissa commitiin liittyviä tietoja. Oikealla alakulmassa näet ne tiedostot, jotka ovat muuttuneet commitissa (jos valinta on patch) tai ne tiedostot, joita repositoriossa oli olemassa commitin aikana (jos valinta on tree). Vasemmassa alakulmassa pystyt tarkastelemaan commitin tiedostoihin tekemiä muutoksia. Vainnat ovat hieman hämäävät sillä ne toimivat eri tavoin riippuen oikean puolen moodista.

  • Kopioi tiedostoon tiedosto.txt jostain paljon tekstiä ja commitoi tiedosto.
  • Poista nyt osa tiedoston tekstistä ja lisää tiedostoon hieman lisää tekstiä.
  • Päivitä gitk:n näkymä (file/update) ja katso miten muutokset näkyvät (kaksi ylintä committia)
    • valitse oikeasta alakulmasta patch ja vasemmasta diff.
    • näin näet commitin aiheuttamat muutokset diff-muodossa
    • jos oikealta on valittuna tree näkyy vasemmalla puolella (valinnasta riippumatta) tiedostonjen commitin aikainen tilanne

tiedoston poistaminen ja uudelleennimentä

  • Poista tiedosto _toinen.txt
  • suorita git status
  • commitoi muutos
    • poista ensin tiedosto gitin alaisuudesta komennolla git rm
  • varmista komennolla git status että kaikki on niinkuin kuuluukin
  • muuta tiedoston tiedosto.txt nimeksi eka.txt
    • uudelleennimentä tapahtuu komennolla mv
  • suorita git status
  • commitoi muutos

git add -p

  • Tee jotain muutoksia tiedostoihin eka.txt ja kolmas.txt
    • tee sekä lisäyksiä että poistoja
  • lisää ne commitoitavaksi komennolla git add -p
    • git näyttää nyt jokaisen tekemäsi muutoksen patch-muodossa ja pyytää varmistamaan lisätäänkö muutos committoivaksi
    • hyväksy painamalla y ja enter
  • tee tiedostoihin tehtyjen muutosten commitoitavaksi lisääminen aina komennolla git add -p, näin pääset tarkastamaan, että muutokset ovat juuri ne mitä oletat olevasi lisäämässä
  • Huomaa, että kokonaan uudet tiedostot eivät siirry committoitavaksi komennolla git add -p

muutosten peruminen

.gitignore

On tilanteita, joissa emme halua tiedostojen menevän versionhallinnan alaisuuteen. maven-projektien hakemisto target, joka sisältää maven-komentojen aikaansaannokset, on tyypillisesti hakemisto, jota emme halua versionhallinnan pariin.

Git-repositorion juureen sijoitettavassa .gitignore-tiedostossa voidaan määritellä, mitä tiedostoja ja hakemistoja git jättää huomioimatta eli ignoroi

  • Muuta viime viikon paikanpäällä tehtävässä tekemäsi hakemisto Unicafe git-repositorioksi
    • komento git init
    • muista tässäkin myös komennon git status aktiivinen käyttö!
  • Luo repositorion juureen tiedosto .gitignore ja määrittele siihen ignoroitavaksi hakemisto target ja tiedosto nbactions.xml
    • luo tiedosto joko geditillä tai nanolla
    • tiedoston sisällöksi tulee
target
nbactions.xml
  • kun nyt teet komennon git status pitäisi tuloksen olla seuraava:
mluukkai@melkki:~/Unicafe$ git status
On branch master

Initial commit

Untracked files:
  (use "git add ..." to include in what will be committed)

	.gitignore
	pom.xml
	src/
  • eli vaikka hakemistossa on tiedosto nbactions.xml sekä alihakemisto target, ei git niitä huomioi
  • lisää hakemistoon sisältö repositorioon
  • commitoi
  • tarkasta tilanne komennolla git status
  • kokeile nyt suorittaa maven-komentoja, jotka tekevät muutoksia hakemistoon target
    • esim. testien suoritus ja testiraportin generointi
  • tarkasta komennolla git status, että git ei välitä muutoksista
  • tee jokin muutos projektin koodiin ja tarkasta että git huomaa tilanteen
  • commitoi muutoset

Github (siirtyy ehkä viikolle 5/6)

remote add

push

git clone