|
CVS:n asennus ja käyttö
Lyhyt oppimäärä
1. Yleistä
CVS eli Concurrent Version System on
versionhallintajärjestelmä, jonka avulla joukko kehittäjiä voi
synkronisoida lähdekoodinsa.
Kullakin CVS:ää käyttävällä projektin ohjelmoijalla on oma kopionsa
kaikista CVS:n hallitsemista tiedostoista. Tiedostoihin tehdyt
muutokset toimitetaan (commit) CVS-palvelimelle, josta toiset
käyttäjät taas voivat päivittää (update) ne itselleen aina kun
haluavat.
CVS käyttää (sisäisesti ja täysin näkymättömästi) diff(1) ja
patch(1) -ohjelmia (kts. man-sivut) päivitysten tekemiseen
erityisellä yhdistysmenetelmällä. Tämän ansiosta jokainen ohjelmoija
voi tehdä samanaikaisesti ja toisistaan riippumatta muutoksia omaan
kappaleeseensa samasta tiedostosta, ilman että tiedostoa tarvitsee
millään lailla lukita tai että muutoksia kopioiden välillä tarvitsisi
siirtää välittömästi. Kannattaa kuitenkin huomata, että yhteen
tiedostoon samanaikaisesti kohdistuneiden muutosten synkronisointi
ei ole täysin idioottivarmaa, vaan muutokset saattavat
johtaa ristiriitoihin, joiden selvittäminen
on kuitenkin varsin yksinkertaista.
CVS käyttää pohjanaan RCS (Revision Control System)
versionhallintajärjestelmää. Sen avulla on mikä tahansa aikaisempi
(toimitettu) tilanne tiedostoista palautettavissa. Kehityksen voi myös
haarauttaa (branching) kahteen tai useampaan kehityshaaraan, ja
myöhemmin taas sulauttaa (merging).
Jos haluaa tarkempaa käyttäjätunnuskontrollia eri projektin välillä,
voi jokaista sellaista projektia kohden, jolla on erillinen
kehitysryhmä, luoda oman CVS-palvelimensa. Kuitenkin käytännössä,
varsinkin jos kyseessä on GPL-projekteja ja oletetaan että kehittäjiin
voi jossain määrin luottaa, kannattaa kaikkien projektien käyttää
samaa palvelinta.
Yhteensopivuus
CVS on saatavilla ainakin seuraaville käyttöjärjestelmille:
- Unix (Linux, jne.)
- VMS
- Windows 95/NT
- OS/2
- Macintosh
- jne...
Versionumerointi
Jokaisella CVS-hallitulla tiedostolla on yksilöllinen versio- eli
revisionumero. Numerointi alkaa tavallisesti numerosta
1.1, ja kasvaa 1.2, 1.3, ...
Tiedostokohtaisilla versio- eli revisionumeroilla ei ole mitään
tekemistä ohjelman yleisen versionumeron eli julkaisunumeron
kanssa, joka tyypillisellä uudelle projektilla voisi olla vaikkapa
0.1 tai 0.0.1, ja ensimmäisellä vakaalla versiolla 1.0.
Aputyökalut
Kehitysympäristöistä ainakin KDevelop ja Emacs tukevat CVS:ää
jotenkuten. Niiden käyttöä ei tässä esitellä sen enempää, sillä
komentoriviliittymälläkin pääsee jo melko pitkälle, ja aputyökalujakin
käytettäessä tämän komentoriviliittymän tunteminen on hyödyksi.
CVS ei ole build-järjestelmä kuten make(1)+Makefile tai
automake ja autoconf. Niitä voi kuitenkin käyttää
sujuvasti CVS:n kanssa yhteistyössä.
Y2K
CVS käsittelee vuosilukuja kaksinumeroisina. Tämä voi aiheuttaa
ongelmia, erityisesti vanhemmissa versioissa (ennen vuotta 1999
julkaistuissa). Yleisesti ottaen tämä ei kuitenkaan ole oleellinen
ongelma.
Lisäohjeet
Lisäohjeita saa asennuksen jälkeen komennolla:
$ info cvs
Lyhyen ohjeen saa komennolla:
$ man cvs
CVS:n laajemmat dokumenttitiedostot, kuten PostScript-muodoinen
ohjekirja, sijaitsevat tyypillisesti hakemistossa
/usr/doc/cvs-<versionumero>/.
Tietoa on saatavilla myös osoitteista:
Tämän ohjeen pienimmistäkin virheistä ja puutteellisuuksista saa
valittaa allekirjoittaneelle.
2. CVS:n käyttö
Seuraavassa kuvataan, miten CVS:n käyttäjä asentaa ympäristön
itselleen, ja miten CVS:ää käytetään.
Tässä oletetaan, että CVS-ohjelmapaketti on asennettu käyttäjän
koneeseen. Asiakasohjelma cvs on yleensä asennettu
hakemistoon /usr/bin tai /usr/local/bin, eli sen pitäisi
oletuksena löytyä polusta. Mikäli näin ei ole, katso asennusohjeet alla.
2.1. Käyttöönotto
Ensimmäiseksi pitää asettaa CVSROOT-ympäristömuuttuja, joka helpottaa
cvs-komennon käyttöä huomattavasti. CVS-palvelimen ylläpitäjä
yleensä kertoo tarkan CVSROOT:in
henkilökohtaisesti. bash-kuoressa se asetetaan
seuraavasti:
export CVSROOT=":pserver:muntunnus@cvs.palvelin.fi:/usr/local/etc/cvsroot"
jossa muntunnus ja palvelimen nimi pitää asettaa
CVS-palvelinta vastaaviksi. Palvelimen nimen jälkeen tuleva
cvsroot-polku on sama kuin palvelimessa.
Mikäli käyttäjällä on käyttäjätunnus CVS-palvelinkoneella, voidaan käyttää
myös esimerkiksi turvallista ssh:ta:
export CVS_RSH="ssh"
export CVSROOT="muntunnus@cvs.palvelin.fi:/usr/local/etc/cvsroot"
Mikäli käyttäjä tekee kehitystä samalla koneella kuin
palvelin, voidaan käyttää suorempaa menetelmää:
export CVSROOT=":local:/usr/local/etc/cvsroot"
Mikäli käyttää vain yhtä CVS-palvelinta, kannattaa ympäristömuuttujan
asetus laittaa tiedostoon ~/.bashrc (mikäli käyttäjän kuorena
on bash). tcsh-kuoressa vastaava tehdään
setenv-komennolla
~/.cshrc-tiedostossa. Ympäristömuuttuja saadaan voimaan
käynnistämällä uusi kuori, tai lukemalla muutettu asetustiedosto,
bash:issä:
$ source ~/.bashrc
Toinen vaihtoehto on antaa CVSROOT-polku cvs-ohjelmalle aina
-d -lipulla.
CVS:n polun ja käyttäjätunnuksen pitäisi nyt olla oikein, ja
ensimmäinen CVS-istunto voidaan aloittaa.
2.2. CVS-istunto - login...logout
CVS-istunto aloitetaan komennolla
~$ cd src
~/src$ cvs login projekti
Logging in to muntunnus@cvs.palvelin.fi)
CVS password: <tähän salasana jonka sait CVS-ylläpitäjältä>
~/src$
Ensimmäisellä login-kerralla tämä luo käyttäjälle
projekti-alihakemiston, ja laittaa sinne
CVS-versionhallintaan liittyvät alihakemistot (joihin ei saa
koskea). Käyttäjän tulee heti tämän jälkeen tehdä checkout
(kts. alla).
Huomionarvoista: Sisäänkirjautuminen tallentaa eri cvs-kohtaiden
salasanat tiedostoon ~/.cvspass:
~/src$ cat ~/.cvspass
:pserver:muntunnus@cvs.palvelin.fi:/usr/local/etc/cvsroot AZy'yZy=y
:pserver:toinentunnus@toinen.projekti.fi:/data/cvs A'@as+fGs
Uloskirjautuminen - logout
CVS-istunto voidaan vastaavasti lopettaa komennolla
~/src$ cvs logout
vaikkakaan tämä ei yleensä ole tarpeellista.
2.3. Projektiin liittyminen - checkout
Oma kappale projektista päivitetään CVS-palvelinta vastaavaksi
checkout-komennolla, joka tarvittaessa luo koko projektipuun
nykyhakemiston alle:
~$ cd src
~/src$ cvs checkout projekti
cvs server: Updating projekti
U projekti/foo.txt
U projekti/munohjelma.c
U projekti/munohjelma.h
cvs server: Updating projekti/common
U projekti/common/pararr.h
U projekti/common/table.h
~/src$
Katso rivin alussa olevien merkkien selitykset update-komennon ohjeesta.
Checkoutia käytetään yleensä vain projektiin liityttäessä, myöhemmin
käytetään pääsääntöisesti updatea.
HUOMAA! Checkout tulee AINA tehdä projektihakemistoa ylemmässä
hakemistossa. Jos sen tekee jossain muualla, luodaan koko
CVS-hakemistopuu tuon toisen hakemiston alle, mikä tuskin on
tarkoitus.
2.4. Synkronisoinnin tekeminen - update
update tekee päivityksen aivan kuten checkout, mutta sen voi tehdä
CVS-hallitun kehityspuun missä alihakemistossa hyvänsä, ja se tekee
päivityksen vain kyseisessä alipuussa. Päivityksen voi tehdä myös
tiedostokohtaisesti, antamalla parametriksi päivitystä kaipaavat
tiedostot.
~/src$ cvs update
cvs server: Updating projekti
? projekti/Makefile
U projekti/README
M projekti/munohjelma.c
M projekti/munohjelma.h
cvs server: Updating projekti/common
U projekti/common/pararr.h
U projekti/common/table.h
~/src$
Rivien alussa olevien merkkikoodien merkitykset:
Merkki | Selitys |
? | paikallinen tiedosto, joka ei ole
CVS-hallinnassa. |
U | tiedosto, johon päivitettiin
muutoksia, tai uusi tiedosto. Jos nyt teemme muutoksia
kyseisenlaiseen tiedostoon, muuttuu se M-tilaan
(alla). |
M | tiedosto, jossa on paikallisia
muutoksia. Muutokset päivitetään palvelimelle (ja sen kautta muille
kehittäjille) vasta kun cvs commit -komento on annettu
(kts. alla). |
C |
ristiriitatilanne jonkun muun toimittaman väliversion ja
paikallisen version välillä. |
update -n vain tarkistaa palvelimelta, mitkä tiedostot ovat
muuttuneet, muttei varsinaisesti tee päivitystä.
2.5. Muutosten toimittaminen - commit
CVS-hallittuihin tiedostoihin tehdyt paikalliset muutokset toimitetaan
palvelimelle commit-komennolla. Esimerkiksi:
~/src/projekti$ jed myfile.c
...
~/src/projekti$ cvs commit -m "Lisäsin jutun X" myfile.c
Checking in myfile.c;
/usr/local/etc/cvsroot/projekti/myfile.c,v <-- myfile.c
new revision: 1.2; previous revision: 1.1
done
~/src/projekti$
Tässä esimerkissä muokattiin vain yhtä tiedostoa myfile.c ja
toimitettiin se palvelimen haltuun. Mikäli commitille ei anneta mitään
tiedostonimeä, toimittaa se saman tien kaikki muutetut tiedostot, mikä
yleensä on ehkä helpointakin.
Commitille tulee antaa kommentti -m -vivulla. Mikäli sitä ei anneta
komentorivillä, käynnistää cvs tekstieditorin, johon
kommentit voi kirjoittaa. Käytettävä editori määritellään CVSEDITOR-
(ensisijainen), EDITOR- tai VISUAL-ympäristömuuttujilla (muutoin
käytetään oletuksena vi:tä).
Yllä vilahtaa myös versionumerointia. Tiedostojen versionumerointi
alkaa numerosta 1.1 ja kasvaa aina muutoksia tehtäessä.
Mikäli joku toinen on ehtinyt tehdä samaan tiedostoon muutoksia, jotka
menevät päällekkäin itse tehtyjen muutosten kanssa, saattaa seurata ristiriitatilanne, jonka selvittäminen on
kuitenkin suhteellisen helppoa (kts. alla).
Milloin toimittaa?
Toimituksia kannattaa tehdä "sopivan usein". Jos niitä tekee liian
harvoin, ovat muut kehittäjät saattaneet tehdä paljon muutoksia
tiedostoihin, mikä saattaa johtaa ristiriitoihin. Liian harvoin
toimitettaessa muut kehittäjät eivät myöskään pääse hyötymään toisten
tekemistä muutoksista tai varautumaan niihin. Usein pidetään
käytäntönä, että ohjelman tulisi kääntyä toimitettaessa. Jotkin
kehitysryhmät jopa testaavat tämän automaattisesti. Kehitysprojektin
alkuvaiheessa se ei kuitenkaan usein ole tarpeellista.
2.6. Ristiriidat toimituksissa
Ristiriitoja saattaa tapahtua, kun useampi ohjelmoija muokkaa samaa
tiedostoa samanaikaisesti. Ajatellaan esimerksi, että molemmat ovat
lähteneet muokkaamaan versiota 1.2. Toinen toimittaa muutoksensa
1.3:ksi. Tämän jälkeen toinen ohjelmoija yrittää toimittaa omansa
1.4:ksi. Mikäli näiden kahden tekemät muutokset menevät tiedostossa
päällekkäin - esimerkiksi kohdistuvat samoihin riveihin, seuraa
ristiriitatilanne.
Otetaan esimerkiksi lyhyt ohjelma, jonka versioon 1.2 Kalle on tehnyt
muutoksensa ja toimittanut ne versioksi 1.3:
Alkuperäinen 1.2 | Muutettu A -> 1.3 |
---|
/**
* $Author$ $Revision: 1.2 $
* $Log$
**/
#include <stdio.h>
void main() {
printf ("Hello, World!\n");
} |
/**
* $Author: kalle $ $Revision: 1.3 $
* $Log: munohjelma.c,v $
* Revision 1.3 1999/11/12 02:21:12 kalle
* Lisäsin paluuarvon main():iin
**/
#include <stdio.h>
int main() {
printf ("Hello, World!\n");
return 0;
} |
Nyt Jaska on myös tehnyt saman tiedoston revisioon 1.2 muutoksia
(taulukossa alla vasemmalla), ja tekee heti muutosten jälkeen
päivityksen saadakseen itselleen muiden tekemät muutokset, mutta siitä
seuraa seuraavanlainen virhe:
~/src/projekti$ cvs update munohjelma.c
RCS file: /usr/local/etc/cvsroot/projekti/munohjelma.c,v
retrieving revision 1.2
retrieving revision 1.3
Merging differences between 1.2 and 1.3 into munohjelma.c
rcsmerge warning: overlaps during merge
cvs update: conflicts found in munohjelma.c
C munohjelma.c
Tämä muuttaa munohjelma.c:n kuten alla oikealla, jossa on
virhemerkinnöin rajattu oma muutos ja revisiossa 1.3 tehty
vaihtoehtoinen muutos:
Muutettu B | Virhemerkinnät |
---|
/**
* $Author$ $Revision: 1.2 $
* $Log$
**/
#include <stdio.h>
void main(int argc, char* argv[]) {
printf ("Hello, World!\n");
} |
/**
* $Author: kalle $ $Revision: 1.3 $
* $Log: munohjelma.c,v $
* Revision 1.3 1999/11/12 02:21:12 kalle
* Lisäsin paluuarvon main():iin
**/
#include <stdio.h>
<<<<<<< munohjelma.c
void main(int argc, char* argv[]) {
-------
int main() {
>>>>>>> 1.3
printf ("Hello, World!\n");
return 0;
} |
Konflikti korjataan muokkaamalla tiedosto oikeaksi ja poistamalla
konfliktia osoittavat merkinnät. Samaista konfliktia ei enää
tarkasteta kun tiedosto seuraavaksi toimitetaan, vaan commit
luottaa, että tiedostoon on tehty vaaditut muutokset, kunhan tiedostoa
on edes muutettu ristiriidan havaitsemisen jälkeen.
2.7. Tiedostojen lisääminen CVS-järjestelmään - add
Normaalisti käyttäjä saa luoda CVS-hakemistoonsa aivan mitä tiedostoja
haluaa, eikä niitä oteta mukaan CVS-versionhallintaan ennen kuin
seuraavat komennot annetaan.
Lisätään kaikki jossain hakemistossa olevat C-lähdekooditiedostot
CVS:ään:
~/src$ cd projekti
~/src/projekti$ cvs add *.c *.h Makefile
cvs server: scheduling file `munohjelma.c' for addition
cvs server: scheduling file `munohjelma.h' for addition
cvs server: scheduling file `Makefile' for addition
cvs server: use 'cvs commit' to add this file permanently
~/src/projekti$ cvs commit -m "Lähdekoodit lisätty"
Muutokset toimitetaan CVS-palvelimelle vasta
commit-komennolla, josta kerrottiin edellä.
Binääritiedostot
Binääritiedostoja lisättäessä annetaan add-komennolle
-kb -lippu.
~/src/projekti$ cvs add -kb munbinaari.dat
~/src/projekti$ cvs commit -m "Datatiedosto lisätty"
Mikäli tiedosto on lisätty ilman kb-lippua, voi sen lisätä admin-komennolla:
~/src/projekti$ cvs add munbinaari.dat
~/src/projekti$ cvs commit -m "Datatiedosto lisätty"
~/src/projekti$ cvs admin -kb munbinaari2.dat
~/src/projekti$ cvs commit -m "Datatiedosto muutettu binääriksi"
Hakemistot
Hakemistot lisätään samoin kuin tiedostot:
~/src/projekti$ mkdir hakemisto
~/src/projekti$ cvs add hakemisto
Directory /usr/local/etc/cvsroot/projekti/hakemisto added to the repository
Hakemistojen lisäyksiä ei tarvitse commitoida palvelimelle erikseen.
2.8. Tiedostojen ja hakemistojen poistaminen - remove
Tiedostoa tai hakemistoa ei voi poistaa vain CVS-käsittelystä, se
täytyy ensin poistaa myös levyltä. Muutoin käy seuraavasti:
~/src/projekti$ cvs remove munohjelma.c
cvs server: file `munohjelma.c' still in working directory
cvs server: 1 file exists; remove it first
Eli, se pitää poistaa:
~/src/projekti$ rm munohjelma.c
~/src/projekti$ cvs remove munohjelma.c
cvs server: scheduling `munohjelma.c' for removal
cvs server: use 'cvs commit' to remove this file permanently
~/src/projekti$ cvs commit -m "poistin vaan tiedoston" munohjelma.c
Commitin voi tietysti antaa myöhemminkin, muiden toimintojen
jälkeen. Katso alla sen kuvaus.
2.9. Kommenttilokin selaaminen - log
CVS:ään tehtyjen päivitysten historiaa, sekä niihin liittyviä,
commit-komennolle annettuja kommentteja, pääsee katsomaan
log-komennolla:
~/src/projekti$ cvs log munohjelma.c
RCS file: /usr/local/etc/cvsroot/projekti/munohjelma.c,v
Working file: munohjelma.c
head: 1.3
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 3; selected revisions: 3
description:
----------------------------
revision 1.3
date: 1999/11/11 23:28:58; author: muntunnus; state: Exp; lines: +1 -3
poistin vaan tiedoston
----------------------------
revision 1.2
date: 1999/11/11 19:22:39; author: muntunnus; state: Exp; lines: +1 -0
tein toisenkin muutoksen
----------------------------
revision 1.1
date: 1999/11/11 17:04:59; author: muntunnus; state: Exp;
lisäsin jutun X
=============================================================================
Kirjoittamalla
~/src/projekti$ cvs log
saa tulostettua kaikkien tiedostojen login, mikä voi olla aika pitkä.
Katso myös: avainsanat.
2.10. Tiedostojen muutosten tarkastelu - annotate
Annotate-komennolla voi tarkastella kaikkia tiedostoihin tehtyjä
muutoksia:
~/src/projekti$ cvs annotate munohjelma.c
Annotations for munohjelma.c
***************
1.1 (muntunnus 11-Nov-99): #include <stdio.h>
1.1 (muntunnus 11-Nov-99):
1.3 (jokutoinen 11-Nov-99): #include "wwlib/wwmap.h"
1.1 (muntunnus 11-Nov-99): #include "common/pararr.h"
1.1 (muntunnus 11-Nov-99):
1.2 (muntunnus 11-Nov-99): void main() {
1.1 (muntunnus 11-Nov-99): printf ("Hello, World!\n");
1.2 (muntunnus 11-Nov-99): } /** main() */
1.1 (muntunnus 11-Nov-99):
Tässä esimerkissä version tiedoston tila oli sellainen kuin 1.1-rivit
osoittavat. Sen jälkeen siihen tehtiin muutoksia riveillä, jotka on merkitty
versionumerolla 1.2.
Ilman tiedostoparametria annotate tulostaa kaikki tiedostot.
Katso myös: diff.
2.11. Avainsanat lähdekoodissa
Monia CVS:n tiedostokohtaisia asioita saa automaattisesti näkyviin
tiedostojen otsikkolohkoissa. Muokkaamme tiedostoa
munohjelma.c ja lisäämme siihen seuraavanlaisen
otsikkolohkon (jossa normaalisti voisi olla myös esimerkiksi
copyright-tietoja):
/**
* $Author$ $Date$ $Revision$
*
* $Log$
*
**/
#include <stdio.h>
void main() {
printf ("Hello, World!\n");
} |
Tämän jälkeen tehdään commit kyseiselle tiedostolle:
~/src/projekti$ cvs commit -m "Lisäsin otsikkolohkon" munohjelma.c
jolloin CVS päivittää tiedoston ja avaa otsikkolohkossa määritellyt
avainsanat seuraavanlaisiksi:
/**
* $Author: muntunnus $ $Date: 1999/11/12 17:33:29 $ $Revision: 1.8 $
*
* $Log: munohjelma.c,v $
* Revision 1.4 1999/11/12 02:21:12 muntunnus
* Lisäsin otsikkolohkon
*
* Revision 1.3 1999/11/11 23:28:58 muntunnus
* poistin vaan tiedoston
*
* Revision 1.2 1999/11/11 19:22:39 muntunnus
* tein toisenkin muutoksen
*
* Revision 1.1 1999/11/11 17:04:59 muntunnus
* lisäsin jutun X
*
**/
#include <stdio.h>
void main() {
printf ("Hello, World!\n");
} |
Mikäli otsikkolohkoon keertyy tarpeettomia lokiviestejä, voi ne
surutta poistaa käsin, eikä CVS enää palauta niitä takaisin. Uudet
toimituskommentit siis vain lisätään ensimmäiseksi vanhojen eteen,
vanhoista mitenkään välittämättä.
Kaikki avainsanat
$Author$ |
Viimeisimmän version toimittaja |
$Date$ |
Päivämäärä ja aika milloinka viimeinen toimitus tehtiin |
$Header$ |
Vakio-otsikkorivi, jossa yhdistelmä muiden kenttien tietoja |
$Id$ |
Sama kuin $Header$, mutta tiedostonimi on ilman polkua |
$Name$ |
Tiedoston toimittamiseksi käytettävä ''taginimi'' |
$Locker$ |
Käyttäjä joka on parhaillaan lukinnut tiedoston |
$Log$ |
Toimitusten yhteydessä annettujen viestien loki |
$Revision$ |
Versionumero |
$Source$ |
Tiedoston täysi (,v-loppuinen) RCS-tiedostonimi palvelimella |
$State$ |
Versioon liittyvä tila, joka on asetettu admin-komennolla |
2.12. Projektista poistuminen - release
Siinä vaiheessa, kun lakkaa työskentelemästä jonkin CVS-ylläpidetyn
projektin kanssa, ja haluaa poistaa kopion itseltään, tapahtuu se
yksinkertaisesti:
~/src$ rm -rf projekti
Hieman parempi tapa on antaa komento:
~/src$ cvs release -d projekti
M munohjelma.c
? projekti
You have altered 1 files in this repository.
Are you sure you want to release (and delete) directory 'projekti': n
** 'release' aborted by user choise.
joka -d -lipulla tuhoaa projektiin liittyvän hakemistopuun. Tässä
esimerkissä yhtä tiedostoa (munohjelma.c) oli muutettu.
3. Muita ominaisuuksia
Lyhyt maininta ominaisuuksista, joista tässä ohjeessa ei kerrota sen tarkemmin.
3.1. Tiedostonmuokkauksen tarkkailu ja lukitukset - watch
watch-komennolla voi tarkkailla, kuka tiedostoja
muokkaa. Se myös pakottaa ohjelmoijat lukitsemaan tiedostot
muokkauksen ajaksi. Tällöin jokaisen muokkaajan on aloitettava
muokkaus edit-komennolla ja annettava muokkauksen päätyttyä
unedit-komento.
3.2. Tagit - tag
Projektin eri tiedostojen versionumerot ovat yleensä aina täysin
erilaiset. Tagien käyttö on tapa antaa yhden tai useamman tiedoston
tietylle versionumerolle symbolinen nimi. Esimerkiksi, jos jonain
kehityksen hetkenä munohjelma.c ja munohjelma.h
kääntyvät yhdessä hyvin, voidaan niille antaa jokin nimetty tagi,
kuten kaantyy-1-3. Vanhaan hetkeen voidaan palata tuon tagin
perusteella.
3.3. Erot versioiden välillä - diff
cvs diff-komennolla voi muodostaa .patch-tiedostoja eri
revisioiden välillä. Näiden tiedostojen ja patch(1)-ohjelman
avulla voi päivittää lähdekoodipuita, jotka ovat CVS-hallinnan
ulkopuolella.
Kätevä tapa on tulostaa viimeaikaisia muutoksia tiedostoihin
-u -lipulla, joka merkitsee muutokset + ja - -merkeillä:
~/src/projekti$ cvs diff -u -r 1.2 README |less
Index: README
===================================================================
RCS file: /usr/local/etc/cvsroot/projekti/README,v
retrieving revision 1.2
diff -u -r1.2 README
--- README 1999/11/11 19:22:39 1.2
+++ README 1999/11/13 17:58:58
@@ -1,3 +1,4 @@
-Some readme
-ja lisää
+$Author: muntunnus $ $Date: 1999/11/13 17:55:03 $ $Revision: 1.4 $
+Kirjoitin tähän nyt pari riviä lisää.
+Jeee.
Tässä tapauksessa README-tiedostosta on revision 1.2 (joka
kerrottiin -r-lipulla) jälkeen jossain vaiheessa poistettu
miinus-merkillä merkityt rivit "Some readme" ja "ja lisää", ja lisätty
plus-merkillä merkityt rivit.
3.4. Haarautuminen
CVS tukee kehityspuiden haarautumista (branching) ja jälleenyhdistämistä (merging).
3.5. Palvelimen komentoskriptit
CVS-palvelimen voi asettaa ajamaan komentoskriptejä aina tiettyjen
CVS-komentojen yhteydessä. Ne voivat esimerkiksi tehdä tiettyjä
tarkastuksia toimitettavien (commit) tiedostojen
sisällöstä tai toimituskommenteista, ja hylätä toimituksen mikäli
ne eivät kelpaa.
4. Palvelimen asennus
CVS-versionhallinnalle pitää luoda hakemisto, esimerkiksi
/usr/local/etc/cvsroot, jota kutsumme tästä lähtien nimellä
$CVSROOT. Tämän jälkeen ajetaan komento:
# cvs -d /usr/local/etc/cvsroot init
Tämä luo hakemistoon CVS:n omat tiedot sisältävän hakemiston
CVSROOT. Nyt laitetaan CVS-palvelin inetd:n ajettavaksi. Editoidaan
tiedostoa /etc/inetd.conf ja lisätään sinne rivi:
2401 stream tcp nowait root /usr/bin/cvs cvs --allow-root=/usr/local/etc/cvsroot pserver
Olettaen, että cvs-ohjelma sijaitsee hakemistossa
/usr/bin. Inetd käynnistetään nyt uudelleen komennolla:
# /etc/rc.d/init.d/inet restart
4.1. Käyttäjätunnuksen luonti
Seuraavaksi tarvitaan yksi käyttäjä, joka luodaan
seuraavasti. Oletetaan, että haluamme CVS-käyttäjille erilliset
salasanat (sen sijaan että heillä olisi normaalit
unix-käyttäjätunnukset). Käyttäjätunnusten ja kryptattujen salasanojen
luontiin ei ole erillistä ohjelmaa, joten sen voi tehdä
seuraavanlaisella virityksellä:
# useradd cvsuser
# passwd cvsuser
New UNIX password: <kirjoita salasana tähän>
Retype new UNIX password: <<kirjoita salasana uudelleen>
# tail -1 /etc/passwd >> /usr/local/etc/cvsroot/CVSROOT/passwd
# userdel cvsuser
Viimeinen rivi poistaa turhan käyttäjätunnuksen. Nyt
$CVSROOT/CVSROOT-hakemistossa oleva tiedosto passwd näyttää
esimerkiksi tältä:
cvsuser:50cU1QG.2G76k:501:512::/home/cvs:/bin/bash
''cvsuser'' on tässä käyttäjätunnus, joka voidaan muuttaa
halutuksi. Käyttäjätunnusta seuraa salasana. Muutetaan käyttäjätunnus
ja poistetaan kaikki salasanan jälkeinen editoimalla tiedostoa:
muntunnus:50cU1QG.2G76k
Lopuksi kerrotaan käyttäjälle hänen salasana salasanansa, sekä
CVS-polku, jonka hän voi asettaa ympäristömuuttujaan kuten edellä
kuvattiin.
export CVSROOT=:pserver:muntunnus@cvs.palvelin.fi:/usr/local/etc/cvsroot
4.2. Projektien eli moduulien lisääminen
CVS-projektin aloittaminen on melko avointa, mutta joudumme hieman
kikkailemaan siinä. Aloitamme luomalla uuden projektin alusta. Luomme
projektihakemiston käyttäjän hakemistoon:
~/src$ mkdir projekti
Kirjaamme uuden projektin CVS:ään import-komennolla.
import-komento vaatii parametrikseen projektihakemiston
nimen, tekijämerkin ja julkaisumerkin. Annamme tekijämerkiksi
käyttäjän käyttäjätunnuksen ja julkaisumerkiksi start.
~/src$ cd projekti
~/src/projekti$ cvs import -m "Lisätty projekti" projekti käyttäjätunnus start
No conflicts created by this import
Huomaa, että tämä vaatii $CVSROOT-hakemistoon kirjoitusoikeudet.
HUOMAA! Mikäli tässä projektihakemistossa on jotain tiedostoja, ne
kaikki lisätään luotuun projektiin. Mikäli kyseessä on vanha
projekti, lisätään siis aivan kaikki tiedostot, myös paljon sellaisia
mitä ei välttämättä haluaisi!
Nyt hakemisto täytyy kuitenkin poistaa, koska muuten CVS ei huomaa
tehdä sinne CVS-hakemistoa:
~/src/projekti$ cd ..
~/src rmdir projekti
~/src cvs checkout projekti
cvs server: Updating projekti
Tämän lisäksi pitää muokata palvelimen
modules-tiedostoa. Se haetaan seuraavasti (oletetaan että
ollaan jo kirjauduttu CVS:ään)
~/src$ cvs checkout CVSROOT/modules
~/src$ jed CVSROOT/modules
Muokkaa tiedostoa ja lisää rivi, joka määrittelee moduulin:
projekti projekti
Ensimmäinen parametri on moduulin nimi, toinen hakemiston nimi. Tällä
tapauksessa, ja kenties useimmiten, hakemiston nimi on sama kuin
moduulin nimi.
Moduulien määrittelyriveille voi antaa myös parametreja:
-a alias |
vaihtoehtoinen nimi moduulille |
|
|
Toimita muutokset sitten palvelimelle ja poista CVSROOT-hakemisto:
~/src$ cvs commit -m "Module projekti added" CVSROOT/modules
~/src$ cvs release -d CVSROOT
CVS:n lähdekoodi on saatavissa osoitteista:
Ohjelmasta on myös erinäisiä RPM-paketteja ja muita Linuxille ja muille
käyttöjärjestelmille.
Last modified: Sat Feb 17 01:08:31 EET 2001
|