-
Notifications
You must be signed in to change notification settings - Fork 1
Viikon 3 paikanpaalla tehtavat
Tutustumme tänään versionhallintaan.
- tab-complete
- terminaalin tabit
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.
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
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.
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.
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ä.
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.
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ää
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
- 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
- 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
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