: Versionhallinta
Versionhallinta
Ohjelmankehityksessä käytetään aina versionhallintaohjelmistoa. Tällä saavutetaan kiistattomia etuja isoissa ohjelmissa kuten versioissa talkaisin palaaminen ja sitä kautta virheiden paikallistaminen. Ohjelmoinnin harjoitustyössä saatavat edut ovat seuraavat:
- ohjelmien säilytyspaikka eli koodivarasto (eng. repository) määritellään vain yhteen paikkaan laitoksen järjestelmässä,
- koodivarasto sisältää kaikki tähän mennessä tehdyt ohjelmat siistissä järjestyksessä ja
- opiskelija voi käyttää erilaisia koneita ja erilaisia käyttöjärjestelmiä ohjelmiensa muokkaamiseen missä paikassa tahansa (esim kotona ja laitoksella).
Ohjelmoinnin harjoitustyössä versionhallinnan toteuttamiseen käytetään NetBeans-ohjelmointiympäristöä ja Subversion- eli svn-versionhallintaohjelmaa. Nämä ohjelmat on asennettu laitoksen koneisiin. Kurssilla käytetään vain versionhallinnan perustyökaluja, joilla toteutetaan seuraavat kolme tapahtumaa.
- Luodaan yksi koodivarasto.
- Kopioidaan koodivarastosta haluttu ohjelmointiprojekti muokattavaksi ja lisäiltäväksi.
- Hyväksytään paikallisesti muokattu projekti päivitettäväksi koodivarastoo (muutokset kopioidaan koodivarastoon).
Näistä ensimmäinen tehdään vain kerran ja tapahtumia 2-3 toistetaan aina kun ohjelmointiprojektia muokataan.
Koodivaraston luominen
Jokainen opiskelija luo itselleen koodivaraston laitoksen koneille terminaallisovelluksella. Ensin kirjaudutaan linux-systeemiin sisälle minkä jälkeen käynnistetään Terminal-ohjelma (Applications/Accessories/Terminal). Ohjelma avaa komentorivinäkymän käyttäjän kotihakemistoon ja käyttäjä antaa komennot
mkdir svn cd svn svnadmin create repository
mitkä luovat opiskelijalle oman koodivaraston nimeltään svn/repository
ohjelmointiprojekteja varten. Tähän koodivarastoon voi tallentaa useita eri ohjelmointiprojekteja opiskelun aikan. Tämän jälkeen käynnistetään NetBeans.
Jotta NetBeans osaisi käyttää versionhallintaa ja tallentaa istunnon aikana muokatut ja tehdyt ohjelmat koodivarastoon, sille täytyy kertoa missä svn-ohjelma sijaitsee käytettävässä koneessa ja missä juuri tehty yleinen koodivarasto sijaitsee. Laitoksen Ubuntu-systeemissä svn-ohjelman osoite on /usr/bin/svn
, mikä täytyy kertoa NetBeans-ohjelmalle valikon Tools/Options/Versioning/Subversion kautta (valitse lopuksi OK-nappula.):
Kopioidaan koodivarastosta haluttu projekti muokattavaksi
Tämän jälkeen kopioidaan koodivaraston sisältö (tässä vaiheessa tyhjä) checkout-käskyllä (Team/Subversion/Checkout) käytettävään tietokoneeseen. Koodivaraston symbolinen linkkisijainti on edellisen esimerkin perusteella laitoksen koneissa paikassa
file:///fs/home/kayttaja/svn/repository
Checkout-käsky kysyy tätä polkutietoa (Team/Subversion/Checkout) (valitse Next).
Tämän jälkeen tullaan valikkoon (Next-valinnan kautta)
missä tehdään koodivarastosta kopio hallintarakenteineen käytettävään koneeseen valitsemalla Finish. Nyt systeemi on valmis ohjelmien muokkaamiselle ja uusien ohjelmien lisäämiselle.
Hyväksytään paikalliset muutokset
Kun ohjelmoija on valmis lopettamaan työt hän valitsee hiirellä projektin, jonka haluaa tallentaa eli tähän projektiin tehdyt paikalliset muutokset hyväksytään koodivarastoon, ja avaa hiiren oikealla painikkeella aukeavasta valikosta Subversion/Commit, jolloin juuri luodut tuotokset menevät koodivarastoon ja hän voi lopettaa työskentelyn (vrt alla oleva kuva).
Tässä valitaan siis commit-nappula. Tästä eteenpäin ohjelmoija tekee aina ensin checkout-operaation hakeakseen projektinsa takaisin muokattavaksi ja muokattuaan niitä tarpeeksi hän tekee lopuksi commit-operaation. Näin checkout-operaatio vastaa projektin avaamista ja commit projektin tallentamista, eikä käsiteltäviä tiedostoja tarvitse kopioida edestakaisin usb-tikulla tai jolloin muulla medialla.
Huom! Jos ohjelmoija käyttää Team/Commit tai Team/Subversion/Commit valikoita muokkausten hyväksyntään niin silloin vain ns. aktiivisena oleva tiedosto (tai projekti) kopioidaan koodivarastoon. On siis tärkeää huomata, että jos sinulla on muokattavana enemmän kuin yksi tiedosto tai yksi projekti, niin systeemi saattaa tallentaa vain yhden tiedoston käytettäessä Team-valikon komentoja tuottaen ikävän yllätyksen kun seuraavalla kerralla jatkaa työtä! (muokkaukset eivät ole tallentuneet)
Kotikoneen käyttö
NetBeansin asentaminen on omalle koneelle on helppoa. Windows-ympäristössä NetBeansiin on jopa lisätty svn, jonka lataus tapahtuu automaattisesti kun käyttäjä suorittaa ensimmäisen kerran checkout-komennon: svn-ohjelman paikkaa ei siis tarvitse määritellä Windows-systeemissä. Muissa käyttöjärjestelmissä täytynee ladata jokin sopiva svn-ohjelmisto. NetBeans-ympäristössä koodivarastoon saadaan yhteys helpoimmin käyttämällä plink-ohjelmaa (osana putty-ilmaisohjelmaa
) jolloin koodivaraston osoitteeksi tulee
svn+ssh://melkki.cs.helsinki.fi/fs/home/kayttajatunnus/svn/repository
ja ns. tunnelikomenoksi
plink -l kayttajatunnus -pw salasana
Tarkennuksi
Edellä esiteltyjä komentoja checkout ja commit voidaan käyttää komentorivitasolla ohjeen http://svnbook.red-bean.com/ mukaisesti ja itseasiassa käyttäjän tarvitsisi käyttää vain kerran checkout-komentoa jokaista käytettävää konetta kohden (koodien lisäksi koneeseen luodaan tietorakenne jolla hallitaan koodien yhteneväisyyttä) ja sen jälkeen tässä koneessa riittäisi päivitys-komento (update), jolla päivitettäisiin koneeseen luotua kopiota koodivaraston nykyisen tilan perusteella. Päivitys-komento on oleellinen kun projektia kehittää useampi ohjelmoija yhtäaikaa. Päivitys-komennolla otetaan kopio muiden tekemistä muunnoksista koodivarastoon (ne muutokset joille muut ohjelmoijat ovat tehneet commit-käsky) ja jos nämä muutokset ovat yhteensopivia omien muutosten kanssa (ohjelma toimii) niin voidaan suorittaa oma commit-käsky, jolloin muut näkevät tehdyt muutokset käyttämällä update-käskyä. Update siis osaa yhdistää omat muutokset, joille ei ole annettu commit-käskyä, muiden commit-käskyllä toteutettuihin muutoksiin. Checkout ei osaa tätä vaan kaikille omille muutoksille täytyy tehdä commit ennenkuin voi tehdä checkout-käskyn uudestaan. Kuten nähdään, projektien hallinnointi usean tekijän yhtäaikaisena ohjelmoitintyönä tarvitsee monimutkaisia hallinnointimenetelmiä, joiden käyttö on onneksi yksinkertaista ainakin perustilanteissa.
Muutama linkki verkosta löytyviin ohjeisiin (verkkohaulla löytyy paljon lisää...).