CVS Linux kliendi keerukamad kasutusvõimalused
Sisukord
Sümboolne nimi
Eeldab hoidla ja tööversiooni olemasolu; muudab hoidlat.
Igal versioonikontrolli all oleva failiga on seotud niipalju versioone, kui sellesse faili on muudatusi tehtud. Versiooni tähistatakse versiooninumbriga. Joonisel on kujutatud viie faili arengut. Nagu näha on mõnda faili muudetud rohkem kordi kui mõnda teist. Kasutajal on olnud tööversioonis kunagi selline seis selliste versioonidega failidest
versioon failinimi 1.5 fail-1 1.2 fail-2 1.1 fail-3 1.3 fail-4 1.1 fail-5
Et seda seisu hoidlast hiljem kätte saada, antakse hoidlas iga faili vastavale versioonile lisaks versiooninumbrile sümboolne nimi.
Joonisel kujutab hoidla tüvel olevate failide arengut hoidla versioonipuu
Toodud juhul on kasutatud kahte sümboolset nime. Nimi 'seis-1' tehti kunagi minevikus ja 'seis-2' just äsja.
Tööversioonile vastava seisu sümboolne nimi tekitatakse käsuga tag
Hoidlasse tehakse nimi tööversioonis olevate failide versioonide juurde. St kui tööversioonis on faili versioon 1.4, aga hoidlas on juba 1.6, siis nimi seostatakse hoidla faili versiooniga 1.4.
bash~$ cd energia bash~$ cvs tag seis-2
Nime eemaldamine
bash~$ cd energia bash~$ cvs tag -d seis-2
Nime eemaldamine ei eemalda hoidlast sisu, kuid jätab teid ilma võimalusest seda nime edaspidi kasutada, näiteks vastava väljavõtte tegemiseks.
Erinevad võimalused tööversiooni tekitamiseks
Punktis 'Rutiinne kasutamine' selgitati, kuidas toimub kõige igapäevasem CVSi kasutamine. Siin vaatleme veidramaid võimalusi tööversiooni tekitamiseks ja hoidlaga suhtlemiseks.
Väljavõtte tegemine sümboolse nime järgi
Et saada hoidlast kätte sümboolsele nimele 'seis-1' vastav projekti seis, andke käsk
bash~$ checkout -r seis-1 energia
Väljavõtte tegemine aja järgi
Väljavõte tekitab 4. jaanuaril aastal 2000 olnud hoidla seisuga tööversiooni
bash~$ checkout -r -D '2000-01-24 20:05' energia
Väljavõtte tegemine versiooninumbri järgi
Versiooninumbri järgi ei ole reeglina väljavõtet otstarbekas teha, va versioon 1.1'le vastab sama versiooninumbriga failidele erinev aeg.
bash~$ checkout -r 1.1 energia
Igal nimetatud viisil saadud väljavõttele on külge pandud kleebis, mis on seotud nime, aja või versiooninumbriga. Tehes nii moodustatud tööversioonile värskendust, värskendatakse kuni seisuni, millele kleebis viitab, st tavaliselt ei juhtu midagi.
Üks põhjus moodustada selliselt tööversiooni, on lihtsalt uurida varasemat seisu.
Teine, olulisem põhjus, on kaitsta end teise CVSi kasutajate poolt tehtavate muudatuste eest. Näiteks, soovides omada tööversiooni, kus kõik vastab 7. jaanuarile, välja arvatud kataloogis soojus, mida te värskendate tavalisel moel. Sellise olukorra saavutamiseks tuleb teha esialgu väljavõte aja järgi ja seejärel kleebis kataloogilt soojus eemaldada
bash~$ cd energia bash~$ update -A soojus
Kui selliselt moodustatud tööversiooni edaspidi värskendada, siis kaasajastatakse ainult kataloogi soojus alla jäävaid faile.
Olemasolevaid kleebiseid saab vaadata käsuga 'status'
bash~$ status kataloogi.või.failinimi
Tehes hoidlast väljavõtet või värskendust, saate te faili sisu suunata väljundisse, lisades CVSi käsule esimeseks võtmeks '-p'. Nii on kõige praktilisem saada kätte ja kohe ära kasutada vanu versioone, näiteks
bash~$ update -p -r 1.3 es1370.c > es1370-1.c
kus suunatakse väljund ümber uude faili.
Versioonimuudatuste lisamine ja eemaldamine tööversiooni failist
Kirjeldame ühte teoreetilist, et mitte öelda vähepraktilist, võimalust erinevatele versioonidele vastavate muudatuste väljavalimisest. Igal juhul avardab see arusaamist CVSi toimimisest.
Olgu hoidlas ja iga kasutaja tööversioonis failist algversioon. Nad kõik teevad muudatusi ja kannavad need järgemööda sisse.
Ülemisel joonisel on toodud muudatused, mida kasutajad teevad algversiooni suhtes; m 1 vastab algversioonile, m 2 esimese kasutaja tehtud muudatustele jne. Alumisel joonisel on kujutatud, kuidas peale iga sissekannet hoidla muutub; v 1 vastab hoidla algversioonile, v 1.2 seisule peale esimese kasutaja muudatust jne. Tõsi, toodud näide on 'ilus', sest iga järgmine muudatus ei muuda ühtegi eelnevat.
Soovides tekitada tööversiooni failist, mis vastab igas muus osas hoidla viimasele seisule, kuid millest puudub teine muudatus
bash~$ cvs checkout eneriga bash~$ cvs update -j 1.2 -j 1.1 energia/failinimi bash~$ cvs update -A energia
Soovides tekitada tööversiooni, milles on vaid neljas ja viies muudatus
bash~$ cvs checkout -r 1.1 energia bash~$ cvs update -j 1.3 -j 1.5 energia/failinimi bash~$ cvs update -A energia
Oletame, et teil on tööversioon failist versioon 1.4, kuid hoidlas on juba versioon 1.10; kui te soovite enda tööversiooni saada muudatusi, mis jäävad teie käesoleva ja näiteks 1.8 vahele, siis piisab ühest -j võtmest
bash~$ cvs update -j 1.8 failinimi
Nii loodud tööversiooni võite edasiseks hoidlaga suhtlemiseks kasutada tavalisel moel värskendust tehes, kusjuures teie tööversiooni lisatakse vaid neid muudatusi, mis on peale väljavõtet hoidlasse sisse kantud. Peale oma muudatuste sissekandmist saab hoidla viimane versioon arusaadavalt selliseks, kui teie tööversioon.
Kogu projektiga tegelemisel võib -j võtmete järel kasutada sümboolseid nimesid.
Versiooni märked
Eeldab hoidla ja tööversiooni olemasolu.
Hoidlast saadud failides endis pole kirjas faili versiooni kohta midagi. Tihti on aga soovitav, nt kommentaarides omada andmeid, millal fail hoidlasse sisestati, kes seda tegi jne.
Kui näiteks sisestada versioonikontrolli all olevasse faili mh:
<HTML> <HEAD> <TITLE>Kuidas hoolitseda suleliste sulgkatte eest</TITLE> </HEAD> <BODY> ...
siis tehes väljavõtet või eksporti ilmub selline tulemus:
<HTML> <HEAD> <TITLE>Kuidas hoolitseda suleliste sulgkatte eest</TITLE> </HEAD> <BODY> ...
Sel moel faili automaatselt ilmuvat teksti nimetatakse versiooni märkeks.
Järgmist sissekannet tehes ei pea te $Id ja $ vahelist käsitsi maha kustutama, CVS saab asjast iseseivalt õigesti aru.
Selgituseks märgime, et $Id$ asendatakse järgmiste väljadega:
* faili nimi hoidlas * versiooni number * selle versiooni loomise aeg * versiooni autor * olek, vaikimisi on olekuks Exp(erimental)
CVS tekitab versioonimärkeid hoidlast väljavõtte tegemisel, kuid infot selle kohta, kas ja kuidas teha asendusi, hoitakse hoidlas. Hoidlas olevate failide jaoks saab versioonimärgete tegemist muuta käsuga admin.
Enam ei soovita, et toimuks versioonimärgete tegemine
bash~$ cvs admin -kk failinimi
Toodud võtit võib kasutada ka co ja update käsuga. Sel juhul on tal ühekordne mõju.
bash~$ cvs co -kk energia
Soovides faili panna tagasi vaikimisi väärtuse juurde, et versioonimärgete tegemine toimuks
bash~$ cvs admin -kkv failinimi
Moodulid
Moodulite kasutamine teeb hoidlaga suhtlemise paindlikumaks. Soovides tegeleda ainult teatud failidega, mis asuvad mööda hoidlat laiali või nt. projekti ühes kataloogis, on võimalik nende poole pöörduda mooduli nime kasutades. Tehniliselt on projekt ise samuti moodul, mida ei ole vaja eraldi defineerida.
Moodulid defineeritakse hoidla administratiivse mooduli 'CVSROOT' failis modules. Et sinna teha muudatusi, tuleb teha väljavõte nagu tavaliselt ning pärast sissekanne.
Defineerime näiteks mooduli 'valgus', seostades ta projekti energia kataloogiga valgustus.
1. Teeme CVSi administratiivsetest failidest väljavõtte
bash~$ cvs co CVSROOT
2. Redigeerime tööversioonis faili CVSROOT/modules, lisades sinna juurde rea
valgus energia/valgustus
3. teeme sissekande
bash~$ cd CVSROOT bash~$ cvs ci -m "defineeritud moodul valgus"
Seejärel saab teha väljavõtet projektist energia ainult kataloogile energia/valgustus, kasutades moodulit 'valgus':
bash~$ cvs co valgus
Väliste programmide käivitamine
CVS'i saab panna käivitama programme vastavalt sellele, millise mooduli poole ja kuidas pöörduti, nt. saatma kirja kasutajale mart, kui keegi on mooduli 'valgus' sisse kandnud.
Selleks tuleb modules faili kanda rida
valgus -i /home/mart/bin/mail.mart energia/valgus
kusjuures mail.mart võiks sisaldada midagi sellist:
#!/bin/sh echo "Kirja saatja tegi sissekande moodulile $1" | sendmail mart
Peale sissekande saab käivitada programme järgmiste sündmuste puhul:
* -e: export * -o: väljavõte * -t: haru nime tekitamine; erandina on kaks argumenti: mooduli nimi ja haru nimi * -u: paigati tööversiooni
Kahendfailid
Kahendfailide hoidlasse paigutamine ei anna sellist tulemust, nagu see on tekstifailide puhul. Seda põhjusel, et tekstifailid jäävad ikkagi tekstifailideks, kui CVS automaatselt lõike ümber paigutab. Iga juhul saab kasutaja kergesti jälile, mis toimub, kui on tekkinud konflikt.
Kahendfailid on enamasti kindla struktuuriga (arhviivid, muusika, pildid) ja tehniliselt on CVSil keerukas lõike ümber paigutada nii, et tulemus jääks endisesse formaati. Seepärast CVS sisuliselt lisab hoidlasse vastava kahendfaili sisu uue versiooni ilmumisel.
Näiteks te kirjutate "Poeemis Pingviinile" igale poole sõna 'pingviin' ette sõna 'reibas'. Muutuse sissekandmisel CVS võrdleb teie töörversiooni hoidlaga ning füüsiliselt liiguvad hoidlasse ainult erinevused.
Kui te redigeerite natuke kõiki JPEG formaadis poeemis esinevaid pilte ja kujutate neil pingviini reipamalt, siis liigutab CVS hoidlasse terve uue pildi. Iga uus versioon kahendfailist lisatakse sellele failile, mis hoidlas talle vastab.
Vaikimisi väljavõtte tegemisel tekitatakse versioonimärkeid, kuid see võib ettekavatsematult toimuda ka kahendfaili sees ning rikuks kahendfaili, kusjuures raske oleks jõuda veale jälile.
Kahendfailide sissekandel tuleks nad lisada nii:
bash~$ cvs add -kb varblane.jpeg
Ning seejärel sisse kanda tavalisel moel:
bash~$ cvs ci -m "kahendfail varblane.jpeg"
Kui kahendfail on juba hoidlas, siis saab anda käsu, et selle faili puhul ei tehtaks vesioonimärkeid selliselt
bash~$ cvs admin -kb varblane.jpeg
Kui CVSi kasutatada üle võrgu ja erinevate OSide vahel, siis CVS teeb sarnaselt FTPle reavahetuste teisendusi.
Eksport
Kui aeg on küps projektist väljaande tegemiseks, siis tehakse eksport. Eksport on sarnane väljavõttele selle erinevusega, et ei tekitata CVSile vajalikke lisaandmeid; st eksporditud kataloogides puuduvad tööversioonile iseloomulikud CVSi nimelised alamkataloogid. Nii saab versioonikontrolli all olevad failid 'puhtalt' kätte. Eksporditud projekti ei saa kasutada hoidlaga edasiseks suhtlemiseks. Eksporti tehakse käsuga export
bash~$ cvs export -r seis-1 energia
Eksporti saab teha ka aja järgi:
bash$ cvs export -D '1/21/1999 15:28:18' energia
Ekporti ei saa teha versiooni järgi, kuivõrd versioon on faili omadus ja kindel võib olla vaid selles, et igal hoidlas olevast failist on olemas ainult esimene versioon.
Haru nimi
CVS ei piirdu ainult võimalusega lineaarselt projekti arendada, mille kohta öeldakse, et töötatakse tüvel. Võimalik on tekitada harusid, mis teevad võimalikuks mitme iseseisva arenduse olemasolu, jättes võimaluse neid aegajalt tüvega ühendada.
Vajadus haru järele võiks ilmneda näiteks siis, kui te arendate projekti ja otsustate välja anda esimese avaliku väljaande. Seejärel jätkub töö projekti kallal ning võimalikud on üsna kardinaalsed muutused võrreldes esimese väljaandega. Kui aga selgub, et väljaandes oli triviaalne viga ja arendus pole veel küps järgmiseks väljaandeks, siis oleks otstarbekas viia parandus sisse tehtud väljade vastavatesse failidesse ja anda välja selle põhjal esimese väljaande uuendus. Selliseid uuendusi võib tulla mitu.
Kujutame seda kõike piltlikult ja selgitame all näidetega. Faili versioonipuu kirjeldab ühe faili arengut ja ei käi kogu hoidla kui terviku kohta.
Kahekohalised versiooninumbrid näitavad, et tegu on tüvel asuva versiooniga. Neljakohalised viitavad vahetult tüvele kinnituval harul olevate failide versioonidele. Versiooninumber on alati paarisarvu kohtadega ja haru number paaritu arvu kohtadega.
Peamist arendust nimetakse tüvel toimuvaks ja näitena tehtud väljaandele vastavat arendust harul toimuvaks. Nagu näha, on võimalik tüvel asuvast harust välja kasvatada omakorda haru jne.
Tüvega saab ühendada harul tehtud muudatused, kui need on asjakohased üldise arenduse seisukohalt.
Antud joonisel on näha, et selle faili jaoks toimus esimene väljaanne tüve versioonilt 1.2. Sellelt kohalt tekitati kaks haru ja neid asuti iseseisvalt arendama.
Eeldusel, et tüvel on olemas sümboolne nimi 'seis-1' vaatlusaluse faili versiooni 1.2 juures, saab käsuga rtag tekitada haru nime
bash~$ cd energia bash~$ cvs rtag -b -r seis-1 va-1 eneriga
kus:
* -b näitab, et tekitatakse haru nimi (ingl. k. branch) * -r seis-1 näitab, millise sümboolse nime juurest haru tekib * 'va-1' on haru nimi; esimest väljaannet tehes eksporditi sümboolse nime seis-1 järgi * energia näitab, millise projektiga tegeldakse
Töö haruga
Nagu eelnevalt märgitud, on harude tekitamise peamine põhjus tehtud väljaannete iseseisev arendamine väljaannetesse paranduste sisseviimise eesmärgil.
Harule vastava väljavõtte tegemine
Soovides teha muudatusi väljaandele, st harule vastavatesse failidesse, peab kasutaja looma tööversiooni sellise väljavõttega
bash~$ cvs co -r va-1 eneriga
Harule vastava sissekande tegemine
Igasuguse nime peale tehtud väljavõte on kleepuv, mis tähendab antud juhul seda, et kõik selle tööversiooniga tehtav toimib ainult vastaval harul ja ei muuda tüvel ega teistel harudel midagi. Olles teinud tööversioonis muudatused, kantakse nad hoidlasse sisse selliselt
bash~$ cd energia bash~$ cvs ci -m "esimene parandus"
Haru ühendamine tüvega
Tihti on vajalik harus tehtud muudatused teha ka tüves. Seda võimaldab haru tüvega kokku ühendamine.
1. Harule vastavas tööversioonis andke haru seisule sümboolne nimi 'va-1-y1' esimese ühenduse-eelse seisu tähistamiseks, mida on hiljem ehk vaja
bash~$ cvs tag va-1-y1
2. Tehke hoidla tüve viimasest seisust kuhugi väljavõte:
bash~$ cvs co energia
3. Värskendage seda väljavõtet harule vastavate parandustega, see tähendab ühendage haru tüvega
bash~$ cd energia bash~$ cvs update -j va-1
Võimalik, et tekkivad konfliktid on vaja käsitsi lahendada.
4. Tehke hoidlasse tüvelt tehtud ja harult värskendatud väljavõttele sissekanne:
bash~$ cvs ci -m "Haru va-1 muudatused kuni haru sümboolse märkeni va-1-y1 sisseviidud"
Kui teil on plaan haru edasi arendada ja ta uuesti tüvega ühendada, siis peab arvestama, et järgmisel korral liidetakse tüvega vaid uued muudatused
bash~$ cvs update -j va-1-y1 -j va-1 bash~$ cvs ci -m "Haru va-1 muudatused sümboolsest nimest va-1-y1 kuni haru viimase seisuni sisseviidud"
Idee poolest on harule tehtud muudatuste viimine tüvele sarnane punktis 'Versioonimuudatuste lisamine ja eemaldamine tööversiooni failist' kirjeldatuga.
© EENet 2000