Sunteți pe pagina 1din 11

 

   

Platformă de e‐learning și curriculă e‐content 
 

 
pentru învățământul superior tehnic
 

  Instrumente pentru Dezvoltarea Programelor
 

   
13. Intrumente pentru Versionare. Studiu de caz: SVN.
Obiective
Scopul acestui laborator este familiarizarea cu sistemele de versioning, utile in contextul
dezvoltarii concurente a proiectelor, in echipe de programatori.
Sistemul discutat este SVN, atingandu-se urmatoarele aspecte:
 utilizarea in linia de comanda
 integrarea cu Eclipse, folosind plugin-ul Subclipse

Version Control Systems (VCS)


VCS-urile servesc la gestionarea versiunilor multiple ale unor unitati de informatie (de exemplu
fisierele sursa ale unui proiect), intr-un mediu colaborativ. Fiecarui document i se asociaza un
numar de versiune, numit revision. La fiecare modificare, acesta este incrementat si memorat
impreuna cu autorul schimbarii. La orice moment de timp se poate reveni (revert) la o versiune
anterioara a unui document. Un teren propice pentru intrebuintarea unui astfel de sistem il
constituie wiki-urile.
Motivatia principala consta in posibilitatea ca diferiti membri ai echipei, aflati eventual in spatii
geografice indepartate, sa poata lucra simultan la proiect, urmand ca, la final, modificarile lor sa
fie reunite in noi versiuni ale proiectului. De asemenea, exista si alte avantaje. Cand se observa
un bug, se poate reveni la o versiune anterioara, in vederea determinarii momentului introducerii
acestuia in program. In acelasi timp, se poate urma o dezvoltare pe ramuri (branches), in care se
lucreaza, in paralel, la multiple versiuni ale proiectului - de exemplu, una in care se doreste
inlaturarea bug-urilor, iar cealalta, in care se urmareste adaugarea de noi functionalitati, inaintea
slefuirii celor existente.
O modalitate de reducere a spatiului utilizat pentru stocarea intregului istoric al proiectului o
constituie delta compression. Aceasta reprezinta un mecanism prin care se retin doar diferentele
intre versiunile succesive ale documentelor, obtinandu-se o utilizare mai eficienta a spatiului
disponibil.
Exista doua modele de VCS-uri:
 centralizat (ex: SVN): codul sursa este situat pe un server central, de unde clientii pot
obtine variante de lucru pe masina locala (working copy). Dupa efectuarea locala a
modificarilor, dezvoltatorul solicita actualizarea variantei de pe server.
 distribuit (ex: Git): nu exista un server central, procesul de sincronizare desfasurandu-se
la nivel peer-to-peer.
Terminologia specifica include:
 repository: pe server, contine ierarhia de fisiere si informatiile de versiune
 working copy: varianta locala, obtinuta de la server, pe care se fac modificarile
 checkout: aducerea pe masina locala a versiunii de pe server, sub forma unei working
copy
 update: actualizarea working copy-ului in functie de modificarile survenite, intre timp, pe
server. Se aduc doar fisierele modificate
 commit: cerere de publicare pe server a modificarilor facute asupra working copy
 revision: versiunea unui document
 import: popularea initiala a unui repository cu un proiect de pe masina locala
 conflict: apare cand 2 utilizatori vor sa actualizeze acelasi document, dar mecanismul nu
este capabil sa imbine cele 2 variante. In acest caz, se apeleaza la:
 resolve: actiune pe care utilizatorul o executa pentru a inlatura un conflict (de exemplu, in
cazul de mai sus, acceptarea variantei celuilalt utilizator in defavoarea propriei variante)
 trunk: principala directie de dezvoltare a proiectului (ca insiruire de revisions), in
opozitie cu:
 branches: ramuri secundare de evolutie a proiectului (de exemplu, in care se testeaza
feature-uri noi)
In cele ce urmeaza, vom prezenta SVN. Doua dintre avantajele sale sunt:
 portabilitatea
 suportul de integrare cu numeroase IDE-uri ca, de exemplu, Eclipse.

Subversion (SVN)
SVN (http://subversion.tigris.org/) este un sistem centralizat, cu urmatoarea arhitectura:
Pentru instalare, puteti rula, de exemplu, pe un sistem Debian:

$ apt-get install subversion

Aveti la dispozitie o carte free, despre SVN la http://svnbook.red-bean.com/.


Pornind de la client, accesul la repository-ul de pe server se poate face in trei moduri:
 printr-o schema de adresare locala, cand repository-ul si clientul se afla pe aceeasi
masina: file://<cale_fisier>.
 prin protocolul SVN: svn://<host>/<cale_fisier>
 prin HTTP, folosind un modul al server-ului Apache.
Iata o secventa obisnuita de lucru:
1. Crearea unui repository pe server (cu specificarea caii):

$ svnadmin create /var/svn/repo

2. Presupunand ca avem la dispozitie sursele proiectului, le incarcam pentru prima oara in


repository-ul creat:

$ svn import myproject file:///var/svn/repo/myproject -m "Initial import"

In comanda de mai sus, myproject reprezinta directorul ce contine sursele. Optiunea -m asociaza
mesajul cu actiunea. Ierarhia construita in repo are o structura speciala, fisierele nefiind vizibile
ca atare.
3. Pentru afisarea continutului unui director din repository:

$ svn list file:///var/svn/repo/myproject

4. Cand se doreste obtinerea unei working copy pe masina locala:

$ svn checkout file:///var/svn/repo/myproject myproject

Comanda de mai sus aduce proiectul myproject din repository in subdirectorul myproject, pe
masina locala.
5. Fisierele din working copy pot fi editate direct. In schimb, modificarea ierarhiei de
fisiere (crearea sau stergere de fisiere/directoare) presupune utilizarea comenzilor:

$ svn add ...


$ svn delete ...
...

si nu a comenzilor obisnuite, precum cp sau mv. In al doilea caz, SVN nu ar fi constient de


modificarile survenite.
6. Pentru actualizarea working copy, presupunand ca repository-ul a fost modificat:
$ svn update

Aceasta comanda va actualiza doar fisierele care au fost modificate pe server, fara a aduce
intreaga ierarhie, ca la checkout-ul initial.
7. Pentru publicarea copiei locale pe server:

$ svn commit <fisier>

8. Pentru vizualizarea modificarilor realizate local, de la ultimul update:

$ svn status
$ svn diff

Subclipse
Subclipse (http://subclipse.tigris.org/) este un plugin pentru Eclipse, ce permite interactiunea in
mod grafic cu repository-ul. Aveti la dispozitie un tutorial la
http://www.scribd.com/doc/245105/Subclipse-tutorial.

Instalare
Pentru instalare puteti folosi componenta Update Manager din Eclipse. Astfel, din meniul Help
alegeti Software Updates → Find and Install, pentru a porni managerul de actualizari.
Folosim, in continuare, Update Manager-ul din Eclipse pentru a automatiza procesul de instalare
a unor componente, precum Subclipse. Alegeti Search for new features to install si treceti la
ecranul urmator. Deselectati site-urile existente in panelul acesta si apasati pe New Remote Site.
Aceasta actiune va conduce la afisarea ferestrei New Update Site:

Introduceti orice nume doriti in campul Name (Subclipse ar fi o alegere buna) si introduceti in
campul URL adresa: http://subclipse.tigris.org/update_1.6.x/.
Apasati Finish. Eclipse va cauta automat noi componente de instalat. Cand cautarea ia sfarsit, se
afiseaza rezultatele cautarii (Subclipse fiind noua componenta gasita):
Selectati Subclipse, apoi Next. Acceptati termenii de licentiere si apasati din nou Next. Apasati,
in final, Finish, pentru a incepe descarcarea si instalarea componentei Subclipse.

Obtinerea copiei de lucru


Deschideti perspectiva SVN Repository Exploring si selectati Add SVN Repository.

Specificati adresa masinii de pe care obtineti, local, copia de lucru a proiectului SVN.

Ulterior, puteti selecta folder-ele din proiect ce vor fi aduse intr-o copie locala. Alegeti un folder
si selectati Checkout. Puteti specifica parametrii pentru aceasta operatie. Numele implicit de
proiect va fi acelasi cu numele locatiei repository-ului ales. Puteti, insa, specifica orice nume
doriti, dupa care continuati, apasand Next:

Puteti preciza locatia unde va fi salvata copia de lucru. Puteti alege orice locatie de pe disc, dupa
care apasati Finish:
Dupa finalizarea acestor operatii veti vizualiza copia de lucru, in forma proiect Eclipse. In
continuare, toate operatiile SVN pot fi declansate prin apasarea butonului drept al mouse-ului si
alegerea intrarii Team.

Exercitii
Pentru toate exercitiile va veti grupa in echipe de cate 2 persoane, ce vor lucra la un calculator.
Fiecarei echipe i se va aloca un repository. Exista doua posbilitati:
 utilizarea masinii virtuale, ce permite crearea de noi repository-uri
o Acces: din contul de pe fep (de exemplu, din fereastra FreeNX):
 $ ssh idp@10.42.5.137
o Username: idp
o Password: idp
 (rezerva) utilizarea unor repository-uri existente
o Acces: https://cipsm.hpc.pub.ro/svn/idpX, unde X este intre 1 si 12
o Username: idp_user
o Password: student
 Instalare Subclipse.
o Pentru inceput, veti verifica daca Subclipse a fost instalat in instanta personala de
Eclipse. In caz contrar, veti urma pasii descrisi anterior pentru instalarea
componentei in Eclipse.
o Dupa instalare, realizati urmatoarea configurare: in Window → Preferences →
Team → SVN, schimbati clientul SVN interface din JavaHL in SVNKit.
 Creare repository si importare proiect.
o Creati un repository in masina virtuala, in /home/idp/repos, ce va purta numele
echipei
o Creati un proiect Eclipse, ce va contine clasele de mai jos:
One.java 
public class One { 
      int i; 
      float j; 

Two.java 
public class Two { 
      // Hello 

o Importati proiectul in repository-ul proaspat creat, utilizand click-dreapta pe


proiect → Team → Share Project…
 Utilizati ca adresa a masinii ce contine repository-ul 10.42.5.137
 Radacina ierarhiei de repository-uri este /home/idp/repos, astfel ca va fi
suficienta adaugarea numelui repository-ului vostru la adresa de mai sus:
svn://10.42.5.137/<teamRepo>
o In cazul problemelor de autorizare:
 Trebuie sa creati cate un user SVN pentru fiecare membru al echipei
voastre, in fisierul /home/idp/repos/<teamRepo>/conf/passwd
 De asemenea, in fisierul svnserve.conf, prezent in acelasi director, trebuie
decomentata referinta la fisierul de mai sus.
o Pentru popularea efectiva a repository-ului, este necesar un commit: Team →
Commit…
o Obtineti doua working copies ale proiectului din repository, in forma proiectelor
locale svntest1, respectiv svntest2: Checkout…. Fiecare membru al echipei isi va
alege cate una din cele doua copii de lucru.
o In svntest1/One.java, redenumiti variabila i in x. Modificati Two.java in ce fel
doriti. Rulati Team → Synchronize with repository pentru a vedea diferentele
fata de versiunea initiala. Executati Commit.
o In svntest2/One.java redenumiti variabila j in y. Lasati Two.java nemodificat.
Executati Commit. Ce cauzeaza mesajul? Rezolvati problema, astfel incat sa
puteti efectua Commit. Dupa aceasta, observati versiunile diferite ale celor doua
fisiere.
o Realizati un Update in svntest1. Acum ambele working copies ar trebui sa
coincida. Modificati din nou variabila x in a. Realizati Commit.
o Asemanator, in svntest2, modificati tot variabila x, dar, de aceasta data, in b.
Executati Commit. Solutionati conflictul aparut. Editati fisierul One.java incat sa
includa ambele modificari si semnalati rezolvarea conflictului.
 Acces frecvent.
o Utilizati proiectul din repository-ul svn://10.42.5.137/common.
o In functia main veti adauga apeluri de tiparire cu numele voastre.
o Veti rezolva eventualele conflicte ce apar.

Resurse utile
 Pagina oficiala Subversion (http://subversion.tigris.org/)
 Version Control with Subversion, free book (http://svnbook.red-bean.com/)
 Subclipse (http://subclipse.tigris.org/)
 Tutorial Subclipse (http://www.scribd.com/doc/245105/Subclipse-tutorial)

S-ar putea să vă placă și

  • Proiectul de An
    Proiectul de An
    Document43 pagini
    Proiectul de An
    Rosca Doinita
    Încă nu există evaluări
  • Ac Răspunsuri
    Ac Răspunsuri
    Document19 pagini
    Ac Răspunsuri
    Rosca Doinita
    Încă nu există evaluări
  • Amoo Partea I
    Amoo Partea I
    Document20 pagini
    Amoo Partea I
    Rosca Doinita
    Încă nu există evaluări
  • Orar Examen FR IV
    Orar Examen FR IV
    Document3 pagini
    Orar Examen FR IV
    Rosca Doinita
    Încă nu există evaluări
  • Examen TIDPP
    Examen TIDPP
    Document3 pagini
    Examen TIDPP
    Rosca Doinita
    Încă nu există evaluări
  • Prezentare 11
    Prezentare 11
    Document16 pagini
    Prezentare 11
    Rosca Doinita
    Încă nu există evaluări
  • Prezentare 10
    Prezentare 10
    Document12 pagini
    Prezentare 10
    Rosca Doinita
    Încă nu există evaluări
  • Prezentare 8
    Prezentare 8
    Document34 pagini
    Prezentare 8
    Rosca Doinita
    Încă nu există evaluări
  • Prezentare 7
    Prezentare 7
    Document8 pagini
    Prezentare 7
    Rosca Doinita
    Încă nu există evaluări