I CVS-teamprogrammeringsmiljøet (Concurrent Versions System) udfører teammedlemmerne alt deres arbejde på arbejdsbænke, isoleret fra andre. Og til sidst deler de deres arbejde med de øvrige. Det gør de via et CVS-opbevaringssted.
CVS bruger en grenmodel til at understøtte flere arbejdsforløb, der i nogen grad er isoleret fra andre, men stadig meget afhængige af hinanden. Grenene er de steder, hvor et udviklingsteam deler og integrerer igangværende arbejde. En gren kan betragtes som et delt arbejdsområde, der opdateres af teammedlemmer, når de foretager ændringer af projektet. Denne model giver enkeltpersoner mulighed for at arbejde på et CVS-teamprojekt, dele deres arbejde med andre, når der sker ændringer, og få adgang til andres arbejde, efterhånden som projektet udvikles. En særlig gren, der kaldes HEAD, repræsenterer hovedarbejdsforløbet på opbevaringsstedet (HEAD kaldes ofte stammen).
Når teammedlemmerne har produceret nyt arbejde, deler de dette arbejde ved at committe ændringerne over for grenen. Tilsvarende opdaterer de deres lokale arbejdsområder med ændringerne på grenen, når de vil hente det senest tilgængelige arbejde. På denne måde ændres grenen hele tiden og bevæger sig fremad, efterhånden som teammedlemmerne sender nyt arbejde.
Grenen repræsenterer reelt projektets aktuelle tilstand. Et teammedlem kan til enhver tid opdatere sit arbejdsområde ud fra grenen og vide, at han eller hun er ajourført.
CVS indeholder to vigtige funktioner, der kræves for at arbejde i et team:
En historik over det arbejde, som teamet har sendt
En metode til at koordinere og integrere dette arbejde
Det er vigtigt at vedligeholde historikken, så man kan sammenligne det aktuelle arbejde med tidligere kladder, vende tilbage til tidligere arbejde, som er bedre, og så videre. Det er essentielt at koordinere arbejdet, så der kun findes én definition af den aktuelle projekttilstand, der indeholder teamets integrerede arbejde. Denne koordinering sker i grenmodellen.
En optimistisk model er en model, hvor alle medlemmer af teamet kan foretage ændringer af enhver ressource, som han eller hun har adgang til. Da to teammedlemmer kan committe ændringer af samme ressource til grenen, kan der opstå konflikter, som skal behandles. Denne model kaldes optimistisk, fordi det antages, at konflikter er sjældne.
Normalt findes ressourcer ikke isoleret. De indeholder typisk implicitte eller eksplicitte afhængigheder af andre ressourcer. Websider har f.eks. link til andre websider, og kildekoden har referencer til dele, der er beskrevet i andre kildekoderessourcer. Ingen ressource er en ø.
Efterhånden som ressourcer committes til grenen, kan disse afhængigheder blive påvirket. Det er vigtigt at sikre integriteten af afhængighederne, da grenen repræsenterer den aktuelle projekttilstand. Et teammedlem kan når som helst bruge grenens indhold som grundlag for nyt arbejde.
Den ideelle arbejdsgang er derfor en arbejdsgang, hvor grenintegriteten bevares.
Den ideelle arbejdsgang er som følger:
Start med friske data. Opdatér ressourcerne i arbejdsområdet med tilstanden af den aktuelle gren, inden du starter arbejdet. Hvis du er sikker på, at du ikke har noget lokalt arbejde, der betyder noget, er den hurtigste metode til at komme på omgangshøjde at markere de projekter, du er interesseret i, fra grenen (eller HEAD) og vælge Tjek ud (eller Erstat med > Sidste fra opbevaringsstedet, hvis projekterne allerede findes lokalt). Herved overskrives dine lokale ressourcer med ressourcerne fra grenen.
Foretag ændringer. Arbejd lokalt på Arbejdsbænken. Opret nye ressourcer, redigér eksisterende og gemt lokalt undervejs.
Synkronisér. Synkronisér dit arbejde med opbevaringsstedet, når du er klar til at committe arbejdet.
Opdatér. Undersøg indgående ændringer, og tilføj dem til din lokale arbejdsbænk. Herved kan du finde ud af, om der er ændringer, som kan påvirke integriteten af det, du er i færd med at committe. Løs konflikter. Test igen, udfør integritetskontrol - kontrollér f.eks. for brudte hypertekstlink, sørg for, at koden kompileres korrekt, osv.
Commit. Nu, hvor du er sikker på, at dine ændringer er integreret med det seneste grenindhold, skal du committe ændringerne over for grenen. Det kan eventuelt være klogt at gentage det tidligere trin, hvis der er nye indgående ændringer.
Dette er naturligvis en ideel arbejdsgang. Under visse betingelser kan du være sikker på, at de indgående ændringer ikke påvirker dig, og vælge at committe uden at opdatere. Men generelt bør teammedlemmer gøre en indsats for at følge en arbejdsgang som ovenstående for at sikre, at grenintegriteten ikke ved et uheld kompromitteres.
Der er flere oplysninger om CVS på adressen http://ximbiot.com/cvs/.
CVS-opbevaringssteder
Grene
Versioner
Synkronisér med CVS-opbevaringssted
Opret placering af CVS-opbevaringssted
Tjek projekt ud fra CVS-opbevaringssted
Erstat ressourcer på arbejdsbænk
Del nyt projekt vha. CVS
Synkronisér med opbevaringssted
Opdatér
Løs konflikter
Flet fra gren
Udfører commit for