In CVS (Concurrent Versions System), een programmeeromgeving voor teams, kunnen teamleden al het werk afzonderlijk van anderen uitvoeren in hun eigen workbench. Op een bepaald moment zullen zij hun werk met het team willen delen. Zij doen dit via een CVS-repository.
CVS maakt gebruik van een vertakkingenmodel ter ondersteuning van meerdere werkprojecten die enigszins los van elkaar staan, maar toch onderling van elkaar afhankelijk zijn. Vertakkingen worden door ontwikkelteams gebruikt voor het delen en integreren van werk in uitvoering. Een vertakking kan worden gezien als een gemeenschappelijk werkgebied dat wordt bijwerkt door teamleden wanneer zij wijzigingen in het project aanbrengen. Dit model maakt het voor individuen mogelijk om te werken aan een CVS-teamproject, hun werk te delen met anderen wanneer er wijzingen zijn aangebracht en het werk van anderen te openen naarmate het project zich ontwikkelt. Een speciale vertakking met de naam HEAD, staat voor de hoofdmoot van het werk in de repository (HEAD wordt ook vaak de trunk genoemd).
Wanneer teamleden nieuw werk hebben geproduceerd, kunnen zij dit met andere delen door het vastleggen van de laatste wijzigingen in de vertakking. En als zij zelf het laatst geproduceerde werk van andere willen gebruiken, kunnen zij hun lokale werkgebieden bijwerken met de wijzigingen in de vertakking. De vertakking verandert dus voortdurend en ontwikkelt zich doordat teamleden steeds nieuw werk indienen.
In feite weerspiegelt de vertakking de huidige status van het project. Om bij te blijven kunnen teamleden op elk gewenst moment hun werkgebieden bijwerken met de gegevens uit de vertakking.
CVS biedt twee belangrijke functies voor het werken in een team:
Een historie van het werk dat door het team is verzonden
Een manier om dit werk te coördineren en te integreren
Het bijhouden van de historie is belangrijk zodat het huidige werk kan worden vergeleken met eerdere conceptversies, kan worden teruggegaan naar werk dat beter is, enzovoort. Coördinatie van het werk is van essentieel belang zodat er één definitie van de huidige projectstatus bestaat die het geïntegreerde werk van het team bevat. Deze coördinatie wordt verzorgd door het vertakkingenmodel.
Een optimistisch model is een model waarin elk lid van het team wijzigingen kan aanbrengen in elke resource waar hij of zij toegang toe heeft. Omdat twee teamleden wijzigingen van dezelfde resource in de vertakking kunnen vastleggen, kunnen er conflicten ontstaan en zullen deze moeten worden opgelost. Dit model wordt optimistisch genoemd omdat ervan wordt uitgegaan dat er zelden conflicten zijn.
Resources bestaan meestal niet volledig los van elkaar, maar bevatten vaak impliciete of expliciete vormen van dependency's van andere resources. Webpagina's bevatten bijvoorbeeld koppelingen naar andere webpagina's en broncode bevat verwijzingen naar artefacten die zijn beschreven in resources van andere broncode. Resources bestaan niet op een eiland.
Wanneer resources in de vertakking worden vastgelegd, kunnen de dependency's worden verstoord. Het is belangrijk om de integriteit van de dependency's te garanderen omdat de vertakking de huidige status van het project vertegenwoordigt: teamleden kunnen op elk moment de inhoud van de vertakking gebruiken als basis voor nieuw werk.
De ideale werkstroom is er dan ook een waarbij de vertakkingsintegriteit bewaard blijft.
De ideale werkstroom verloopt als volgt
Maak een nieuwe start. Voordat u aan de slag gaat, werkt u de resources in het werkgebied bij met de huidige vertakkingsstatus. Als u zeker weet dat u geen lokaal werk hebt waaraan u bent gehecht, raakt u het snelst weer bij door de projecten waarin u geïnteresseerd bent te selecteren in de vertakking (of HEAD) en vervolgens Uitchecken te selecteren (of Vervangen door > Laatste uit repository als de projecten al lokaal bestaan). Hiermee overschrijft u de lokale resources met die van de vertakking.
Breng de gewenste wijzigingen aan. Werk lokaal in uw workbench, waarbij u nieuwe resources maakt, bestaande resources wijzigt en uw werk lokaal opslaat.
Synchroniseer. Wanneer u klaar bent om uw werk vast te leggen, synchroniseert u uw werk met de repository.
Werk bij. Bestudeer de binnenkomende wijzigingen en voeg deze toe aan uw lokale workbench. Dit maakt het mogelijk om te bepalen of er wijzigingen zijn die een gevaar vormen voor de integriteit van het werk dat u wilt gaan vastleggen. Los conflicten op. Test opnieuw, voer integriteitcontroles uit (controleer bijvoorbeeld op gebroken hyperlinks, zorg dat uw code wordt gecompileerd, enzovoort).
Leg vast. Nu dat u zich ervan heeft overtuigd dat uw wijzigingen zonder problemen kunnen worden geïntegreerd met de laatste vertakkingsinhoud, legt u uw wijzigingen vast in de vertakking. Voor de zekerheid kunt u de vorige stap herhalen als er nieuwe inkomende wijzigingen zijn.
Dit is uiteraard een ideale werkstroom. Onder bepaalde omstandigheden kunt u er zeker van zijn dat de inkomende wijzigingen geen invloed op uw werk hebben en kunt u zonder eerst bij te werken uw werk vastleggen. Over het algemeen moeten teamleden echter de bovenstaande werkstroom volgen om er zeker van te zijn dat de vertakkingsintegriteit niet per ongeluk in gevaar wordt gebracht.
Meer informatie over CVS vindt u op http://www.cvshome.org.
CVS-repository's
Vertakkingen
Versies
Synchroniseren met een CVS-repository
Een CVS-repositorylocatie maken
Een project uit een CVS-repository uitchecken
Resources in de workbench vervangen
Een nieuw project delen met CVS
Synchroniseren met de repository
Bijwerken
Conflicten oplossen
Samenvoegen vanaf een vertakking
Vastleggen van wijzigingen