CVS Linux kliendi põhilised kasutusvõimalused
Sisukord
- 1 CVSi kasutamine
- 2 Hoidla kasutamine otse
- 3 Hoidla kasutamine CVSi serveri abil
- 4 Programmi cvs süntaks
- 5 Väljavõtte tegemine
- 6 Tööversiooni värskendamine
- 7 Sissekande tegemine
- 8 Tööversiooni kustutamine
- 9 Rutiinne CVSi kasutamine ja faili versioonid
- 10 Versioonikontrolli all oleva faili võimalikud olekud
- 11 Konfliktid
- 12 Faili hoidlasse lisamine ja sealt eemaldamine
- 13 Ajalugu ja logi
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