CVS står for 'Concurrent Versions System' og er et system som skal gjør det enklere å holde orden på revisjoner av programpakker, det gjør det også mye lettere for flere utviklerer å jobbe på samme program samtidig.
Denne siden er i utgangspunktet beregnet for ansatte på USIT, men kan være nyttig lesning også for andre som har lyst til å få en innføring i CVS. Den generelle informasjonen kan være nyttig for alle, men de spesifikke eksemplene vil kun gjelde for USIT-ansatte siden USIT ikke tilbyr en sentral CVS-server til alle. For andre kan det være en løsning å opprette et eget CVS-repository på hjemområdet sitt (mer om dette lenger ned).
Tanken bak CVS er at det skal eksistere en sentral server hvor selve prosjektfilene ligger. Alle som skal jobbe på filene, henter ut (sjekker ut) en lokal kopi av de filene man ønsker, slik at man deretter lokalt kan gjøre de endringene man skal. Etter at man har gjort de aktuelle endringene, skal man legge tilbake (sjekke inn) de filene som man har endret på.
Serveren sørger for å flette sammen endringene som blir gjort av ulike brukere, slik at serveren alltid vil ha en konsistent versjon av alle dokumenter. I tillegg til å ha en konsistent versjon av alle nåværende dokumenter, holder serveren også på historiske data slik at det er mulig å hente ut dokumenter slik de var f.eks. to måneder tilbake. I tillegg har man mulighet til å navngi milepæler, det vil si å tagge versjoner av et prosjekt. Dette kan blant annet gjøres ved hver ny versjon av et program. På denne måten er det veldig enkelt å gå tilbake til tidligere versjoner hvis det skal være behov for det.
CVS er ypperlig å benytte til alle typer dokumenter, men i utgangspunktet er det tekstlige dokumenter som egner seg best. Dette fordi CVS analyserer og endrer innholdet i deler av et dokument, noe som kan være vanskelig å gjøre i binære filer.
Når man benytter CVS, bør man være ganske nøye med hva man sjekker inn og ut av serveren. For programmeringsprosjekter bør man f.eks. ha som mål at alt som ligger i CVS skal la seg kompilere. Med andre ord vet alle programmerere på et prosjekt at man til enhver tid kan hente det ut fra serveren og at dette vil la seg kompilere slik at man kan jobbe videre på det.
Jeg vil anbefale alle som skal bruke CVS for første gang å lese dukumentet 'Lokal guide til CVS' skrevet av Ole Bjørn Hessen ved IFI. Dette dokumentet er på norsk og gir en god innføring i bruk av CVS. En mer komplett beskrivelse av systemet får man fra den offisielle manualen. Den finnes i forskjellige formater på denne siden: http://www.cvshome.org/docs/manual/cvs.html.
Andre nyttige ressurser:
USITs CVS-tre er lokalisert på serveren cvs.uio.no i katalogen
/usit/cvs/cvsroot. Når man skal legge inn nye prosjekter i CVS,
er det viktig at man opprettholder en viss struktur og orden. En god ting er
at man får opprettet en personlig katalog (typisk /personlig/<brukernavn> )
hvor man kan prøve seg litt frem og lagre private ting. Det samme bør
gjelde for grupper på USIT. Webgruppa har for eksempel sin egen katalog med
navn webgr. Under her har vi igjen en katalog for java,
en for webobjects og så videre. En lignende struktur bør andre
også prøve å ha.
For å få lov til å bruke CVS-serveren (gjelder USIT-ansatte), må man først
få cvs-master@usit.uio.no til opprette
en CVS-bruker, samt din personlige CVS-katalog. Opprettelse av CVS-bruker gjelder
først og fremst for grafiske CVS-klienter som kobler mot serveren via en såkalt
pserver. På Unix kan man bruke en tekstbasert CVS-klient med dataoverføring
via ssh (kryptert). I så fall holder det med å ha vanlig konto på cvs.uio.no.
Når man bruker CVS, benytter man en CVS-klient på sin egen maskin for å sjekke ut og inn filer av prosjekter. Man har her valget om man ønsker å benytte en grafisk eller en tekstbasert klient. Her er det smak og behag hva man ønsker, og det er fordeler og ulemper med bruk av begge.
I en grafisk klient har man full oversikt over alle filer som er i et prosjekt. Filer man har endret på blir merket ut slik at man ser hvilke filer man trenger å oppdatere i serveren. I tillegg har man menyer for å utføre de fleste kommander.
En tekstlig basert klient, vil for mange føles noe raskere å bruke, og den er veldig kjekk når man har jobbet med CVS en god stund slik at man kjenner bruken godt. I tillegg er det enkelt å integrere slike klienter med for eksempel Emacs som mange benytter for å redigere dokumenter.
Det er to måter å bruke den tekstbaserte CVS-klienten på Unix. Den første er å anbefale. Den fungerer ved bruk av rsh eller fortrinnsvis ssh. Hvis man har konfigurert ssh til å foreta passordløse innlogginger, blir det ekstra lett. Det første man gjør er å sette to enviroment-variable:
CVS_RSH=ssh
CVSROOT=:ext:<brukernavn>@cvs.uio.no:/usit/cvs/cvsroot
Metode nummer to skiller seg fra den foregående ved at CVS-klienten
tar direkte kontakt med CVS sin passordserver som går på
cvs.uio.no:2401. Den krever bare at CVSROOT
miljøvariabelen blir satt.
CVSROOT=:pserver:<brukernavn>@cvs.uio.no:/usit/cvs/cvsroot
'cvs login' før man kan ta i bruk CVS. Denne lager
filen .cvspass i hjemmekatalogen din, og den kan enten
slettes manuelt eller fjernes med kommandoen 'cvs
logout' når du er ferdig å bruke CVS.
Det eksisterer en god del forskjellige grafiske CVS-klienter, men Usit anbefaler i utgangspunktet å benytte en som heter jCVS II. Denne kan hentes ned på http://www.jcvs.org. Klienten er skrevet i ren Java slik at den kan benyttes på alle plattformer som kjører Java.
Det kreves ikke noe spesielt oppsett for å kunne benytte denne
klienten, men man må få opprettet en bruker slik at man kan snakke
med CVS-serveren via pserver. Denne forespørselen
rettes til cvs-master@usit.uio.no.
Etter at en slik bruker er opprettet, kan man begynne med CVS med en
gang.
Windows
http://www.wincvs.org. En enkel
brukerveiledning
for WinCVS.
MacOS
http://www.maccvs.org
MacOS X Server
En tekstbasert CVS-klient
som krever at man har installert ssh på maskinen.
Kan bygges ut med et
grafisk grensesnitt.
Hent gjerne ned en
forklaring på hvordan man installerer det hele.
For å komme litt i gang, vil jeg her presentere hva som må gjøres når man skal legge et prosjekt inn i CVS, og hvordan man videre jobber på det. Eksempelet er skrevet med tanke på hvordan man gjør det i jCVS II, men det bør være greit å overføre det til den tekstbaserte CVS-klienten.
La oss si at man har et Java-prosjekt i katalogen
c:/java/testprogram. Dette ønsker man å legge inn i CVS
slik at andre kan jobbe på det og man får mulighet til historiske
data.
Det første man skal gjøre er å fjerne alt som er kompilert siden det
bare er kildekoden som skal inn i CVS. Deretter må man importere
prosjektet slik at det blir overført til CVS-serveren. Dette gjør
man i vinduet "Import". Her er det to vinduer man skal
fylle ut med f.eks. følgende data.
NB: Man kan "fritt" velge navn på CVS-modulen, men i første omgang kan man jo teste med å legge den inn i sin egen katalog på CVS-serveren. Hvis man ikke har lagt noe inn i CVS under sin egen katalog før, må man først sende en e-post til cvs-master@usit.uio.no slik at de kan opprette katalogen til deg.
| Felt | Verdi |
| PServer: | Skal være valgt |
| User Name: | <brukernavn> |
| Password: | <passord> |
| CVS Module: | <brukernavn>/java/testprogram |
| CVS Server: | cvs.uio.no |
| CVS Repository: | /usit/cvs/cvsroot |
| Import Directory: | c:/java/testprogram |
| Vendor Tag: | dist |
| Release Tag: | v0_0_1 (angir første taggete versjon) |
| Log Message: | bla, bla... |
Hvis importeringen av prosjektet gikk bra, kan man slette de
opprinnelige filene (selv om det anbefales å flytte dem for
sikkerhets skyld). Deretter sjekker man prosjektet ut igjen slik at
man får med CVS-dataene som trengs når klienten sjekker inn
endringer senere. Dette gjør man i vinduet "Checkout"
hvor man fyller ut følgende informasjon.
| Felt | Verdi |
| PServer: | Skal være valgt |
| User Name: | <brukernavn> |
| Password: | <passord> |
| CVS Module: | <brukernavn>/java/testprogram |
| CVS Server: | cvs.uio.no |
| CVS Repository: | /usit/cvs/cvsroot |
| Checkout Directory: | c:/ (her vil katalogen
<brukernavn>/java/testprogram bli
opprettet) |
Man vil nå få de opprinnelige filene tilbake, i tillegg til noen hjelpefiler
som CVS legger inn, men dem skal du ikke bry deg om. jCVS II vil også åpne selve
prosjektet ditt i et eget vindu, og dette kan man lagre som et prosjekt ved
å legge det til Workbench-en. Deretter kan man begynne å endre
filer, sjekke inn endringene, oppdatere filer som andre har endret osv.
Tidligere på denne siden har jeg hele tiden vinklet informasjonen mot bruk av USIT sin CVS-server. Dette er strengt tatt ikke nødvendig. Det er fullt mulig å opprette et CVS-repository på eget hjemområdet og deretter bruke dette.
Hvis man ønsker å jobbe mot sitt eget CVS-repository, må
dette først opprettes. Først må du logge inn på en
maskin du har tilgang til og som har CVS installert. For å opprette et
CVS-repository med navn cvsroot, utfører du følgende kommando
hvor du bytter ut stien til ditt hjemområde:
cvs -d /usit/saruman/web-u1/endremr/cvsroot init
For å bruke dette nye CVS-repositoriet, må du angi CVS-stier o.l. Den enkleste måten å gjøre dette på er å bruke områdevariable (env-variable). Jeg har satt disse som følger, men du må bytte ut verdier slik at det passer til din bruker/maskin:
| Variabel | Verdi |
| CVS_RSH | ssh |
| CVSEDITOR | emacs |
| CVSROOT | :ext:endremr@<host>.uio.no:/usit/saruman/web-u1/endremr/cvsroot |