CVS Linux kliendi põhilised kasutusvõimalused

Allikas: Kuutõrvaja

CVSi kasutamine

Kui te liitute CVSi all arendatava projektiga, siis projektijuht teatab teile hoidla asukoha (nt cvs.zoo.tartu.ee:/home/priit/repo) ja projekti nime. (nt energia).

CVSi hoidlaga saab suhelda kahel viisil:

  • otse (koorik, rsh, ssh) - autentimiseks kasutatakse UNIXi autentimissüsteemi; teil peab olema hoidla masina UNIXi kasutaja
  • CVSi serveri (pserver) abil - autentimist korraldab CVSi server; teil ei pruugi olla hoidla masina UNIXi kasutajat, kuid peate olema registreeritud CVSi serveri paroolifailis või autentimissüsteemis, mida CVS kasutab (nt Kerberos); CVSi serveri kasutajal on CVSi kasutajanimi ja CVSi parool

CVSi kliendi toimimist reguleerivad kaks keskkonnamuutujat

  • CVSROOT - hoidla asukoht
  • CVS_RSH - kasutatav tunnel

Hoidla kasutamine otse

Sellisel juhul peate te olema UNIXi kasutaja hoidla masinas.

Kui tööversioon ja hoidla asuvad samas masinas, siis seadke keskkonnamuutuja CVSROOT, näiteks selliseks

bash$ export CVSROOT="/home/priit/repo"

Olles loginud end masinasse, saate anda ilma pikemata CVSi käske.

Kui te töötate valdavalt mõne teise masina taga ja soovite, et tööversioon asuks seal, saate te hoidlaga suhelda kauge kooriku abil. Seda on soovitav teha SSH abil kui RSHga.

Selleks seadke tööversiooni masinas paika keskkonnamuutujad CVS_RSH ja CVSROOT, näiteks sellisteks:

export CVS_RSH=ssh
export CVSROOT=:ext:mart@reptilius.zoo.tartu.ee:/home/priit/repo

kus kasutajanimi hoidla masinas (cvs.zoo.tartu.ee) on mart.

Kui te eelistate mingil põhjusel kasutada RSHd, omistage keskkonnamuutujale CVS_RSH väärtus 'rsh'.

Tavapärasel moel CVSi käske andes toimetatakse võrguühendust ning vajadusel küsitakse teilt hoidla masina UNIXi kasutaja (mart) parooli. Siinkohal on arukas SSH võtmeid mälus hoida.

Hoidla kasutamine CVSi serveri abil

CVSi serveri kasutamine võimaldab projektis osaleda tegelastel, kes võivad, aga ei pea olema hoidla masina UNIXi kasutajad.

CVSi serveri kasutamiseks teatab projektijuht teile

   * CVSi kasutajanime
   * CVSi parooli
   * hoidla asukoha
   * projekti nime 

Keskkonnamuutuja CVSROOT tuleb seada näiteks selliseks

bash~$ export CVSROOT=:pserver:mart@reptilius.zoo.tartu.ee:/home/priit/repo

CVSi kasutamist peate alustama korraldusega

bash~$ cvs login

Peale parooli kontrolli salvestatakse see kasutaja kohaliku masina faili ~/.cvspass. CVSi kasutamise lõpetamisel logite end välja käsuga

bash~$ cvs logout

siis fail ~/.cvspass kustutatakse.

Kui ühendus kauge hoidla masinaga on aeglane, siis annab CVSi kasutamine niisama failide kopeerimisega võrreldes olulise eelise. Nimelt, CVS liigutab masinate vahel failide erinevusi, aga mitte faile endid.

CVSi kasutamisel üle võrgu toimub kõik nii nagu kasutamisel hoidlaga samast masinast, välja arvatud eriliselt seatud vastavad keskkonnamuutujad.

Programmi cvs süntaks

CVSi kasutamine toimub käsurealt käivitades programmi cvs. Programmi süntaks on järgmine, kusjuures suvalised kombinatsioonid ei pruugi omada tähendust:

bash~$ cvs [ cvsi võti ] käsk [ käsu võti ] [ argumendid ]

cvsi võti määrab üldist toimimist:

   * -H abi
   * -q toimib vaikselt
   * -Q päris vaikselt
   * '-d xxx' kus xxx näitab repositoorimi asukoha
   * '-e editori nimi' näitab millega redigeeritakse kommentaare
   * -n ei muudeta midagi
   * -v näitab programmi versioon
   * '-z kokkupakkimise tase' näitab kui efektiivselt gzip repositooriumiga suhtlemisel andmeid pakib
   * -r loodav tööversioon saab olema vaid lugemisekõigusega 

Programmi sisseehitatud abi:

   * 'cvs --help-commands' näete cvs'i parameetreid
   * 'cvs --help-synonyms' näete cvs'i parameetrite sünonüüme
   * 'cvs --help-options' näete cvs'i võtmeid
   * 'cvs -H käsk' näete käsu-spetsiifilist abi 

CVSi kasutamisel on oluline, kus kataloogis olles te käske annate. Püüame sellele tähelepanu juhtida. CVSi käsud on rekursiivsed, mis tähendab, et andes käsu kataloogis, toimib see selle kataloogi sisule ja kõigele sealt allapoole jäävale. CVS ei toeta linke.

Osa CVSi käske:

   * eeldavad, et te omate tööversiooni osa mitte
   * teevad muutusi teie tööversiooni
   * teevad muutusi hoidlasse
   * ei tee muutusi 

Sellele viidatakse iga punkti alguses.

Väljavõtte tegemine

Eeldab hoidla olemasolu.

Väljavõtte tegemisel saab kasutaja hoidlast projektile vastavate failidega kataloogistruktuuri, mida nimetatakse kasutaja tööversiooniks. Seejärel saab ta hakata tegema muudatusi oma tööversiooni failidesse. Näites tehakse käsuga checkout väljavõte projektist 'energia', mille tulemusena moodustub kasutaja tööversioon.

bash~$ cvs checkout eneriga
cvs checkout: Updating energia
cvs checkout: Updating energia/kyte
cvs checkout: Updating energia/toit
U energia/toit/hommik
U energia/toit/louna
U energia/toit/ohtu
cvs checkout: Updating energia/valgustus
U energia/valgustus/expo
U energia/valgustus/muuseum
U energia/valgustus/pelikanid
U energia/valgustus/pingviinid

Kui ei tarvitata erivõtteid, on kasutaja tööversioon õigustega 'rw-r--r--' ning kataloogid sisenetavad. Tööversioon tekib käesolevasse kataloogi.

Rea alguses olevate tähtede tähendused:

  • U - hoidlast tuuakse tööversiooni uus fail

CVSi all arendatava projektiga liitumiseks tuleb põhimõtteliselt teha vaid üks kord, kõige alguses väljavõte.

Tööversiooni värskendamine

Eeldab hoidla ja tööversiooni olemasolu; muudab tööversiooni.

Värskendamine tähendab oma tööversiooni viimist hoidlaga kooskõlla. Kui näiteks keegi teine kasutaja on peale teie viimast värskendust lisanud hoidlasse faile või muutnud hoidlas olevaid faile, siis lisatakse teie tööversiooni vastavad failid või vastavad failid paigatakse. Peale värskendamist on teie tööversioon igas muus osas selline nagu hoidla, kuid lisaks on seal teie tehtud muudatused.

Tööversiooni tuleks värskendada pigem tihedamini kui harvemini, sest nii on konfliktid vähemtõenäolised.

Värskendamine toimub käsuga update

bash~$ cd energia
bash~$ cvs update

Värskendamist on võimalik teha ka failikaupa, kusjuures tuleb olla failiga samas kataloogis

bash~$ cvs update failinimi

Siiski, tavaliselt pöördutakse terve projekti poole korraga.

Soovides tuua oma tööversiooni teiste kasutajate poolt hoidlasse lisatud faile ja katalooge, kasutage käsku update võtmega -d

bash~$ cd energia
bash~$ cvs update -d

Värskendamise väljundi ridade alguses olevate tähtede tähendused:

  • U - tööversioonis puudus fail, mis oli vahepeal hoidlsse lisandunud;
  • A - te olete faili lisanud tööversiooni, kuid te pole seda veel hoidlasse vastavat sissekannet teinud
  • R - te olete faili eemaldanud tööversioonist, kuid pole hoidlasse vastavat sissekannet teinud
  • P - tööversioonis pole fail peale viimast värskendust muudetud, kuid hoidlas on uuem versioon; tööversiooni paigatakse.
  • M - peale viimast värskendust on nii tööversioonis kui ka hoidlas faili muudetud; tööversiooni paigatakse ja see toimub ilma konfliktideta.
  • C - peale viimast värskendust on nii tööversioonis kui ka hoidlas faili muudetud; tööversiooni paigatakse ja see toimub konfliktidega, mis tuleb tööversioonis käsitsi lahendada
  •  ? - tööversioonis on fail, mida pole versioonikontrolli alla pandud (käsk 'add' on tegemata)

Värskendamise väljundist saab teada kas tekib konflite. Kui te tekkinud konflite ei lahenda, siis ei saa kõnealust faili hoidlasse sisse kanda.

Sissekande tegemine

Eeldab hoidla ja tööversiooni olemasolu; muudab hoidlat.

Sissekannet tehakse selleks, et paigutada oma muudatused hoidlasse. Samuti selleks, et hoidlast eemaldada või sinna lisada faile ja katalooge. Vahetult enne sissekannet tuleks oma tööversioon värskendada. Siiski, sissekande ajal antakse teile vastuoludest teada. Sissekandeks kasutatakse käsku commit

bash~$ cd energia
bash~$ cvs commit -m "Haudekoha soojusbilansi algoritm nyyd rekursiivne"

Ka sissekannet saaks teha failikaupa, selleks tuleb olla failiga samas kataloogis

bash~$ cd energia/toit
bash~$ cvs commit -m "Hommikutoit" failinimi

Vahetult käsu järgi on vaja kirjutada '-m "sissekande kommentaar"'; kui te seda ei tee, avab CVS vaikimisi seatud tekstiredaktori. CVSi ajalugu uurides on neist kommentaaridest abi. Kui te soovite iga faili kohta sisestada erinevat kommentaari, peate faili sisse kandma üks haaval.

Tööversiooni kustutamine

Eeldab hoidla ja tööversiooni olemasolu. Muudab tööversiooni.

Kui projekt võtab ootuspäraselt palju aega ning sellega kaasneb mitmeid muutusi, siis on loomulik, et te ei kustuta oma väljavõtet, vaid värskendate seda vastavalt vajadusele.

Siiski, võimalik on oma tööversiooni ka kustutada käsuga release

bash~$ ls
energia
...
bash~$ cvs release -d energia

Te võite ka lihtsalt anda korralduse:

bash~$ rm -fr energia

kuid see on liiga 'kirurgiline', kuigi ei kahjusta hoidlat. Esimese variandi eeliseks on, et kontrollitakse, kas te ikka olete kõik oma muudatused hoidlasse sisse kandnud. Samuti tehakse vastav sissekanne CVSi logisse.

Rutiinne CVSi kasutamine ja faili versioonid

Ideaalsel juhul õnnestub CVSi kasutamine ilma konfliktideta. Iga kasutaja teeb projektiga liitudes ükskord hoidlast väljavõtte ja saab nii endale tööversiooni. Selle tööversiooni kataloogistruktuur sisaldab kõike vajalikku edasiseks hoidlaga suhtlemiseks. See tähendab, et vajadusel võib tööversiooni kokku pakkida ja tõsta ümber teise arvutisse ja CVSi sealt edasi kasutada.

Et vältida konflite, tuleb võimalikult/mõistlikult tihti värskendada oma tööversiooni ja teha sissekandeid hoidlasse. Loomulikum on teha enne värskendus ja seejärel sissekanne.

Igal versioonikontrolli all oleval failil on üks või mitu versiooni, kusjuures faili iga versiooni tähistatakse versiooninumbriga. Kasutajal pole vaja versiooninumbritele tavaliselt tähelepanu pöörata, sest CVS tekitab need automaatselt ja kasutab sisemiselt.

Omades tööversiooni saate vaadata, mis seis failiga on

bash~$ cvs status -v toit/hommik
===================================================================
File: hommik                             Status: Up-to-date
Working revision:    1.1.1.1   Mon Dec  6 15:17:01 1999
Repository revision: 1.1.1.1   /home/priit/repo/energia/toit/hommik,v
Sticky Tag:     (none)
Sticky Date:    (none)
Sticky Options: (none)
Existing Tags:
rt (revision: 1.1.1.1)
vt (branch: 1.1.1)

Antud juhul on tegemist failiga hommik, mida pole veel keegi redigeerinud. Tegu on faili algversiooniga. Pange tähele, et tööversiooni versioon ja hoidla versioon on algväärtustega (1.1.1.1). Ära on toodud tööversioonis oleva faili viimase muutmise aeg ning talle vastava hoidla faili nimi koos teega.

Teistest andmetest tuleb juttu hiljem.

Kui kasutajad on failiga veidi tegelenud, siis võiks selle käsu väljund olla selline:

===================================================================

File: hommik                              Status: Needs Merge
Working revision:    1.4 Mon Dec 6 15:37:55 1999 
Repository revision: 1.5 /home/imre/repo/energia/toit/hommik,v
Sticky Tag:     (none)
Sticky Date:    (none)
Sticky Options: (none)
Existing Tags:
rt (revision: 1.1.1.1)
vt (branch: 1.1.1)

Siin on näha, et hoidlasse on keegi teinud sissekande peale seda, kui teie tegite oma viimase värskenduse. Probleemile viitab ka 'Status: Needs Merge' samal ajal kui see eelmises näites oli 'Status: Up-to-date'.

Versioonikontrolli all oleva faili võimalikud olekud

Sõltuvalt sellest, kuna te tegite värskenduse ja mida tegid hoidlaga teised kasutajad, võivad teie väljavõttes sisalduvatel failidel olla järgmised olekud:

  • Up-to-date: Fail vastab hoidla viimasele versioonile.
  • Locally Modified: Faili sisu on muudetud, kuid hoidlasse pole sissekannet tehtud.
  • Locally added: Fail on kohalikult lisatud käsuga 'add' versioonikontrolli all, kuid hoidlasse pole sisse kantud.
  • Locally Removed: Fail on kohalikult kustutatud käsuga 'remove', kuid hoidlasse pole muutus kantud.
  • Needs Checkout, Needs Patch: Keegi on peale teie väljavõtte tegemist kandnud hoidlasse sisse uue versiooni. Teie pole faili redigeerinud.
  • Needs Merge: Hoidlas on failist uuem versioon, kui teie väljavõtte tegemise ajal ning te ise olete faili muutnud. Sellele tuleks regeerida käsuga 'cvs update'.
  • Unresolved conflict: Peale paikamist (merge) tekkisid konfliktid, mis tuleb käsitsi lahendada.
  • Unknown: Kavatsusega lisada versioonikontrolli alla uus fail, olete te faili tekitanud, kuid pole kasutanud käsku 'add'.

Konfliktid

Konflikt esineb tööversiooni värskendamisel juhul, kui kasutaja on oma tööversioonis faili mingit lõiku redigeerinud ning hoidlas on samast failist uuem versioon, kusjuures kõnealust lõiku on ka selle uue versiooni tekitaja redigeeritud.

Selgitame konflikti ja selle lahendamist näitega. Olgu olnud hoidlas algselt tekstifail aasta, milles on reas kalendrikuude nimed. Teie ja keegi veel tegi hoidlast väljavõtte. Teie kirjutasite juunikuu kohta kommentaariks 'vihmane kuu'. Teine kasutaja oli märkinud juunikuu kommentaariks 'ilus kuu' ning selle muudatuse enne teid ka hoidlasse sisse kandnud. Kui nüüd teie paikate oma tööversiooni, siis te saate sellised teated:

bash~$ cd energia
bash~$ /eneriga$ cvs update
cvs update: Updating .
RCS file: /home/priit/repo/energia/aasta,v
retrieving revision 1.1
retrieving revision 1.2
Merging differences between 1.1 and 1.2 into aasta
rcsmerge: warning: conflicts during merge
cvs update: conflicts found in aasta
C aasta

Paikamisel cvs ei kustuta ega asenda mingil juhul teie kohalikku versiooni. Ta lisab <<<<<<<< ja >>>>>>>> märkide vahele nii kohaliku kui seejärel eraldatuna ==========='tega hoidlast saadud uue versiooni. See näeb tekstifailis välja nii:

jaanuar
veebruar
märts
aprill
mai
<<<<<<< aasta
juuni vihmane kuu
=======
juuni ilus kuu
>>>>>>> 1.2
juulil
august
september
oktoober
november
detsember

Peale selle salvestatakse teie faili paikamise-eelne seis sama nime alla, kuid alustades '.#'ga, seega '.#aasta'. Nüüd peate te ise otsustama, kelle sõna järgmises versioonis peale jääb, kas selle, kes hoidlasse hiljuti sissekande tegi või teie oma. Mis kindel, sissekannet tehes ei tohi failis esineda <<<<<<<< ja >>>>>>>> märke.

Märgime, et kui teie oleksite kommenteerinud mõne sõnaga veebruarikuud ja teine novembrit, poleks konflikti tekkinud ning lõpuks oleks hoidlasse saanud fail, kus oleksid olnud mõlemal real kommentaarid.

Faili hoidlasse lisamine ja sealt eemaldamine

Eeldab tööversiooni ja hoidla olemaolu; muudab mõlemat.

Esmalt tekitage fail või kataloog sobivasse kohta oma tööversioonis. Seejärel kasutage käsku add

bash~$ cd energia/toit
bash~$ mkdir lounaoode
bash~$ date > oi.aeg
bash~$ cvs add lounaoode oi.aeg

Faili eemaldamine toimub sarnaselt: esmalt eemaldage fail tööversioonist käsuga remove

bash~$ cvs remove oi.aeg

Järgneva sissekande tegemisel viiakse muudatused hoidlasse. Failide kustutamisel ei hävitata neid siiski hoidlast. Neid saab kätte, tehes väljavõtet piisavalt varase aja või hoidla märke järgi.

Kataloogil pole versiooninumbrit ja katalooge ei saagi eemaldada. Tööversiooni tühje katalooge vaikimisi ei tekitata.

Ajalugu ja logi

Eeldab hoidla olemasolu.

CVS talletab koos versioonide sisuga ka info selle kohta, kes midagi tegi ja kuna lisades ka -m järele sisestatud kommentaari. Käsu log abil on võimalik näha, kes faili versiooni tekitas ja ka kommentaari

cvs log energia/failinimi

Kusjuures saab kasutada võtmeid

  • -b näita käesoleva haru versioonide andmeid
  • -r1.4 näita versiooni 1.4 andmeid
  • -wpriit näita vaid kasutaja priit poolt tehtud versioonide andmeid

CVS hoiab kõigi hoidlaga tehtud toimingute kohta infot failis history. Käsu history abil saab uurida selle faili sisu.

Vaatame kõikide kasutajate (-a) poolt failiga eneriga/failinimi (-f) tehtud sissekannete (-c) kohta andmeid

cvs history -c -a -f energia/failinimi

Vaatame, milliseid faile on projekti energia käsuga add juurde lisatud

cvs history -xA -a -f energia/*

© EENet 2000