Lyhyt ohjeistus CVS-versionhallintajärjestelmän käyttöön

Muita ohjeita

1 Mikä CVS?

CVS tulee sanoista Concurrent Versions System. Kuten versionhallintajärjestelmät yleensä, se tarjoaa turvallisen keinon tiedostojen hallintaan ja muokkaukseen. Sen tarkoituksena on pitää tallessa tiedostojen eri versiot ja pitää huoli siitä, ettei tiedostojen yhtäaikainen editointi tuota ongelmia. Käyttäjän kannalta tämä tarkoittaa erityisesti sitä, että muutetut tiedostot on säännöllisin väliajoin päivitettävä versiointiin.

Tarvittaessa voidaan näin palata tiedoston aiempaan, toimivaan versioon, jos esim. uusin versio korruptoituu tai jostain syystä ei enää toimi halutulla tavalla. Lisäksi yleensä CVS:n alaiset tiedostot varmuuskopioidaan useammin kuin muut.

CVS käyttää ns. keskusvarastoa (central repository), johon sen alaiset tiedostot tallentuvat. Käyttäjillä on omat paikalliset kopionsa keskusvaraston tiedostoista, joita voidaan muokata aivan kuin mitä tahansa paikallisia tiedostoja. Tiedostot sisältyvät moduliin, joka vastaa ylimmän tason hakemistoa keskusvarastossa (ja paikallisestikin).

2 Esiasetukset

2.1 Ympäristöasetukset

CVS-ohjelmisto löytyy laitoksella valinnaisten ohjelmien joukosta /opt -hakemistosta, joten polku /opt/cvs/bin on lisättävä erikseen PATH- ja MANPATH-muuttujiin. Jotta polkuasetukset olisivat pysyviä kannattaa seuraavat rivit lisätä omaan .profile-tiedostoon:

     if [ "X$GROUP" = "X" ]; then
        export PATH="$PATH:/opt/cvs/bin"
        export MANPATH="$MANPATH:/opt/cvs/man"
     fi

CVS tarvitsee lisäksi ympäristömuuttujaa CVSROOT, joka pitää asettaa osoittamaan keskusvarastoon. Doka-ryhmän tapauksessa asetus on seuraava bash-ympäristössä:

     export CVSROOT="/home/group/doka/cvsroot"

Tämäkin asetus kannattanee tallentaa .profile -tiedostoon.

2.2 Modulin hakeminen varastosta paikallisesti editoitavaksi

Oma kopio CVS-modulista voidaan asentaa mihin tahansa oman kotihakemiston alle; kannattaa kuitenkin tehdä CVS-moduleille oma hakemistonsa, esim. ~/cvs - selkeyden vuoksi. Kun moduleita haetaan, pitää ensin siirtyä kyseisen hakemiston sisälle.

Moduli haetaan komennolla cvs checkout <moduli>. Doku-ryhmälle on luotu kolme eri modulia:

src
Lähdekoodin säilytystä varten.
doc
Dokumentaatiota varten.
ext
Ulkoista materiaalia (ohjeita, kirjastoja, speksejä jne.) varten.

Nämä modulit siis saadaan omaan käyttöön komennoilla:

     cvs checkout src
     cvs checkout doc
     cvs checkout ext

Kun moduli on siirtynyt paikalliseen hakemistoon, sen sisältämiä tiedostoja voidaan muokata vapaasti. Mitkään muutokset eivät vaikuta keskusvarastossa sijaitseviin versioituihin tiedostoihin niin kauan kuin muutoksia ei vahvisteta (ks. seuraava kappale). Toisaalta vahvistamattomat muutokset eivät myöskään pysy turvassa jos vaikka tiedostot vahingossa tuhotaan.

3 Työskentely

3.1 Kommentoinnista

CVS-komennot ovat yleensä muotoa:

     cvs <toiminto> [<tiedosto>]

Tiedostoa ei aina määritellä. Useat CVS-komennot kuitenkin haluavat käyttäjältä jonkinlaisen logimerkinnän, ja jos sitä ei anneta komentoriviltä, CVS käynnistää editorin sen kirjoittamista varten. Laitoksella tuntuu vakiona olevan editorina uemacs, jota en ainakaan itse hyvällä tahdollakaan saanut tunnistamaan Control-s -painallusta, joka siinä mappaantuu XON-komennoksi joka pysäyttää ruudun päivityksen (Control-q vapauttaa sen). En myöskään saanut systeemiä kunnioittamaan EDITOR-ympäristömuuttuja-asetustani, joten päädyin antamaan kommentit suoraan komentoriviltä. Tämä onnistuu -m - parametrilla, mutta on huomioitava että kommentti tulee sijoittaa komentorivillä heti toimintokomennon perään esim. seuraavasti:

     cvs commit -m "pari bugia korjattu" JokuTiedosto.java

3.2 Tiedostojen ja alihakemistojen lisäys

Jos halutaan lisätä versionhallintaan tiedosto joka ei ole siellä ennestään, se onnistuu add -komennolla:

     cvs add UusiTiedosto.java

add-komennolla voidaan lisätä myös uusia (omassa hakemistossa jo olemassaolevia) alihakemistoja:

     cvs add uusihakemisto

HUOM: Alihakemiston sisällä mahdollisesti olevat tiedostot tulee tällöin lisätä erikseen.

3.3 Muutosten vahvistaminen ja päivittäminen keskusvarastoon

Kun versionhallinnassa jo olemassaolevaan tiedostoon paikallisesti tehdyt muutokset halutaan vahvistaa ja siten päivittää keskusvarastoon, käytetään commit -komentoa:

     cvs commit UusiTiedosto.java

HUOM: Muutosten vahvistamista ei toki kannata harrastaa liian usein (esim. joka ikisen talletuksen jälkeen), vaan yleensä kun koodia on kertynyt olennaisesti lisää tai kun joku olennainen ominaisuus on implementoitu. Nyrkkisääntönä kerran vuorokaudessa (tai parissa) tehty commit on riittävä, olettaen tietysti että tiedostot ovat sinä aikana muuttuneet. Huomaa myös, että tekemäsi muutokset eivät näy muille ennenkuin tiedosto on päivitetty commit -komennolla.

3.4 Päivitysten hakeminen keskusvarastosta

Keskusvarastoon commit -komennolla tehdyt päivitykset saadaan näkyviin paikallisessa hakemistossa käyttämällä update -komentoa:

     cvs update

Tai, jos halutaan vain katsastaa erot oman kopion ja versionhallinnassa olevan kopion välillä ilman varsinaista päivitystä:

     cvs -n update

3.5 Tiedostojen poisto versiohallinnasta

Tiedoston poisto versiohallinnasta onnistuu remove -kommennolla:

     rm PoistoTiedosto.java
     cvs remove PoistoTiedosto.java
     cvs commit PoistoTiedosto.java

3.6 "Tagaaminen"

Kun jossain vaiheessa modulien sen hetkinen tila halutaan säilyttää jotta se voidaan aina tarvittaessa saada pakettina ulos, pitää kokonaisuus "tagata":

     cvs tag doka_31_5_2003

Tämän jälkeen kyseisen komennon aikaisen tilan tiedostot voidaan koska tahansa hakea komennolla:

     cvs export -r doka_31_5_2003