I gruppeprogrammeringsmiljøet CVS (Concurrent Versions System) kan medlemmer av en gruppe utføre alt sitt arbeid i sine egne arbeidsbenker, isolert fra de andre. De kan etter hvert dele arbeidet med andre. Det gjør de via et CVS-datalager.
CVS bruker en grenmodell til å støtte flere parallelt arbeid som er isolert fra hverandre, men likevel henger sammen. Grener er der utviklingsgrupper deler og integrerer pågående arbeid. En gren kan ses på som et delt arbeidsområde som oppdateres av gruppemedlemmene idet de gjør endringer i prosjektet. Denne modellen gjør det mulig for enkeltpersoner å arbeide på et CVS-gruppeprosjekt, dele arbeid med andre etter hvert som det gjøres endringer, og få tilgang til andres arbeid ettersom prosjektet utvikler seg. En spesiell gren som kalles HEAD eller hovedstammen, representerer arbeidets hovedforløp i datalageret.
Når gruppemedlemmer produserer mer arbeid, deler de dette arbeidet ved å iverksette endringene i grenen. Og når de ønsker å få tak i seneste tilgjengelige arbeid, oppdaterer de sine lokale arbeidsområder til endringene i grenen. Dermed endres grenen konstant og vokser frem etter hvert som gruppemedlemmene sender inn nytt arbeid.
Grenen representerer prosjektets gjeldende tilstand. Et gruppemedlem kan når som helst oppdatere sitt arbeidsområde fra grenen og vite at han/hun er ajour.
CVS har to viktige funksjoner som er nødvendige for å arbeide i gruppe:
En historikk over arbeid sendt inn av gruppen.
En måte å koordinere og integrere dette arbeidet.
Det er viktig å vedlikeholde historikken, slik at man kan sammenlikne gjeldende arbeid med tidligere utkast, eventuelt gå tilbake til tidligere arbeid som er bedre, og så videre. Det er avgjørende at arbeidet koordineres, slik at det finnes en enkelt definisjon av gjeldende prosjekttilstand som omfatter gruppens integrerte arbeid. Denne koordineringen besørges via grenmodellen.
En optimistisk modell er en modell det ethvert medlem av gruppen kan gjøre endringer i en hvilken som helst ressurs som han/hun har tilgang til. Siden to gruppemedlemmer kan iverksette grenendringer i samme ressurs, kan konflikter oppstå, og de må håndteres.Denne modellen kalles optimistisk fordi den antar at konflikter er sjeldne.
Vanligvis lever ikke ressursene isolert. De inneholder implisitte og eksplisitte avhengigheter på andre ressurser. For eksempel har web-sider linker til andre web-sider, og kildekode har referanser til detaljer beskrevet i andre kildekoderessurser. Ingen ressurs er helt isolert.
Når ressurser iverksettes i grenen, kan det påvirke de nevnte avhengighetene. Det er viktig å sikre avhengighetenes integritet, for grenen representerer gjeldende prosjekttilstand. Et gruppemedlem kan når som helst ta greninnholdet som utgangspunkt for nytt arbeid.
Den ideelle arbeidsflyt er derfor en arbeidsflyt der grenintegriteten ivaretas.
Ideell arbeidsflyt er som følger:
Start på nytt. Før du begynner arbeidet, oppdaterer du ressursene i arbeidsområdet med gjeldende grentilstand. Hvis du er sikker på at du ikke har noe lokalt arbeid som du må ta vare på, er den raskeste måten å komme i gang å velge prosjektene du er interessert i, fra grenen (eller HEAD) og velge Hent ut (eller Erstatt med > Nyeste fra datalager hvis prosjektet allerede finnes lokalt). Dette vil overskrive dine lokale ressurser med ressursene fra grenen.
Gjør endringer. Arbeid lokalt på arbeidsbenken med å opprette nye ressurser, endre eksisterende og lagre lokalt etter hvert.
Synkroniser. Når du er ferdig med å iverksette arbeidet, synkroniserer du med datalageret.
Oppdater. Undersøk innkommende endringer og legg dem til i den lokale arbeidsbenken. Dette gjør det mulig for deg å avgjøre om det er endringer som kan påvirke integriteten til det du er i ferd med å iverksette. Løs konflikter. Test på nytt, kjør integritetskontroller (kontroller for eksempel om det er hypertekstlinker med brudd, pass på at koden kompileres, osv.).
Iverksett. Nå som du vet at endringene er godt integrert i siste greninnhold, integrerer du dine endringer i grenen. For å være sikker kan du gjenta forrige trinn hvis det er nye innkommende endringer.
Dette er selvfølgelig en ideell arbeidsflyt. Under visse forhold kan du være sikker på at innkommende endringer ikke påvirker deg, og velge å iverksette uten å oppdatere. Generelt bør imidlertid gruppemedlemmene prøve å følge en arbeidsflyt som likner på den ovenfor for å sikre at grenens integritet ikke ødelegges ved et uhell.
Du finner flere opplysninger om CVS på http://www.cvshome.org.
CVS-datalagre
Grener
Versjoner
Synkronisere med et CVS-datalager
Opprette en CVS-datalagerplassering
Hente ut et prosjekt fra et CVS-datalager
Erstatte ressurser på arbeidsbenken
Dele et nytt prosjekt med CVS
Synkronisere med datalageret
Oppdatere
Løse konflikter
Slå sammen fra en gren
Iverksette