CVS - Concurrent Versions System

Ce este CVS?

CVS este un sistem de control a versiunilor. El este utilizat pentru a pastra istoricul fisierelor surselor. CVS ne permite sa tinem o evidenta exacta a tuturor versiunilor si sa revenim in orice moment asupra acestora, sa determinam modificarile dintre oricare doua vesiuni.

De exemplu, bug-urile de cele mai multe ori apar atunci cand se realizeaza modificari ale surselor, si este destul de dificil sa determinam momenul in care acestea au fost facute.

CVS este un sistem care permite unui grup de persoane sa lucreze simultan cu o multime de fisiere (de exemplu, fisierele sursa ale unu program).

Principul de functionare al acestuia este urmatorul (vezi figura de mai jos): se pastreaza un repository global ce contine o copie completa a tuturor fisierelor si directoarelor care se afla sub controlul CVS-ului. In orice moment putem sa realizam o copie locala a fisierelor proiectului (operatia de checkout) din repository-ul global. Daca mai taziu au fost puse noi versiuni ale fisierelor in repository-ul global, putem sa realizam actualizarea fisierelor din copia locala (operatia update).

Asupra fisierelor din copia locala puteam sa realizam modificari. Daca intre timp in repository-ul global au fost puse noi fisiere si executam o operatie de update se va realiza o sincronizare intre copia locala si cea globala astfel:

Daca dorim ca modificarile realizate de noi asupra copiei locale sa le punem in repository-ul global trebuie sa realizam operatia de commit. Acest lucru este posibil daca fisierele modificate de noi nu au fost modificate intre timp de alte persoane (adica nu avem conflicte).

In final cand am terminat cu lucrul asupra fisierelor din copia locala putem sa realizam sa stergem copia locala.

Definitii de baza

Repository Directorul in care sunt pastrate copiile master ale fisierlor.Repository-ul principal sau master este o structura de directoare.
Module Un director din repository-ul global. Acestea sunt definite in fiserul de module al CVS-ului.
Check outOperatia prin care se realizeaza o copie locala a fisierelor din repository-ul global pentru a fi examinate sau editate.
RevisionO eticheta numerica care identifica versiunea unui fisier.

Configurarea

Pentru a putea utiliza CVS-ul trebuie sa setam variabila de mediu CVSROOT cu calea catre repository-ul global. Acesta poate fi un director de pe masina locala sau se poate afla pe un server la distanta.

 	>set CVSROOT=:local:d:\repository
 
sau
 	>set CVSROOT=:pserver:student@idinf.ucv.ro:/home/cvs/repository
 
La inceput, pentru a crea repository-ul este necesara initalizarea acestuia astfel:
 	>cvs init
 
In urma rularii acestei comenzi se va crea un repository nou gol.

Importul unui modul in repository-ul CVS

Pentru a adauga (importa) un proiect sau modul al unui program in repository-ul global vom utiliza comanda cvs import. Sintaxa generala a acestei comenzi este urmatoarea:
	>cvs import <module name> <vendor tag> <symbolic tagname>
Un tag este o combinatie de de litere, cifre, spatii mai putin virgula si punct. Sa presupunem ca structura de directoare in care se afla proiectul nostru este urmatoarea:
 d:\projects --- biblioteca +-- lib
                            +-- src +- Book.java
                            + 	   +- Item.java 
                            +         
                            +-- build.xml                          
Atunci comezile necesare pentru a adauga modulul in repository sunt urmatoarele:
	> cd d:\projects\biblioteca
	> cvs import -m "Importul initial al proiectului Biblioteca" biblioteca Biblio start

Extragerea unui modul din repository-ul CVS

Dupa ce proiectul a fost adaugat in repository-ul global oricare din utilizatori care acces la CVS poate sa isi creeze o copie locala a acestuia utilizand comanda cvs checkout. Sintaxa generala a acestei comenzi este urmatoarea:
	>cvs checkout <module name> 
De exemplu, daca dorim sa extragem din CVS modulul adaugat anterior vom executa urmatoarele comenzi:
	
	>cd d:\work
	>cvs checkout biblioteca
	 
In urma executarii acestei comenzi in directorul d:\work se va creea directorul biblioteca care va contine o copie a proiectului adaugat anterion in repository.

Actualizarea surselor

Inainte de a realiza modificari asupra surselor programului este bine sa realizam o actualizare a surselor din copia locala cu ultimele versiuni din repository. Acest lucru este necesar pentru ca este posibil ca din momentul in care am realizat copia locala (checkout) si momentul in care dorim sa facem modificari acestea sa fi fost deja modificate de alte persoane. Comanda utilizata in acest sens este csv update

Pentru a realiza actualizarea surselor din proiectul nostru vom executa urmatoarele comenzi:
	
	>cd d:\work\bilioteca
	>cvs update -d
		
	sau 
	
	>cvs update -P numefisier
	
Optiunea -d spune CVS-ului sa downloadeze si noile directoare aparute in cadrul proiectului.

Verificarea starii unui fisier

Pentru a verifica starea unui fisier se utilizeaza comanda cvs status. Sintaxa acesteia este urmatoarea:
	
	>cvs status [filename]
	
Un fisier se poate afla in una din urmatorele:

Comiterea modificarilor in repository

Pentru ca sursele modificate in copia locala sa fie puse in repository-ul global este necesara efectoarea operatiei de commit. Sintaxa acesteia este urmatoarea:

	
	>cvs commit -m "comentariu" numefis
	
Aceasta operatie se poate realiza numai in cazul in care fisierul din repository-ul global nu a mai fost modificat intre timp.

Adaugarea/Stergerea de fisiere in repository

Dupa adaugarea (importarea) proiectului in CVS este evident ca pe parcursul dezvoltarii vor aparea fisiere noi iar altele vor disparea.

Pentru adaugarea de fisiere in repository se utilizeaza comanda cvs add. Sintaxa acesteia este urmatoarea:
	
	>cvs add numefis
	
Pentru sergerea de fisiere din repository se utilizeaza comanda cvs remove. Sintaxa acesteia este urmatoarea:
	
	>cvs remove numefis
	
Ambele comenzi trebuie urmate de o operatie de commit pentru ca modificarile sa se reflecte in repozitory-ul global.

Stergerea copiei locale

Atunci cand consideram ca nu mai avem nevoie de copia locala putem sa eliberam spatiul ocupat utilizand comanda:
	
	>cvs release [-d] directory
	

Referinte