Top Banner
Karri Kulmala CVS-versiohallinta Tietotekniikan LuK-tutkielma 16. helmikuuta 2004 Jyväskylän yliopisto Tietotekniikan laitos Jyväskylä
31

CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Sep 15, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Karri Kulmala

CVS-versiohallinta

TietotekniikanLuK-tutkielma16. helmikuuta 2004

Jyväskylän yliopisto

Tietotekniikan laitos

Jyväskylä

Page 2: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Tekijä: Karri KulmalaYhteystiedot: Sähköposti: [email protected]ön nimi: CVS-versiohallintaTitle in English: Version management with CVSTyö: Tietotekniikan LuK-tutkielmaSivumäärä: 30Tiivistelmä: Tässä tietotekniikan LuK-tutkielmassa perehdytään CVS-versiohallinta-ohjelmiston käyttöön ohjelmistoprojektien versiohallinnassa. Versiohallintaa käsi-tellään sekä yleisellä tasolla, että käytännön esimerkein.English abstract: This BSc-thesis approaches CVS-version management system frompractical point of view. The basis of version managament are also descripted.Avainsanat: CVS, versiohallinta, konfiguraationhallintaKeywords: CVS, Concurrent Versions System, version management, version cont-rol, configuration management

Copyright c© 2004 Karri Kulmala

Tekijä antaa kaikille luvan tehdä tästä tutkielmasta sisällöltään muuttamattomiakappaleita ja saattaa ne haluamallaan tavalla yleisön saataville. Muunlaisesta käy-töstä tulee neuvotella tekijän kanssa erikseen.

Page 3: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Sanasto

Versiohallintajärjestelmä Ohjelmisto, jonka avulla voi arkistoida ja käsitellä ohjel-mien tai muiden projektien eri versioita.

CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassakäsitellään. Perustuu RCS-järjestelmään laajentaen tämän ominaisuuksia tu-kemaan muutosten teon yhtäaikaisuutta (engl. concurrency).

SCCS Source Code Control System SCCS oli eräs ensimmäisistä tavoista lähdekoo-din hallintaa Unixilla.

RCS Revision Control System Versiohallintatyökalu, johon CVS perustuu. Alunpe-rin kehitetty SCCS-työkalun korvaajaksi.

Revisio “Muutosversio” (engl. revision). Jokaisella muutoskerralla kasvava tiedos-tokohtainen (versio)laskuri.

Versio Versio koostetaan tiedostojen eri muutosversioista.

Toimittaa Kuitata, (engl. commit, check in). Tehtyjen muutosten saattaminen versio-hallinta järjestelmän tietoon. Kasvattaa toimitetun tiedoston muutosversionu-meroa.

repository CVS:n tiedostopohjainen tietovarasto, johon tiedostot ja niiden muutos-historia tallennetaan.

CVSROOT Ympäristömuuttuja, jonka avulla CVS-ohjelmalle kerrotaan, mistä selöytää tietovaraston.

i

Page 4: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Sisältö

Sanasto i

1 Johdanto 1

2 Versiohallinta 12.1 Tarve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

3 CVS-versiohallintaohjelmisto 43.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.2 Terminologiaa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.3 Tekniikka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.4 Ominaisuuksista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 Versiohallinta käytännössä 94.1 Ennen versiohallinnan käyttöönottoa . . . . . . . . . . . . . . . . . . . 104.2 Projekti versiohallintaan . . . . . . . . . . . . . . . . . . . . . . . . . . 114.3 Työskentelymalli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.4 CVS-ohjelman käytöstä . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5 Apuohjelmia 175.1 Graafiset käyttöliittymät . . . . . . . . . . . . . . . . . . . . . . . . . . 185.2 www-liittymä . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

6 Yhteenveto 19

Viitteet 21

Liitteet

A Korvattavat avainsanat 22

B Asetustiedostoja hakemistossa CVSROOT 24

C SSH ja käyttäjän tunnistus julkisella avaimella 26

ii

Page 5: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

1 Johdanto

Tässä tutkielmassa tutustutaan CVS (engl. Concurrent Versions System) -versiohallin-taohjelmistoon, sekä sen käyttöön ja toimintaan. Koska tutkielman päätarkoitukse-na on antaa lukijalleen riittävät tiedot CVS-versiohallinnan käyttöön omissa projek-teissaan, on versiohallinnan perusperiaatteetkin esiteltävä.

Itse CVS-ohjelma on laajalti levinnyt, täysin ilmainen avoimen lähdekoodin oh-jelma, joka on julkaistu GNU GPL (engl. GNU General Public License) -lisenssin alai-sena. Lisäksi sitä käytetään monien vapaiden ohjelmistojen versiohallintajärjestel-mänä. Luonnollisesti mikään ei estä CVS:n käyttöä kaupallisissa projekteissa.

Koska CVS-versiohallintajärjestelmästä on olemassa kattava ohjeistus, joka toi-mii myös tämän tutkielman pääasiallisena lähdekirjallisuutena, ei tämä tutkielmayritäkään olla CVS-ohjekirja tai edes pikaopas, vaan tarkoituksena on koota yleis-kuva sen toimintaperiaatteista ja käyttömahdollisuuksista ja samalla pohtia hiemanversiohallintaan liittyviä kysymyksiä.

Tutkielma on jaettu osiin seuraavasti: Luvussa 2 käsitellään versiohallintaa ylei-sellä tasolla ja kerrotaan mitä hyötyä versiohallinnan käytöstä on. Varsinainen pe-rehtyminen CVS-ohjelmistoon aloitetaan luvussa 3. Käytäntö astuu kuvaa luvus-sa 4, jossa annetaan ohjeita eri versiohallintatoimenpiteiden suoritukseen ja esimerk-kejä CVS-ohjelma käytöstä. CVS-versiohallinnan käyttöä helpottavista apuohjelmis-ta kerrotaan luvussa 5. Yhteenveto tutkielman havainnoista tehdään luvussa 6. Tut-kielman lopussa on myös muutamia liiteitä, joihin on sisällytetty hyödyllisiä tietojasekä esimerkkejä CVS-versiohallinnan käyttöön liittyen.

2 Versiohallinta

Versiohallinnan avulla voidaan pitää kirjaa projektissa tapahtuvista muutoksista.Projekti voi olla ohjelmiston kehitystä, tietokoneavusteista suunnittelua, tietokone-järjestelmän asetustietojen ylläpitoa tai jokin muu aktiviteetti, jossa tehdään muu-toksia tietoihin ja tehdyt muutokset halutaan tallentaa niin, että tieto projektin ai-kaisemmista versioista säilyy. Muutosten yhteydessä kirjataan kenen toimesta, mik-si ja milloin muutokset on tehty.

2.1 Tarve

Versiohallintaa voi tehdä käsinkin, yksinkertaisimmin siten, että jokainen versio tal-letetaan omaan hakemistoonsa. Tällä tavalla toteutettu versiohallinta on työläs, hi-

1

Page 6: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

das ja erittäin virhealtis, koska inhimillinen tekijä on mukana liian voimakkaasti.Lisäksi tilankäyttö saattaa muodostua ongelmaksi vaikka jokainen versio pakattai-siinkin. Kunnollinen versiohallintajärjestelmä tallettaa vain versioiden väliset muu-tokset, jolloin tilankäyttö on huomattavasti tehokkaampaa. Parhaimmillaan versio-hallinnan käyttö on erittäin helppoa, kun versiohallinnan käyttö on integroitu kehi-tysympäristöön.

Työskentelyn yhtäaikaisuus

Kun ohjelmistoprojektin parissa työskentelee useita ihmisiä, eteen tulee väistämättätilanteita, joissa versiohallinasta on hyötyä. Esimerkiksi seuraavanlaisia:

Versiohallinnan käyttö poistaa ryhmätyössä usein ongelmallisen samanaikaistenmuutosten tekemisen. Kuvassa 1 on esitetty tilanne jossa samaa tiedostoa muuttaauseampi ihminen; mikäli he muuttavat tiedostoa samanaikaisesti, aloittaen kumpi-kin versiosta A, voi toinen kirjoittaa omat muutoksensa, version C, toisen muutos-ten, version B, päälle, jolloin vain versio C jää jäljelle. Koska kumpikin käynnisti edi-torin samanaikaisesti, jää jäljelle vain sen muutokset, joka tallettaa työnsä myöhem-min. Seurauksena tästä on ylimääräistä työtä, joka hidastaa projektin etenemistä jaheikentää lopputuloksen laatua.

Nykyaikaisessa ohjelmistoprojektissa ei voida olettaa, että projektin toteuttajattyöskentelisivät samassa paikassa. Saattaa olla, että projektia tehdään täysin eri puo-lilla maapalloa — toteuttajat eivät välttämättä ole koskaan edes nähneet toisiaan.Jotta projektin pysyisi hallinnassa, on versiohallintajärjestelmä tarpeellinen. Edellä-mainittu “muokkaa sinä nyt, niin minä muokkaan sitten” -tyylinen “versiohallinta”olisi silkkaa resurssien tuhlausta.

Versiohistoria

Mahdollisuus palata edelliseen versioon on hyödyllinen ominaisuus, kun toteutetutuudet ominaisuudet eivät toimi halutulla tavalla. Esimerkkinä tällaisesta tilanteestaon vaikeasti huomattavan ohjelmointivirheen korjaaminen — kokenutkin ohjelmoi-ja saattaa ajautua paniikinomaiseen tilaan, kun virheen löytäminen ei onnistukaanja muuttaa koodia turhaan sellaisista paikoista, joihin ei virheen kannalta olisi mi-tään syytä koskea. Tämän kaaoksen selvittämisessä on hyödyllistä, että aikaisempiversio on saatavilla ja verrattavissa työn alla olleeseen koodiin.

Versiohistoriasta on hyötyä myös pidemmällä tähtäimellä. Esimerkiksi tilantees-sa, jossa jo toimitetun tuotteen tietystä versiosta löytyy vika, joka halutaan korjata,versiohallinnasta voidaan hakea kyseinen versio. Tarvittavat korjaukset tehdään tä-

2

Page 7: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Kuva 1: Ryhmätyö ilman versiohallintaa

hän versioon ja tehdyt muutokset toimitetaan versiohallintaan vanhan version jat-keeksi.

3

Page 8: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

3 CVS-versiohallintaohjelmisto

Tässä luvussa laskeudutaan pehmeästi CVS-versiohallinnan maailmaan, aloitammekevyesti tutustumalla CVS:n syntyhistoriaan alaluvussa 3.1. Alaluvussa 3.2 on poh-dittu tutkielmassa käytettävää CVS-terminologiaa. Termien suomennokset vaihte-levat lähteissä suuresti, joten käytettävät suomennokset on syytä perustella.

Alaluvussa 3.3 tutustutaan CVS:n tekniikan saloihin. Myös CVS:n asiakas-palvelinmallia käsitellään luvussa 3.3. Eri tavat asiakkaan ja palvelimen väliseen yhteyden-pitoon käydään läpi vertaillen niiden ominaisuuksia keskenään. Yleisluontoiset oh-jeet asiakasohjelman asetuksista ja käyttökuntoon saattamisesta löytyvät tästä lu-vusta.

Muutamia CVS-versiohallintajärjestelmän ominaisuuksista kerrotaan tarkemminluvussa 3.4. CVS-versiohallintajärjestelmä ei ole täydellinen, siinä on puutteita joi-den vuoksi sitä jopa vieroksutaan. Myös vaihtoehtoisia järjestelmiä versiohallinnanhoitamiseksi on olemassa ja tällöin on ratkaistava mitä ominaisuuksia versiohallin-tajärjestelmältä halutaan. Luvussa 3.4 kerrotaan asioista, joita voidaan pitää CVS-versiohallintajärjestelmän puutteina. Tämän luvun pääasiallisia lähteitä ovat [1] ja[4].

3.1 Historia

Vuonna 1986 1 Dick Grune kirjoitti comp.sources.unix-ryhmään viestin[2], jon-ka alkuosa on tässä.

Subject: v06i040: CVS, an RCS front-end (cvs), Part1/2

Newsgroups: mod.sources

Approved: [email protected]

Submitted by: Dick Grune <seismo!mcvax!vu44!dick>

Mod.sources: Volume 6, Issue 40

Archive-name: cvs/Part1

This is CVS, Concurrent Versions System, a front end for RCS.

It supports the concurrent and independent use of an RCS directory

by several people. We have been using it for half a year now, on

various projects. It uses the RCS programs rcs, ci, co, rcsmerge

and rlog in such a way that you can do a multi-file commit, etc.

It is all shell scripts.

1Luvun nimeksi olisi sopinut myös “Esihistoria”.

4

Page 9: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Dick Grune

Vrije Universiteit

de Boelelaan 1081

1081 HV Amsterdam

the Netherlands

Viestin mukaan hän oli liittänyt ensimmäisen julkisen version CVS:stä. Alkuperäi-nen CVS oli joukko sh-kuoriohjelmalle kirjoitettuja ohjelmia, jotka mahdollistivatsaman RCS-versiohallintajärjestelmän hakemiston yhtäaikaisen käytön useille käyt-täjille.

Alkuperäisessä CVS:ssä käytetyt konfliktin ratkaisualgoritmit ja useimmat oh-jaustiedostomääritelmät olivat ilmeisen hyviä, sillä vuonna 1989 Brian Berliner käyt-ti niitä toteuttaessaan C-kielisen version CVS-versiohallintaohjelmasta. Berliner li-säsi CVS-ohjelmaan useita ominaisuuksia, jotka pääasiassa liittyivät ohjelmistojenjulkaisuversioiden hallintaan. CVS:n versio 1.0 julkaistiin marraskuussa 1990.

Jeff “Zoo” Polk muunsi CVS 1.2:n lähdekoodit luettavammaksi ja helpomminylläpidettäväksi C-koodiksi. Samalla hän paranteli huomattavasti CVS:n toiminnal-lisuutta. Tämän jälkeen kasvava joukko kehittäjiä on kantanut oman kortensa ke-koon CVS:n kehittämisessä, niin uusien ominaisuuksien, apuohjelmien kuin ohjei-den muodossa.

3.2 Terminologiaa

Tutkielmassa käytettävän CVS-terminologian suomennoksia on syytä perustella tar-kemmin, koska suomenkielinen terminologia ei ole vielä vakiintunutta.

“Repository”

Repository-sanan suora suomennos tarkoittaa tietovarastoa. Myös pelkkää varasto -ilmaisua on käytetty. Tämä tutkielma käyttää muodoista ensimmäistä.

“Version” ja “revision”

Selitys on peräisin lähteestä [3, Sivu 16]. CVS-järjestelmän dokumentaatiossa käy-tetään termejä englanninkielisiä termejä version ja revision kuvaamaan versionume-rointia CVS-järjestelmässä. Tässä LuK-tutkielmassa käytetään näiden sanojen suo-menkielisinä vastineina sanoja versio ja muutosversio.

Muutosversio on CVS:n sisäinen tiedostokohtainen “versionumero”, jokainentiedostolle tehtävä toimitus-operaatio kasvattaa muutosversionumeroa.

5

Page 10: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Versiolla tarkoitetaan projektin tuotoksen versionumeroa. Versio koostuu tiedos-toista, joilla kullakin on oma muutosversionumeronsa. Näin ollen kolmitiedostoisenprojektin versio 1.0 voi koostua tiedostoista, joiden sisäiset muutosversiot olivat sa-mana päivänä 1.4, 1.7 ja 2.36.

“Workspace” eli “sandbox”

Sekä työtila (engl. workspace) että hiekkalaatikko (engl. sandbox) tarkoittavat samaaasiaa, eli paikallisessa hakemistossa olevaa työkopiota tietovarastossa olevasta pro-jektista. Käyttäjä muokkaa aina tiedoston työkopiota paikallisessa hakemistossa jatehdyt muutokset päivittyvät tietovarastoon vasta, kun muutokset sinne toimite-taan.

3.3 Tekniikka

CVS-versiohallintajärjestelmän ydin on sen tietovarasto, johon se tallettaa kaikki tie-tonsa.

Tietovaraston rakenne

CVS nojaa tiedostopohjaiseen tietokantaan, jota nimitetään CVS-repositoryksi eliCVS:n tietovarastoksi (engl. repository). CVS-ohjelmisto säilyttää tietovarastossaantiedostojen sisällön, muutoshistorian, tiedon muutosten tekijöistä ja muutosten ajan-kohdista. Tietovarasto sijaitsee palvelinkoneella.

Kuten luvussa 3.1 mainittiin, CVS perustuu Revision Control System (RCS) -versiohallintajärjestelmään. CVS-tietovarasto koostuukin RCS-muotoisista tiedos-toista, jotka sisältävät tiedoston koko muutoshistorian.

Palvelimella on oltava “riittävästi” levytilaa CVS-tietovaraston käytettävissä. CVS-tietovarastossa voi olla useita eri projekteja. Viimeisimmän version lisäksi tähän tie-tovarastoon on talletettu tieto aikaisempien versioiden hakemiseksi.

CVS-juuri ja sen rakenne

CVS:n tietovarasto sijaitsee palvelinkoneella hakemistossa, jota nimitetään CVS-juureksi(engl. cvs-root). Samalla koneella voi sijaita useita eri CVS-juuria, mutta keskitetynvarmuuskopioinnin kannalta on perusteltua pitää kaikki saman hakemiston alla.

CVS-juurihakemiston alla on hakemisto CVSROOT, joka sisältää tietovarastokoh-taisia asetustietoja. CVSROOT-hakemisto on luotu automaattisesti tietovaraston alus-

6

Page 11: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

tuksen yhteydessä. Asetustiedostot ovat muokattavissa samalla tavalla, kuin muut-kin versiohallinnan alla olevat tiedostot. Lisätietoja CVSROOT:n asetustiedostoistaon liittessä B.

CVS-juuren alle luotavat aliprojektin sisältävät myös CVSROOT-hakemistoon, jo-ten nekin ovat CVS-juuria.

Yhteys tietovarastoon

CVS-versiohallintajärjestelmän kommunikointi perustuu asiakas-palvelin malliin.Siinä käyttäjän CVS-ohjelma on asiakas ja tietovaraston kanssa toimiva CVS-ohjelmaon palvelin. Asiakkaan ja palvelimen väliseen kommunikointiin on olemassa useitaeri vaihtoehtoja.

Paikallinen tai jaettu hakemisto (local), määritellään paikalliseen tai verk-koyhteyden yli valmiiksi liitettyyn hakemistoon. Yhteys tietovarastoon on siis joolemassa tiedostojärjestelmän kautta. Mikäli tietovarasto sijaitsee samalla koneel-la, menetelmä on ongelmaton, mutta verkon yli jaettujen hakemistojen epäluotetta-vuus saattaa tehdä siitä käyttökelvottaman.

Etäyhteys CVS-palvelimeen (ext), on turvallisin ja sen tähden suositeltavinyhteystapa normaalitilanteissa, kun tietovarasto ja käyttäjät toimivat eri koneilla.Siinä CVS-ohjelma muodostaa käyttäjän koneen ja palvelimen välille ssh-ohjelmaakäyttäen vahvasti salatun yhteyden, jonka yli CVS toimii. Liittessä C on kerrottutarkempia lisätietoja tästä yhteystavasta. Aikaisemmin ssh-ohjelman sijasta on tässäyhteystavassa käytetty rsh-ohjelmaa, joka ei tue salausta ja jota ei sen tähden tuleekäyttää missään olosuhteissa.

Salasanatunnisteinen palvelin (pserver), yhteystapa, jonon viimeaikoina il-mitulleet CVS-ohjelman tietoturvahaavoittuvuudet liittyvät. Käyttää salaamatontayhteyttä, jonka yli muunmuassa käyttäjätunnukset ja salasanat liikkuvat. Tietotur-va on siis olematon. Tietoturvan tasoa voidaan parantaa esimerkiksi tunneloimallayhteys palvelimeen SSL-protokollaa käyttäen. Tässä on vielä ongelmana se, että sa-lattu yhteys täytyy järjestää jokaisen käyttäjän tietokoneelle erikseen. Mikäli halu-taan tarjota julkinen, vain tietovaraston lukuun oikeuttava yhteys käyttäjille, tämäyhteystapa on järkevä ratkaisu. Tosin tällöinkin on syytä miettiä, olisiko esimerkiksiluvussa 5.2 mainittu www-käyttöliittymä parempi ratkaisu.

Esimerkistä löytyy esimerkki kaikista yllämainituista CVSROOT-määrityksistä.CVSROOT-määrityksen avulla kerrotaan CVS-ohjelmalle, missä tietovarasto sijaitsee.

7

Page 12: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Esimerkki 3.1 Erilaisia CVSROOT-määrityksiä

CVSROOT=:local:/var/lib/cvs/projekti

CVSROOT=:ext:usermame@sorsa:/var/lib/cvs/projekti

CVSROOT=:pserver:[email protected]:2401/home/eclipse

3.4 Ominaisuuksista

CVS-versiohallintajärjestelmä tukee samaan aikaan useiden käyttäjien toimesta ta-pahtuvaa tiedostojen muokkausta. CVS:ää voi käyttää myös verkkoyhteyksien yli.Näiden ominaisuuksien ansiosta CVS on käyttökelpoinen myös erittäin laajoissaprojekteissa, joissa versiohallinnan käyttäjiä on paljon ja käyttäjät eivät välttämättäole fyysisesti lähellä toisiaan.

Haarautuminen

Haarautuneella versiolla on yhteinen historia sen version kanssa, josta se haarautuiaina haarautumishetkeen asti. Siitä eteenpäin haarautununeella versiolla on omahistoriatietonsa.

Kuvassa 2 on kuvattu päähaara ja sen kaksi sivuhaaraa, jotka toimivat ominarinnakkaisina kokonaisuuksinaan päähaaraan nähden.

Kuva 2: Versioiden haarautuminen

Kunnollinen versiohallintaohjelmisto osaa myös yhdistellä (engl. merge) eri haa-rojen sisältöä. Esimerkiksi tilanteissa, joissa halutaan säilyttää vanha versio ohjel-mistosta käytössä (mikä on varsin tavallista, jos järjestelmä on suuri ja vanha versioon toiminut muuten), mutta siihen tarvitaan jokin ominaisuus uudemmasta versios-ta. Tällöin versiohallinnasta voidaan yhdistellä uudemmasta versiohaarasta haluttuominaisuus vanhempaan versiohaaraan.

8

Page 13: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Versiohaaroja voidaan käyttää myös uusien ominaisuuksien kehittämiseen jatestaamiseen. Varmasti toimiva ja vakaa versio on päähaarassa ja uusien ominai-suuksien sivuhaarat yhdistellään siihen vasta, kun ne on todettu ja testattu hyviksija toimiviksi.

Ongelmia ja puutteita

Mikäli lukija on edennyt tämän tutkielman alusta tähän pisteeseen asti lukunume-rointia noudattaen, saattaa olla, että lukijalle on muodostunut CVS:stä jonkinlainenmielikuva. Ehkä hän on alkanut epäillä, esittääkö kirjoittaja mitään kritiikkiä CVS-ohjelmistosta? CVS ei ole missään nimessä täydellinen versiohallintaohjelmisto. Sii-nä on puutteita, jotka saattavat haitata sen käyttöä joissakin yhteyksissä. Joihinkinpuutteisiin on kehitetty tilapäisratkaisuja, joiden avulla selvitään eteenpäin.

CVS-versiohallintaohjelmistolle ole kaupallisten toteutusten veroista graafistakäyttöliittymää versioiden harauttamiseen ja yhdistelyyn. Tilanne on kuitenkin ko-koajan paranemaan päin, avoimen lähdekoodin toteutuksia on jo olemassa ja neovat varsin käyttökelpoisia. Ilman niitä käyttäjä joutuu hahmottamaan versiohaaratomassa mielessään [5].

CVS ei ole pitkälle integroitu versiohallintajärjestelmä, jossa kaikki osaset olisi-vat saman toimittajan tekemiä. Kuten luvussa 5 käy ilmi, erilaisia edustaohjelmiaCVS:n käyttöön löytyy useita. Lisäksi CVS toimii useilla eri alustoilla, joka tuo pe-liin omat haasteensa. Siitä, onko tämä valinnan vapaus (tai vaikeus) ongelma yli-päätänsä, voidaan olla montaa mieltä.

4 Versiohallinta käytännössä

Tässä luvussa kerrotaan, miten ohjelmistoprojekti saatetaan kivuttomasti CVS-ver-sionhallintajärjestelmän hellään huomaan ja miten versiohallinnan alaisen projektinkanssa menetellään.

Alaluvussa 4.1 kerrotaan asioista, jotka on huomioitava kun projektissa otetaanversiohallinta käyttöön. Projektin laittaminen CVS-versiohallinnan alaisuuteen kä-sitellään alaluvussa 4.2. Alaluvun 4.3 teemana on tutustua CVS-versiohallinnan päi-vittäiseen käyttöön ohjelmointityössä. Esimerkeissä on käytetty CVS:ää komentori-vipohjaisesti, mutta luku antaa hyvät eväät myös erilaisten graafisten CVS-edus-taohjelmien käyttöön.

Koska nykyään monille ohjelmien perinteinen käyttö komentoriviltä käsin onvierasta, on myös CVS-ohjelmistoa varten kehitetty erilaisia graafisia edustaohjel-

9

Page 14: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

mia. Koska edustaohjelmien kirjo on laaja, kuvaamalla CVS:n perusominaisuuk-sien käytön mahdollisimman abstrahoidulla tavalla, voidaan tätä tietoa soveltaamyös erilaisten CVS-edustaohjelmien käyttöön.Tärkeimpien CVS-komentojen käy-töstä on kerrottu luvussa 4.4.

4.1 Ennen versiohallinnan käyttöönottoa

Mitkä tiedostot versiohallintaan?

CVS on tarkoitettu pääasiallisesti tekstimuotoisten ohjelma- ja dokumentaatiotie-dostojen hallintaan. Esimerkiksi XML- tai LATEX-muotoiset dokumentit voidaan säi-lyttää CVS:ssä, mutta Word-tekstinkäsittelyohjelman dokumentit joudutaan säilyt-tämään binaaritiedostoina2.

Myös binaaritiedostot käyvät, mutta niiden yhteydessä on otettava huomioonCVS:n avainsanojen laajennos ja se, että CVS muuntaa myös tiedostojen rivinvaih-tomerkkejä automaattisesti sen mukaan, millä alustalla työskennellään. Nämä omi-naisuudet on kytkettävä pois päältä binaaritiedostoilta, jotta ne säilyisivät raken-teeltaan ehjinä. Tarkemmin tästä on kerrottu add-komennon käytön yhteydessä lu-vussa 4.4.

Kääntäjien generoimat- ja muut väliaikaistiedostot eivät kuulu versiohallinnanpiiriin. Käytännössä kaikki, joka voidaan helposti tuottaa siitä materiaalista, mitäversiohallinnassa on, tulee jättää versiohallinnan ulkopuolelle.

Milloin projekti tulee laittaa versiohallintaan?

Jokainen ei-triviaali projekti kuuluu versiohallintaan.Koska tiedostojen uudelleennimeäminen ja siirtäminen hakemistosta toiseen on

jokseenkin epämukavaa, projekti kannattaa laittaa versiohallintaan heti, kun pro-jektin hakemistorakenne on vakiintunut [4, Sivu 29].

Kuinka usein muutokset tulisi toimittaa versiohallintaan?

Kun kehittäjä kirjoittaa uutta ohjelmakoodia tai muokkaa vanhaa, tämän koneel-la oleva ohjelmakoodi eroaa siitä, mitä versiohallinnassa on. Kehittäjän pitää päät-tää, missä vaiheessa hän toimittaa muutoksensa versiohallintaan. Muutoksia ei pidätoimittaa liian myöhään eikä liian aikaisin, mutta mikä sitten sopiva ajankohta tälle

2On olemassa kaupallisia järjestelmiä, jotka soveltuvat huomattavasti CVS:ää paremmin asiakir-jojen hallintaan.

10

Page 15: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

toimenpiteelle?Selvästi liian aikaista on toimittaa versiohallintaan pahasti keskeneräinen työ,

esimerkiksi ohjelmointikielinen tiedosto, jota ohjelmointikielen kääntäjä ei hyväk-sy. Tätä asiaa ei voi painottaa liikaa; versiohallintaan laitettavan ohjelmakoodin on ainakäännyttävä, mikäli se on suinkin mahdollista, sillä kääntymätön koodi versiohallin-nassa tietää muille ylimääräistä työtä.

Turhan aikaista on toimittaa pientä korjausta, esimerkiksi parin kommenttirivinlisäystä ohjelmaakoodiin, mikäli lisää muutoksia on tulossa.

Liian myöhäistä (muutokset on toimitettava jokatapauksessa, tälle ei mahda enäämitään) on toimittaa muutoksia versiohallintaan vasta suuren muutoksen jälkeen.Jos kehittäjä on korjannut sovelluksesta useita, paljon työtä vaatineita virheitä ja toi-mittaa kaikki korjaukset kerralla versiohallintaan, on muutosten toimittaminen teh-ty myöhässä. Muutokset kannattaa pilkkoa pienempiin osiin, jotka toimitetaan ver-siohallintaan kukin vuorollaan. Tällöin päästään helpommin vian jäljille, jos jokin“korjaus” rikkoo jonkin toisen ominaisuuden täysin odottamattomassa paikassa.

Kultainen keskitie löytyy jostakin yllämainittujen vaihtoehtojen väliltä — ei olemitenkään tavatonta toimittaa muutoksia versiohallintaan useasti yhden päivän ai-kana.

• Jos muutoksesi eivät vaikuta muiden työskentelyyn, toimita muutokset useas-ti ja muutoksesi ovat varmassa tallessa CVS-palvelimella. Jos työskentelet ryh-mässä, usein tehdyt toimitukset vähentävät suuren ja vaikean yhdistelyope-raation mahdollisuutta.

• Jos muutoksesi vaikuttavat muihin, erityisesti jos on olemassa riski, että muu-toksesi rikkovat kokonaisuuden kääntymisen, suorita ensin koekäännös ja toi-mita muutokset jos ohjelma kääntyi.

• Älä koskaan työskentele pitkään toimittamatta muutoksia.

4.2 Projekti versiohallintaan

Tietovaraston luonti ja alustus

Luvussa 3.3 on kerrottu tarkemmin tietovaraston rakenteesta ja siellä mainitut asiaton hyvä tietää ennen kuin uutta tietovarastoa ollaan luomassa. Ensiksi on luota-va päätietovarasto (tämä toimenpide on mahdollisesti suoritettu CVS:n asennuksenyhteydessä), jonka alle sijoitetaan muut (ali)tietovarasto, joita voidaan kutsua myös

11

Page 16: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

aliprojekteiksi tai moduleiksi. Kun päätietovarasto on luotu, voidaan tarpeen mu-kaan sen alle lisätä uusia tietovarastoja, joiden luonti onnistuu samalla tavalla, kuinpäätietovarastonkin luonti.

Tietovarasto luodaan palvelinkoneella sijaitsevaan hakemistoon joka voi olla esi-merkiksi /var/lib/cvs, jokatapauksessa hakemiston on oltava olemassa ennensen alustamista. Myös hakemiston käyttöoikeudet on syytä laittaa kuntoon ennenalustusta. Tietovaraston käyttäjät lisätään käyttäjäryhmään, jonka omistukseen CVS-juuri laitetaan. Ryhmälle annetaan myös kaikki oikeudet CVS-juureen. Lisäksi käyt-töoikeudet tulee asettaa niin, että myös hakemiston alle luotavat hakemistot ja tie-dostot tulevat saman ryhmän omistukseen.

Tietovaraston alustus suoritetaan CVS-komennolla init. Alustus luo uuden ali-hakemiston nimeltään CVSROOT.

Esimerkissä 4.1 on suoritettu CVS-tietovaraston luonti ja alustus.

Esimerkki 4.1 Tietovaraston alustaminen

Oletetaan, että CVS-käyttäjät kuuluvat ryhmään cvsusers ja että tietovarasto luo-daan hakemistoon /var/lib/cvs.

mkdir /var/lib/cvs

chgrp cvsusers /var/lib/cvs

chmod g+srwx /var/lib/cvs

cvs -d /var/lib/cvs init

Olemassa olevan projektin lisäys versiohallintaan

Uusien projektien lisäämiseksi tietovarastoon on olemassa import-komento, jokaosaa lisätä jo olemassa olevan projektin CVS-tietovarastoon. Tätä vaihetta varten onsyytä laittaa liitteessä B mainitut cvswrappers ja cvsignore -tiedostot kuntoon.

Import-komennolla on myös toinen käyttötarkoitus. Sillä nimittäin voidaan myöspäivittää niinsanottuja toimittajahaaroja (engl. vendor branch), joka tarkoittaa esimer-kiksi kolmannen osapuolen kirjaston lähdekoodeista muodostettua haaraa.

Uuden projektin lisäämiseksi versiohallinnan alaisuuteen on olemassa myös toi-nen, yksinkertaisempi, tapa. Siinä lisätään ensin uusi hakemisto versiohallinnan tie-tovarastoon add-komennolla, jonka jälkeen samaa komentoa käyttäen lisätään ha-kemistossa olevat tiedostot. add-komennosta on kerrottu lisää luvussa ??. Tämä ta-pa on yhtä hyvä kuin import-komennon käyttö, jos sen tarjoamia lisäominaisuuk-sia ei tarvita.

12

Page 17: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

4.3 Työskentelymalli

Kuvassa 3 on kuvattu tyypillinen työrupeama CVS:n kanssa. Työskentely CVS:nkanssa voidaan tiivistää kopioi-muokkaa-yhdistele-toimita -mantraan seuraavalla ta-valla:

Aloitus

cd projektihakemisto

cvs update

Muokkaa tiedostoja

Lisaa uusi tiedosto"foo.java"

cvs add foo.java cvs update

selvita mahdollisetkonfliktit

cvs commit

Kuva 3: Tyypillinen CVS:n käyttökerta

Kopioi

Käyttäjä luo työskentelyhakemiston työasemalleen ja hakee sinne työkopion pro-jektiin kuuluvista tiedostoista. Käytännössä tämä tapahtuu CVS:n checkout- taiupdate-komennolla. Tarkemmat ohjeet näiden komentojen käytöstä löytyvät ala-luvuista 4.4 ja 4.4.

13

Page 18: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Muokkaa

Käyttäjä muokkaa työhakemistossaan olevia työkopioita. Myös uusien tiedostojenluominen on mahdollista. Uudet tiedostot laitetaan versiohallintaan add-komennolla,jonka käytöstä on kerrottu alaluvussa 4.4.

Yhdistele

Kun muutokset on tehty, on aika yhdistellä ne versiohallintaan. Tämä tapahtuu suo-rittamalla ensin update-komento, joka päivittää työhakemistossa olevien muuttu-mattomien tiedostojen sisällön vastaamaan versiohallinnassa olevaa ja paikallisestimuuttuneisiin tiedostoihin liitetään mukaan mahdolliset muiden käyttäjien tekemätmuutokset. Update-komennosta löytyy lisätietoa alaluvusta 4.4.

CVS osaa tehdä yhdistelyn automaattisesti, mikäli versiohallintajärjestelmässäolevien muutosten ja paikallisten muutosten välillä ei ole konflikteja. Konfliktilan-teissa tarvitaan käyttäjän toimenpiteitä asian korjaamiseksi. Konfliktien selvittämi-sestä on kerrottu lisää luvussa 4.4. Mikäli käsitellään ohjelmakoodia, on tässä vai-heessa hyvä tarkistaa, että tehdyt muutokset ovat kääntyvässä kunnossa ennen seu-raavaan vaiheeseen siirtymistä.

Toimita

CVS-transaktion päätteeksi käyttäjä suorittaa muutosten toimittamisen versiohallin-tajärjestelmään commit-komennolla. Mikäli tässä vaiheessa alkaa kaduttaa, apuuntulee commit-operaation vastakohta, eli release-komento. Se palauttaa tilanteentransaktion alkuun, eli tehdyt muutokset menetetään. Lisätietoja commit-komennostalöytyy alaluvusta 4.4 ja release-komentoa käsitellään tarkemmin alaluvussa 4.4.

4.4 CVS-ohjelman käytöstä

Kuvassa 4 näkyvät CVS:n komentojen vuorovaikutussuhteet paikallisen työhake-miston ja CVS:n tietovaraston kesken.

CVS-istunto - login...logout

Mikäli yhteys CVS-tietovarastoon on järjestetty istuntopohjaista yhteydenottotapaakäyttäen, suoritetaan sisään- ja uloskirjautuminen. Esimerkiksi anonyymit CVS-palvelimetvaativat kirjautumisen.

14

Page 19: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Repository

Uusi tiedosto

Kayttajan kone

Julkaistava

versio

Export

Add, Import

Commit

Checkout (update)

Kuva 4: CVS:n peruskomennot

Työtilan muodostaminen - checkout

Työtilan muodostamiseen käytetään checkout -komentoa. Se hakee tietovarastostahalutun projektin paikalliseen hakemistoon ja luo projektin hakemistorakenteen.

Muutosten päivitys - update

Päivitys hakee tietovarastosta viimeisimmän (tai jonkin erikseen määrätyn) versionja suorittaa yhdistelyn niille tiedostoille, joita työtilassa on paikallisesti muutettu jakopioi paikallisesti muuttumattomien tiedostojen päälle suoraan haetun version.

Päivityksen yhteydessä voi ilmetä ristiriitoja (engl. conflict), mikäli samaa koh-detta on muokattu jonkun toisen kehittäjän toimesta samanaikaisesti siten että CVS eiosaa yhdistellä tehtyjä muutoksia. Mikäli ristiriitoja ilmenee on ne korjattava ennenkuin muutokset toimitetaan tietovarastoon.

Muutosten toimittaminen - commit

Paikalliseen työtilaan tehdyt muutokset toimitetaan tietovarastoon commit -komennolla,joka siirtää tehdyt muutokset työhakemistosta tietovarastoon.

Tiedostojen lisääminen CVS-järjestelmään - add

Tiedoston lisäys tietovarastoon tapahtuu add-komennolla. Komennon suoritus eivarsinaisesti vielä lisää tiedostoa tietovarastoon, vaan merkitsee sen lisättäväksi,kun muutoksia toimitetaan seuraavan kerran commit-komennolla.

Mikäli lisättävä tiedosto on binaarimuotoinen, on add-komennon yhteydessä

15

Page 20: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

kerrottava siitä CVS-ohjelmistolle. Tätä ei tosin tarvitse tehdä, mikäli liitteessä Bmainittu cvswrappers -asetustiedosto on kunnossa.

CVS osaa säilyttää vain sellaisia tiedostoja, joita RCS-muodossa voidaan säilyt-tää. Esimerkiksi symbolisia linkkejä ei voi tallettaa CVS-tietovarastoon. Toimiva ta-pa on sisällyttää projektiin esimerkiksi ohjetiedosto, jossa kerrotaan miten projektiinkuuluvat erikoistiedostot tai linkit luodaan.

Tiedostojen poistaminen - remove

Kun tiedosto on tullut tiensä päähän, se voidaan poistaa tietovarastosta remove-komennolla. Komento merkitsee tiedoston poistettavaksi ja varsinainen poisto ta-pahtuu seuraavan muutoston toimituksen yhteydessä. Mikäli tässä vaiheessa halu-taan perua poisto, suoritetaan add ja update-komennot uudelleen, mikä palauttaatiedoston poistoa edeltävään tilaan.

Tiedostoa ei missään vaiheessa poisteta kokonaan CVS-tietovarastosta, vaan sesiirretään erityiseen tietovaraston sisäiseen Attic-hakemistoon. Näin siksi, että pois-tettu tiedosto on ollut mukana aikaisemmissa versioissa, eikä aikaisempaa versioolisi enää täydellinen, jos siitä puuttuisi tiedosto.

Projektista poistuminen - release

Ennen työskentelytilan poistamista paikallisesta hakemistosta on syytä ajaa release-komento. CVS tarkistaa tällöin, onko työtilassa toimittamattomia muutoksia. Joskaikki on kunnossa, CVS suorittaa kullekin unedit-komennon ja päivittää tieto-varaston historiatietoihin tiedon siitä, että työtilan käyttö oli lopetettu.

Mikäli työtilassa on toimittamattomia muutoksia, release epäonnistuu. Muu-tokset on joko toimitettava tai ne on peruttava palaamalla aikaisempaan versioonupdate-komennolla. Jälkimmäisessä tapauksessa tehdyt muutokset menetetään.

Projektista poistuminen työskentelytilan poistamisen yhteydessä ei ole pakol-lista, mutta se on hyvä tapa, sillä tällöin mahdolliset toimittamattomat muutoksettulevat ilmi, samoin kuin edit-komennolla muokattavaksi lukitut tiedostot.

Avainsanat lähdekoodissa

CVS tarjoaa joukon avainsanoja, jotka voidaan sisällyttää tekstimuotoisiin tiedos-toihin. Kun CVS löytää avainsanan tiedostosta, jolle se on tekemässä checkout-toimintoa, se laajentaa avainsanan näyttämään metatietoa tiedoston viimeisimmäs-tä muutosversiosta. CVS:lle voi asettaa tiedostokohtaisesti avainsanan laajennus-

16

Page 21: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

mallin, jonka mukaan CVS tekee avainsanojen laajennokset tai jättää ne tekemättä,kuten binaaritiedostojen tapauksessa.

Avainsanan laajennusmalli huolehtii myös rivien loppumerkkien muuntamises-ta eri järjestelmissä. Unix-, Machintosh- ja Windows-käyttöjärjestelmät käyttäväterilaisia merkintätapoja rivinvaihdon esittämiseksi tekstitiedostossa (Linux- ja BSD-pohjaiset järjestelmät käyttävät Unix rivinvaihtoja.)

Kun tiedosto jossa ei ole Unix-rivinvaihtoja toimitetaan versiohallintaan, CVS-muuntaa rivinvaihdot Unix-muotoisiksi. Jos versiohallinnassa on binaaritiedostoja,tämä ominaisuus rikkoisi niiden rakenteen. Tämän vuoksi on tärkeää, että binaari-tiedostot laitetaan CVS-versiohallintaan siten, että CVS tietää niiden olevan binaari-tiedostoja, eli on käytettävä “kb” -avainsanojen laajennusmallia, tällöin CVS ei suo-rita avainsanojen laajennusta ja jättää tiedossa mahdollisesti olevat rivinvaihtomer-kit rauhaan.

CVS-avainsanat kirjoitetaan tiedostoon muodossa $Avainsana$ ja kaikki avain-sanat Log-avainsanaa lukuunottamatta laajentuvat muotoon $Avainsana: arvo$.Lista avainsanoista selityksineen on luetultu liitteessä A.

5 Apuohjelmia

Tässä luvussa esitellään erilaisia apuohjelmia CVS-versiohallinan käyttöön. Kaikkiesitellyt ohjelmat on julkaistu jonkin Open Source-lisenssin alaisuudessa, joten neovat pääsääntöisesti vapaita ja ilmaisia.

Graafisten apuohjelmien etuja komentorivipohjaiseen käyttöön verrattuna onselkä yleiskuva, josta nähdään paikallisen työhakemiston tila tietovarastoon näh-den. Myös komentojen syntakseja ei tarvitse enää muistella ja kaivaa ohjeista. Toi-saalta yksinkertaiset toimenpiteet sujavat komentoriviltä käsin usein nopeammin jakomentorivi komennotkin oppii ulkoa, kunhan niitä käyttää.

Tiedot eri ohjelmien kuvauksiin ovat peräisin niiden käyttöohjeista tai kotisi-vuilta. Näitä lähteitä ei ole erikseen sisällytetty lähdeluetteloon. Mikäli jonkin ohjel-man kotisivu ei ole enää toiminnassa, kannattaa tarkistaa esimerkiksi OSDN (OpenSource Development Network, Inc.) FreshMeat.net -palvelusta, joka löytyy osoit-teesta http://freshmeat.net, löytyykö apuohjelmasta päivitettyjä tietoja. Ku-vauksissa käytetty maininta toimivuudesta Unix-alustalla tarkoittaa yleensä sitä, et-tä ohjelma toimii ainakin Linux-ympäristöissä ja mahdollisesti myös Solaris, Free-,Net- tai OpenBSD -alustoilla. Tuki Mac OS X -alustalle on mainittu erikseen, vaikkase on oikeastaan Unix-alusta. Tarkempia tietoja kannattaa hakea kunkin ohjelmanwww-sivuilta. Lisäksi joistakin ohjelmista on kirjattu kirjoittajan havaintoja teke-

17

Page 22: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

mistään kokeiluista kyseisillä ohjelmilla.

5.1 Graafiset käyttöliittymät

CvsGui

CvsGui (http://cvsgui.sourceforge.net/) pitää sisällään kolme CVS-käyttö-liittymäohjelmaa, jotka ovat WinCvs, MacCvs ja gCvs. Sukulaissuhteeltaan ne ovatmieluummin serkuksia, kuin sisaruksia. Kukin niistä tarjoaa natiivin ulkoasun jatuntuman tukemassaan käyttöjärjestelmässä. Eri käyttöjärjestelmille tehdyt versioteroavat toisistaan jonkin verran.

Linux-alustalla kokeilemani gCvs-ohjelma tuntui hieman hiomattomalta, eikäohjelman käyttömukavuus ollut paras mahdollinen.

LinCVS

LinCVS (http://www.lincvs.org) on graafinen liittymä CVS-ohjelmalle, jokatoimii UNIX, Windows ja Mac OS X -alustoilla.

LinCVS-ohjelman Linux-version kokeilu jätti positiivisen kuvan ohjelman laa-dusta ja käytettävyydestä. Käyttöliittymä oli miellyttävän selkeä ja helppokäyttöi-nen.

TkCVS

TkCVS (http://www.twobarleycorns.net/tkcvs.html) on Tcl/Tk-pohjainengraafinen liittymä CVS-ohjelmalle, joka toimii niin UNIX, Windows kuin Mac OS X-alustoila.

TkCVS-ohjelman kokeilu oli jäädä tekemättä karun alkuvaikutelman vuoksi. Tä-mä taas johtuu siitä, että TkCVS on Tcl/Tk-ohjelma ja siksi hieman erikoisen näköi-nen käyttöliittymältään. Erityisesti maininnan arvoinen on mukana tuleva TkDiff-apuohjelma, joka on tarkoitettu tiedostojen eroavaisuuksien katseluun ja tiedosto-jen yhdistelyyn. TkDiff on helppo- ja yleiskäyttöinen apuväline versiokonfliktienratkaisemiseen. Myös LinCVS-ohjelma osaa käyttää TkDiff:ä.

Cervisia

Cervisia (http://www.kde.org/apps/cervisia/) on KDE työpöytäympäris-töä käyttävä graafinen CVS-edustaohjelma. Saatavissa vain UNIX-alustalle.

Ensikokemuksen perusteella helppokäyttöinen ja hyvännäköinen. Ei näytä mi-

18

Page 23: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

tään turhia tietoja, vaan esittää asiat kompaktisti.

TortoiseCVS

TortoiseCVS (http://www.tortoisecvs.org/) on vain Windows-alustalla toimiva apuoh-jelma, joka integroi CVS-ominaisuuksia Windows Explorer tiedostoselausohjelmaan.

5.2 www-liittymä

Myös www-pohjaisia käyttöliittymiä löytyy CVS-versiohallinnan käyttöön useitaerilaisia. Mainitsen tässä yhden, joka on varsin kattava ja laajalti käytetty.

ViewCVS

ViewCVS (http://viewcvs.sourceforge.net/) on monipuolinen ohjelmisto,sen avulla voidaan katsella CVS-tietovarastossa olevien modulien sisältöä, muutos-historiaa ja muita ominaisuuksia. Myös muokattujen tiedostojen päivitys tietova-rastoon onnistuu. ViewCVS-ohjelmaa Voidaan käyttää www-palvelimen kautta cgi-ohjelmana tai itsenäisenä www-palvelinsovelluksena. Myös SourceForge-palvelussa(http://www.sourceforge.net/) käyttää ViewCVS www-liittymää.

ViewCVS tukee myös CvsGraph-ohjelmaa, joka osaa muun muassa piirtää hie-non graafisen puurakenteen projektin versioiden haarautumisesta. CvsGraph-ohjelmankotisivut löytyvät osoitteesta: http://www.akhphd.au.dk/~bertho/cvsgraph/.

6 Yhteenveto

On tärkeää muistaa, että versiohallintajärjestelmä on projektin parissa toimivalletyöskentelyä helpottava työkalu. Jos versiohallinta toimenpiteiden suorittaminenhaittaa normaalia työskentelyä, on jotakin pielessä.

CVS-versiohallintajärjestelmän lisäksi on olemassa useita muita versiohallinta-järjestelmiä. Sellaisia ovat esimerkiksi Perforce, Microsoft Visual Source Safe ja BitKee-per, vain muutamia mainitakseni. Ne kaikki sisältävät erilaisia ominaisuuksia, toi-mivat eri tavoin ja ovat eri asioissa hyviä tai huonoja.

Vaikka tässä LuK-tutkielmassa onkin kerrottu käytännön versiohallinnasta vainCVS-ohjelmiston näkökulmasta, samat perusperiaatteet pätevät myös muihin ver-siohallintajärjestelmiin. Yleensä vain käytetyt termit vaihtelevat hieman ja käytän-nön toimenpiteet suoritetaan eri tavalla. Kun tuntee yhden versiohallintajärjestel-män, oppii helposti käyttämään toista, sillä samat perusasiat pätevät kaikkiin ver-

19

Page 24: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

siohallintajärjestelmiin.Lopuksi vinkki CVS-versiohallinnan käytön opiskeluun: Leiki, kokeile ja testaa,

mutta älä tee sitä tuotantoympäristössä. Näin CVS:n ominaisuudet tulevat tutuiksija oikea käyttökin sujuu.

20

Page 25: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Viitteet

[1] Brian Berliner: “CVS II: Parallelizing software development”, teoksessa “Procee-dings of the USENIX Winter 1990 Technical Conference”, (ss. 341–352), Berkeley,CA: USENIX Association, 1990.URL http://citeseer.nj.nec.com/berliner90cvs.html

[2] Dick Grune: “The original shell script version of cvs”, comp.sources.unixvolume 6 release, 1986.

[3] Karl Fogel: Open Source Development With CVS, The Coriolis Group, 2000, ISBN1-57610-490-7.URL http://cvsbook.red-bean.com/Viitattu 11.2.2004

[4] Per Cederqvist: Version Management with CVS, -, 2004.URL http://www.cvshome.org/Viitattu 11.2.2004

[5] Stephen P. Berczuk ja Brad Appleton: Software Configuration Management Pat-terns: Effective Teamwork, Practical Integration, Addison Wesley, 2002, ISBN 0-201-74117-2.

21

Page 26: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

A Korvattavat avainsanat

Tässä liitteessä kuvaillaan CVS-versiohallintajärjestelmän tukemat avainsanat. Avain-sanat kirjoitetaan tiedostoon muodossa $Avainsana$.

Author

Viimeisimmän muutoksen toimituksen suorittanut käyttäjätunnus.

Date

Viimeisimmän muutoksen toimitusaika UTC! (UTC)-aikana.

Header

Otsikko, joka sisältää tekijän (engl. author), päiväyksen ja muutosversion nume-ron (engl. revision number), tiedoston polun ja RCS-nimen (nimen, jolla tiedosto ontallennettu tietovarastoon), sekä tiedon siitä, onko tiedosto mahdollisesti lukittu.

Id

Muuten sama kuin Header-avainsanan tuottaman otsikko, mutta RCS-tiedoston pol-kua ei näytetä.

Name

Tägi, joka oli voimassa tiedostolle kun se haettiin checkout-komennolla. Avainsa-na voi näyttää siis haaran nimen tai tarjota muuta tunnistetietoa muuttosversiostakuin itse versionumeron.

Locker

Tiedoston lukinneen käyttäjän käyttäjätunnus. Tyhjä, jos tiedostoa ei ole lukittu.

Log

Näyttää muutosten toimituksen yhteydessä annetut kommentit, päivämäärän ja tie-dostoon muutoksia tehneiden käyttäjätunnukset. Tämä avainsana ohjaa CVS:ää säi-lyttämään yllämainitut tiedot tiedostossa useimmista muista avainsanoista poikkea-valla tavalla: avainsanaa ei laajenneta aikaisempien laajennosten päälle, vaan ne li-

22

Page 27: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

sätään tiedostoon niiden eteen.Log-avainsanaa samalla rivillä edeltävät merkit otetaan myös mukaan avainsa-

nan laajennettuun versioon, tämä ominaisuus helpottaa siistien kommenttilohkojentekemistä. Esimerkissä A.1 nähdään miltä log-avainsanan laajennos näyttää tämänkirjoitelman LATEX-lähdekoodissa, kun $Log$:n etuliittenä on LATEX:n kommentti-merkki (%).

Esimerkki A.1 Log-avainsanan laajennos

% $Log: cvs.tex,v $

% Revision 1.7 2003/08/31 09:22:49 karriku

% Testing PCVS-Emacs extension.

%

% Revision 1.6 2003/08/31 09:07:11 karriku

% Testing keyword expansion

Projekteissa, joissa muutoksia toimitetaan usein ja CVS-lokin pituus kasvaa huo-mattavan suureksi, kannattaa harkita Log-avainsanan sijoittamista tiedoston lop-puun, jotta tiedoston tärkeät osat olisivat heti käsillä. Vanhaa loki-informaatiotavoi toki poistaa käsin tiedostosta, informaatio ei varsinaisesti katoa mihinkään, silläCVS:n log -alakomennolla voidaan tutkia vanhoja logi-tietoja.

Log-avainsanan tuottama informaatio on ongelmallista tilanteissa joissa haarau-tuneita versioita yhdistellään takaisin päähaaraan, sillä CVS ei osaa tällöin tehdäyhdistelyä siististi. Jos projektissa tullaan tekemään uusia versiohaaroja ja yhdiste-lemään niitä takaisin päähaaraan, kannattaa Log-avainsat jättää pois tiedostoista jakäyttää CVS:n log -alikomentoa.

RCSfile

Näyttää RCS-tiedoston nimen.

Revision

Tiedoston CVS-muutosversion numero. Muutosversionumero on tiedostokohtainen,se ei siis ole koko projektin versionnumro.

Source

Näyttää RCS-tiedoston nimen ja polun.

23

Page 28: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

State

Versiolle admin-komennolla asetettu tila.

B Asetustiedostoja hakemistossa CVSROOT

CVSROOT-hakemistossa on oletusarvoisesti joukko asetustiedostoja, jotka on luo-tu tietovaraston luonnin yhteydessä. Tiedostot ovat muokattavissa samaan tapaan,kuin tavallisetkin versiohallinnan alla olevat tiedostot. CVS-ohjelmisto käyttää näitäasetuksia, ellei sille ole tehty paikallisia asetuksia.

Jotkut asetustiedostoista sallivat käyttäjän määrittelemien komentojen suoritta-misen CVS-komentojen yhteydessä. Tämän vuoksi on erittäin tärkeää rajoittaa sitäketkä käyttäjistä pääsevät näitä asetustiedostoja muokkaamaan. On huomattava, et-tä ainakin history ja val-tags -tiedostoihin täytyy kaikilla käyttäjillä olla muok-kausoikeudet.

cvswrappers

Tässä asetustiedostossa voidaan kertoa CVS:lle, miten sen tulisi suorittaa yhdistelyja avainsanojen korvaus eri tiedostotyypeille. Esimerkissä B.1 on muutamien yleis-ten binaarimuotoisten tiedostojen tyypit kirjattu cvswrappers-tiedostoon ja nii-den avainsanojen laajennos asetetaan pois päältä. Tämän jälkeen mainitun tyyppi-sille tiedostoille ei tarvitse add-komennon yhteydessä erikseen mainita, että ne ovatbinaarimuotoisia. Lisätietoja avainsanojen laajennoksesta on kerrottu luvussa 4.4.

Esimerkki B.1 cvswrapper-tiedosto

# Kuvatiedostotformaatit

*.gif -k ’b’

# Windows-käyttäjien takia kannattaa kirjata maskit myös

# isoin kirjaimin.

*.GIF -k ’b’

*.png -k ’b’

*.jpg -k ’b’

# Office-ohjelman tiedostot

*.doc -k ’b’

*.xls -k ’b’

24

Page 29: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

cvsignore

Tämä tiedosto sisältää listan tiedostonimiä tai tiedostonimi-malleja, joita CVS:n eipidä hyväksyä tietovarastoonsa. CVS ohittaa tässä asetustiedossa mainitut tiedostotesimerkiksi update, commit ja status-komennoissa. Esimerkissä B.2 on kuvattucvsignore-tiedosto, joka neuvoo CVS:ää ohittamaan muutamia tiedostotyyppejäjotka eivät versiohallinnan alle kuulu.

Esimerkki B.2 cvsignore-tiedosto

# Ohita varmuuskopiot ja kääntäjän generoimat tiedostot,

# sekä core-dumpit

*~ *.o *.bak *.obj core

modules

Tämä asetustiedosto sisältää modulimäärityksiä tietovaraston projekteista. Useam-pia hakemistoja ja tiedostoja voidaan ryhmitellä yhdeksi moduliksi. Tämän tiedos-ton luonti ja muokkaus on tietovaraston tai projektin ylläpitäjän vastuulla, silläCVS ei luo tätä tiedostoa automaattisesti.

Kun moduli on määritelty, sen sisältämät tiedostot ja projektit voidaan hakeatyöhakemistoon käyttäen modulin nimeä. Moduli voidaan määrittää sisältämäänhakemistoja tai yksittäisiä tiedostoja. Hakemistojen osia voidaan myös sulkea poismodulista.

Modulimääritykset ovat käyttökelpoisia, kun halutaan pilkkoa iso projekti pie-nempiin osiin. Tällöin projekteille yhteiset osat voidaan lisätä kunkin uuden pro-jektin modulimääritykseen ja päällekkäisyyksiltä vältytään. Modulimäärityksiä voi-daan käyttää myös useiden projektejen yhdistämiseksi.

Esimerkki B.3 Tietovaraston hakemistorakenne

/ CVS-LuK/ LaTeX-source/ Pictures/ References

/ Jotain.ihan.muuta

25

Page 30: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Esimerkki B.4 näyttää, miten modulimäärityksiä voidaan hyödyntää. Siinä hake-mistorakenteen selkiyttämiseksi luodaan modulimääritys cvsRefs, johon sisällyte-tään projekti CVS-LuK/References, mutta ei sen alihakemistoa Jotain.ihan.muuta.Lisäksi luodaan moduli LuK, joka sisältää projektit Pictures ja LaTeX-source.Esimerkissä oletetaan, että tietovarastossa on olemassa esimerkin B.3 mukainen ha-kemistorakenne.

Esimerkki B.4 modules-tiedosto

cvsRefs -a CVS-LuK/References \

!CVS-LuK/References/Jotain.ihan.muuta

cvsLuK -a CVS-LuK/LaTeX-source -a CVS-LuK/Pictures

C SSH ja käyttäjän tunnistus julkisella avaimella

Tunnistus käyttäen julkista avainta (engl. public key) on vaihtoehto perinteiselle sa-lasanan syöttämiselle kirjauduttaessa SSH-palvelinkoneelle. Se on turvallisempi jajoustavampi tapa, eikä se ole edes vaikea ottaa käyttöön.

Toimintaperiaate

Käyttäjä luo itselleen avainparin (engl. key pair), eli julkisen ja yksityisen avaimen(engl.private key). Palvelimelle annetaan käyttäjän julkinen avain ja ainoastaan käyttäjälläon hallussaan yksityinen avain. Avainparin käytön ideana on, että se mitä julkisellaavaimella salataan, voidaan purkaa vain yksityisellä avaimella.

Kun käyttäjä ottaa yhteyden palvelimeen, palvelin lähettää käyttäjälle tämänomalla julkisella avaimella salatun haasteen (engl. challenge). Haaste puretaan alku-peräiseen muotoonsa käyttäjän yksityisen avaimen avulla. Palvelimelle lähetetäänpurettua haastetta vastaava vastaus (engl. response). Mikäli palvelin on tyytyväinensaamaansa vastaukseen, käyttäjän tunnistus onnistui.

Tietoturvan kannalta on erittäin tärkeää, että kukaan muu ei pääse käsiksi yk-sityiseen avaimeen. Vaikka oma tietoturva ei huoletakkaan, voidaan käyttäjän jul-kista avainta väärinkäyttää vihamieliseen hyökkäykseen koko järjestelmää vastaan.Mikäli näin tapahtuu, huolimaton käyttäjä on mitä luultavimmin hankkinut itsel-leen vaikeuksia, koska yksityisen avaimen mukana on saatu myös avaimen haltijanidentiteetti järjestelmässä.

26

Page 31: CVS-versiohallinta · 2004. 2. 17. · CVS Concurrent Versions System Versiohallintajärjestelmä, jota tässä tutkielmassa käsitellään. Perustuu RCS-järjestelmään laajentaen

Yksityisen avaimen voi suojata myös salalausekkeella (engl. passphrase), mut-ta tällöin CVS-käytön yhteydessä menetetään avainparitunnistuksen etu verrattu-na salasanapohjaiseen tunnistautumiseen. Salalausekkeen useilta syöttämiskerroiltavoidaan välttyä käyttämällä tunnistusagentti-ohjelmaa (engl. authentication agent),joka pitää yksityisen avaimen muistissa sen jälkeen, kun salalauseke on syötettykerran. Toimittaessa Windows-ympäristössä agenttiohjelma ei välttämättä ole käy-tettävissä, joten salalauseke kannattaa tällöin mukavuussyistä jättää tyhjäksi.

Käytettävistä ohjelmista

Windows-alustalla on yleisesti käytössä useampia erilaisia SSH-asiakasohjelmistoja(Esim. PuTTY, OpenSSH ja SSH Secure Shell3). UNIX-tyylisissä4 järjestelmissä onde facto asemaan noussut OpenSSH-ohjelmisto. SSH-protokollasta on olemassa ver-siot SSH 1 ja SSH 2. SSH 1:n käyttö ei ole suositeltavaa, koska siinä on tunnettujatietoturvahaavoittuvuuksia.

3Suomalaisen SSH Communications Security Ltd:n kaupallinen tuote.4Linux, Free/Open/Net-BSD, Solaris, MacOS/X

27