Nell'ambiente di programmazione in team di CVS (Concurrent Versions System) i membri del team eseguono le attività nei propri workbench, isolati dagli altri. Alla fine condivideranno il lavoro tramite un repository CVS.
CVS utilizza un modello di sezione che supporti più fasi di lavoro, che sono in qualche modo isolate eppure altamente interdipendenti. Le sezioni sono quei posti in cui un team di sviluppo condivide e integra il lavoro che si sta portando avanti. Una sezione può essere considerata come un'area di lavoro condivisa che viene aggiornata dai membri del team nel momento in cui questi apportano modifiche al progetto. Questo modello consente ai singoli membri di partecipare a un progetto di team CVS, condividere il proprio lavoro con gli altri e accedere al lavoro di altri membri mentre il progetto si evolve. Una sezione speciale, definita HEAD, rappresenta la fase principale del lavoro nella repository (HEAD viene spesso designata come il tronco).
Mentre i membri del team producono il nuovo lavoro, lo condividonomediante l'esecuzione del commit, verso la sezione, delle modifiche apportate. Allo stesso modo, quando i membri desiderano ricevere l'ultimo lavoro disponibile aggiornano le aree di lavoro locali per adeguarsi alle modifiche all'interno della sezione. In questo modo la sezione è costantemente modificata e si evolve man mano che i membri del team rilasciano il nuovo lavoro.
La sezione rappresenta effettivamente lo stato corrente del progetto. In qualsiasi momento un membro del team può aggiornare la propria area di lavoro dalla sezione e individuare lo stato di aggiornamento del lavoro.
CVS fornisce due importanti funzioni necessarie per il lavoro in un team:
Una cronologia del lavoro eseguito dal team
Un sistema per coordinare e integrare tale lavoro
La conservazione di una cronologia è importante per poter confrontare il lavoro corrente con un lavoro precedente, per poter ritornare a un lavoro precedente che risulta migliore, e così via. Il coordinamento del lavoro è fondamentale poiché esiste una definizione dello stato di progetto corrente, contenente il lavoro integrato del team. Questo coordinamento viene fornito dal modello di sezione.
Un modello ottimistico è quello in cui tutti i membri del team possono apportare modifiche a qualsiasi risorsa a cui è possibile accedere. Poiché due membri del team possono eseguire il commit, verso la sezione, di modifiche alla stessa risorsa, potrebbero verificarsi dei conflitti che dovranno essere gestiti. Questo modello viene dettoottimistico poiché si presuppone che i conflitti siano rari.
Normalmente le risorse non sono indipendenti ma contengono, implicitamente o esplicitamente, riferimenti ad altre risorse. Ad esempio, le pagine Web hanno collegamenti ad altre pagine Web e il codice di origine ha riferimenti ad elementi descritti in altre risorse del codice di origine. Nessuna risorsa è quindi isolata.
Quando viene eseguito il commit delle risorse verso la sezione, tali riferimenti possono essere influenzati. E' importante accertarsi dell'integrità delle dipendenze poiché la sezione rappresenta lo stato corrente del progetto: in qualsiasi momento un membro del team può prendere il contenuto della sezione e utilizzarlo come base per un nuovo lavoro.
Il flusso di lavoro ideale deve, quindi, essere caratterizzato dall'integrità della sezione.
Il flusso di lavoro ideale procede nel seguente modo:
Avvio aggiornato: prima di iniziare il lavoro, aggiornare le risorse presenti nell'area di lavoro con lo stato corrente della sezione. Se non si dispone di lavoro locale di cui preoccuparsi eccessivamente, il modo più rapido per effettuare la cattura consiste nel selezionare dalla sezione (o HEAD) i progetti a cui si è interessati, quindi selezionare Estrai come progetto (oppure Sostituisci con > Ultime informazioni dal repository se i progetti esistono già a livello locale). In questo modo tutte le risorse locali verranno sovrascritte dalle risorse prelevate dalla sezione.
Esecuzione di modifiche: lavorare localmente nel proprio Workbench, creare nuove risorse, modificare risorse esistenti e salvare localmente.
Sincronizzazione: quando si è pronti a eseguire il commit del proprio lavoro, effettuare la sincronizzazione con il repository:
Aggiornamento: esaminare le modifiche in entrata e aggiungerle al proprio Workbench locale. Ciò consente di determinare l'eventuale presenza di modifiche che potrebbero influire sull'integrità delle risorse di cui si sta per eseguire il commit. Risoluzione dei conflitti. Effettuare una nuova verifica, eseguire checker di integrità (ad esempio, verificare eventuali collegamenti ipertestuali danneggiati, accertarsi della corretta compilazione del codice, e così via).
Commit: quando si è certi che le modifiche verranno ben integrate nel contenuto della sezione, eseguire il commit delle modifiche verso la sezione. Per prudenza, è possibile ripetere il passaggio precedente nel caso di nuove modifiche in entrata.
Naturalmente questo rappresenta un flusso di lavoro ideale. In certe condizioni, quando si ritiene che le modifiche in entrata non influenzino il proprio lavoro, si può scegliere di eseguire il commit senza effettuare l'aggiornamento. Tuttavia, i membri del team dovrebbero cercare di seguire un flusso di lavoro simile a quello appena descritto, in modo da essere certi che l'integrità della sezione non venga accidentalmente compromessa.
E' possibile trovare ulteriori informazioni sul CVS nel sito http://www.cvshome.org.
Repository CVS
Sezioni
Versioni
Sincronizzazione con un repository CVS
Creazione di una posizione di repository CVS
Estrazione di un progetto da un repository CVS
Sostituzione di risorse nel Workbench
Condivisione di un nuovo progetto mediante CVS
Sincronizzazione con il repository
Aggiornamento
Risoluzione dei conflitti
Unione da una sezione
Esecuzione del commit