You are on page 1of 9

SVN gyorstalpal

Ksztette: Flp Balzs

Bevezets
Jelen dokumentum a Subversion verzikvet rendszer felhasznlshoz nyjt segtsget. A lers a megfelel szerveroldali tmogats mellett a SmartSVN nev kliensprogram megltt felttelezi.

A verzikvetsrl rviden
A verzikvet rendszerek legfbb clkitzse egy olyan trol biztostsa, amely megjegyzi a benne trolt adatokon vgzett vltoztatsokat. A verzikvetsre els megkzeltsben tekinthetnk gy, mint egy olyan eszkzre, mellyel a mdostsok korltlan mlysgben visszavonhatak. A legtbb verzikvet rendszer valamilyen formban tmogatja a csoportmunkt. A felhasznlk egy kzs troln dolgoznak, gy gyorsan s egyszeren tehetnek kzz, vagy rhetnek el friss adatokat. Emellett megtartjk annak a lehetsgt, hogy brmikor visszatrjenek korbbi vltozatokhoz. Ezeknek a rendszereknek elssorban szoftverfejlesztk ltjk nagy hasznt. A fejleszts alatt ll programok kdbzisnak kezelsben komoly segtsget jelent a verzikvets.

A Subversion alapfogalmai
A Subversion (rvidebb nevn SVN) az egyik legnpszerbb nylt forrskd, ingyenesen elrhet verzikvet megolds (http://subversion.tigris.org/). Br ez az tmutat kizrlag ennek a rendszernek a hasznlatba ad betekintst, az itt ismertetett alapfogalmak ms krnyezetekben is visszaksznhetnek. A Subversion kzponti troljt a felhasznlk kzvetlenl nem mdostjk. Minden felhasznl sajt munkapldnyon dolgozik. Mappkra s llomnyokra levettve ez azt jelenti, hogy a trol egy olyan fjlszerver, amelyen nem lehet fjlmveleteket vgezni. A felhasznlknak ltre kell hozniuk a szerveren trolt adatok (valamely vltozatnak) egy helyi msolatt. Ezt a munkapldnyt szksg esetn frisstik, mdostjk, illetve kzzteszik sajt vltoztatsaikat. lljon itt egy sztr a Subversion fogalmaihoz: repository working copy checkout update commit kzs trol munkapldny munkapldny ltrehozsa munkapldny frisstse munkapldny vltoztatsainak kzzttele

Els lpsek a SmartSVN-ben


A SmartSVN egy Java-ban rt (s gy a legtbb platformon hasznlhat), ingyenes vltozatban is elrhet grafikus kliensprogram (http://www.syntevo.com/smartsvn/). A gyorstalpal htralv rszben egy C++ projekt SVN-ben vgzett fejlesztst tekintjk t. A fejleszteni kvnt program a Circle Pro, amely tetszleges kr terletnek meghatrozsra alkalmas. A projekt kt rsztvevje: Aladr s Bla. Aladr feladata a program belpsi pontjnak elksztse, mg Bla az alkalmazs motorjrt felels. Mindenek eltt ltre kell hozniuk sajt munkapldnyukat. Lssuk, mit jelent ez Aladr esetben. Mivel a fejleszts csak most indult, ez a kezdeti mvelet nyilvnvalan res knyvtrat fog eredmnyezni. A SmartSVN Project/Check Out... menpontjt kivlasztva elnk trul a Check Out

Project varzsl. Ennek els lpsknt meg kell adni a trol elrst, ehhez vlasszuk a Manage... gombot. Az elugr ablakban kattintsunk az Add gombra. Az erre elugr Add Repository Profile varzslban elszr a protokollt, a szerver cmt s a trol elrsi tjt kell megadnunk. Ezt rtelemszeren tltsk ki (lsd 1. kp).

1. kp

A Next gombra trtn kattintst kveten megadhatjuk az elrshez szksges felhasznlnevet s jelszt (lsd 2. kp).

2. kp

A Next gombra trtn kattints utn (ha az elz panelen msknt nem rendelkeztnk), a kliens rgtn megksrli a csatlakozst, s problma esetn szl. Ha minden rendben ment, az utols panelen bellthatunk egy egyedi nevet az elrsnek.

A Repository Profiles ablakban kattintsunk az Ok gombra, majd folytassuk a Check Out Project varzslt a Next gombra val kattintssal. Ezen a panelen kivlaszthatjuk, hogy mely fjlbl, vagy knyvtrbl szeretnnk munkapldnyt ltrehozni. Mivel a trol egyelre res, itt nincs semmi dolgunk, kattintsunk a Next gombra. Ezen a panelen hatrozhatjuk meg, hogy melyik helyi knyvtrban jjjn ltre a munkapldny (lsd 3. kp). Ezt vlasszuk ki, majd kattintsunk a Next gombra.

3. kp

A kvetkez panelen eldnthetjk, hogy verzikvets alatt lv munkapldnyt szeretnnk, vagy sem. Utbbi esetet csak olvashat zemmdknt kpzelhetjk el. Termszetesen a munkapldnyt fogjuk tudni mdostani, de nincs lehetsgnk a vltoztatsokat a trolba feltlteni. Hagyjuk meg az alaprtelmezett els zemmdot, s kattintsunk a Next gombra. Az utols, megerst panelen kattintsunk a Finish gombra. Ha most megnyitjuk a munkapldny knyvtrt egy fjlkezelben, lthatjuk, hogy valjban nem res. Tartalmaz egy .svn nev knyvtrat, amelyet az SVN kliens az ezen pldnnyal kapcsolatos adminisztrci cljbl tart fenn. Annak rdekben, hogy ebben a knyvtrban ne legyen kezelhetetlenl sok bejegyzs, a projekt sszes verzikvets alatt lv alknyvtra tartalmaz ilyen knyvtrat, s mindegyik csak a sajt fjljairl tartalmaz informcit. Ezeket a knyvtrakat tilos letrlni, vagy kzzel mdostani, klnben a munkapldny hasznlhatatlann vlhat.

Munka a SmartSVN-nel
Aladr kedvenc szvegszerkesztjvel elkszti a munkapldny knyvtrban az alkalmazs Makefile-jt:
PROJECT = circlepro OBJECTS = Main.o Circle.o CC = g++ build: $(OBJECTS) $(CC) -o $(PROJECT) $(OBJECTS) Main.o: Main.cpp Circle.h $(CC) -c -o Main.o Main.cpp Circle.o: Circle.cpp Circle.h $(CC) -c -o Circle.o Circle.cpp

clean:

rm -f *~ *.o $(PROJECT)

Tovbb megrja a belpsi pontot jelent Main.cpp fjlt:


#include "Circle.h" #include <iostream> using namespace std; int main(int argc, char *argv[]) { double r; cout << "r = "; cin >> r; Circle circle(r); cout << "A = " << circle.GetArea() << endl; return 0; }

Ha ezek a fjlok nem jelennek meg automatikusan a SmartSVN-ben, vlasszuk a View/Refresh menpontot. A Local State oszlop alapjn lthat, hogy a fjlok nincsenek verzikvets alatt. Fontos megjegyezni, hogy egy munkapldny nem felttlenl csak azokat a fjlokat tartalmazza, amelyek a trolban is elfordulnak. Fejleszts sorn a szvegszerkeszt ltrehozhat backup, vagy tmeneti fjlokat, a fordt object fjlokat, s vgl, de nem utols sorban a ksz futtathat llomny is ltrejhet itt. Ezeket kifejezetten nem javasolt a trolban elhelyezni, mert csak feleslegesen foglalnk a helyet. A fentiek okn az jonnan ltrehozott fjlok alaprtelmezsben nincsenek verzikvets alatt. Errl neknk kell explicit mdon gondoskodnunk a Modify/Add... menpont segtsgvel. Miutn a fjlokat a munkapldnyban verzikvets al helyeztk, itt az ideje, hogy kzztegyk. Vlasszuk ki a Modify/Commit... menpontot. A megjelen varzslban az els, konfigurcis panelt egy Next-tel tugorhatjuk. A kvetkez panelen ellenrizhetjk, hogy mely fjlok, illetve knyvtrak kerlnek feltltsre. Tovbb megadhatunk egy rvidebb megjegyzst a feltltssel kapcsolatban (lsd 4. kp).

4. kp

Kattintsunk a Finish gombra. Ha Bla ezutn hozza ltre munkapldnyt, vagy vgez egy frisstst a Modify/Update... menpont kivlasztsval, a fjlok megjelennek nla. Ezt kveten is hasonl mdszerrel tltheti fel az alkalmazs hinyz rszt. Circle.h:
#ifndef CIRCLE_H #define CIRCLE_H class Circle { private: double r; public: Circle(double r); double GetArea(); }; #endif

Circle.cpp:
#include "Circle.h" #include <cmath> Circle::Circle(double r) { this->r = r; } double Circle::GetArea() { return r*r*M_PI; }

A SmartSVN fablakban tovbbra is szpen ltszanak a munkaknyvtr fjljai, az utols mdosts szerzjvel s dtumval egytt (lsd 5. kp). Viszont feltnhet egy rdekessg a Last Revision oszlopban: Bla fjljai a 2-es verziszmot viselik, mg Aladri az 1-est. Ez annak ksznhet, hogy a Subversion kln tartja nyilvn az egyes fjlok verziszmait, s nem egy kzs verziszmot trol (ahogy pl. a CVS teszi). Ezen kvl egy j fjl verziszma nem 1-tl indul, hanem a trol legfiatalabb fjljnak verziszmnl lesz 1-el nagyobb. gy a verziszmok valjban azt jelentik, hogy a trol hnyadik verzijban trtnt az adott fjllal az utols vltoztats.

5. kp

Tovbbi ujjgyakorlatok
Tegyk fel, hogy Aladr vletlenl mdostja a Circle.cpp fjlt, s mr nem tudja helyrelltani a helyesen mkd vltozatot. Vlasszuk ki a fjlt a fablakban, majd hasznljuk a Modify/Revert... menpontot. Elkpzelhet az is, hogy Aladr letrli a sajt munkapldnybl a krdses fjlt. Ezen egy Modify/Update... mvelet segt. Fontos megjegyezni, hogy ha frissts esetn nem a legfrissebb vltozatot (HEAD) vlasztjuk ki, lehetsg van a munkapldnyt egy korbbi llapotba visszalltani. A felhasznlk a feltltsek megjegyzseit is bngszhetik a Query/Log... menpont segtsgvel (lsd 6. kp).

6. kp

Konfliktus-kezels
Egy kzponti krdse a verzikvetsnek az, hogy miknt lehetne megoldani a felhasznlk kztt fellp versenyhelyzetet. Tegyk fel, hogy Aladr lekrdez, Bla bellt metdust r a Circle osztly r tagvltozjhoz. Prhuzamosan mdostjk a sajt munkapldnyukat, majd Bla kzzteszi a vltoztatsait. Ezutn Aladr gy ksrli meg a kzzttelt, hogy a sajt vltozata nem tartalmazza Bla vltozatatsait. Ha a mveletet a rendszer sz nlkl elvgezn, Bla munkja elveszne, radsul errl egyikk sem rteslne. Erre a krdsre egy lehetsges vlasz a zrols. Ez sajnos tbb problmt vet fel, mint amennyit megold. Mi trtnik, ha egy kliens zrol egy fjlt, majd elfelejti felszabadtani? Kinek a felelssge a bent ragadt zrakat feloldani? Ha egy nagy fjlban az egyik kliens csak az elejt, egy msik csak a vgt szeretn mdostani, mirt szksgszer, hogy egyikk kizrja a msikat? A Subversion vlasza az gynevezett copy-modify-merge modell. Ebben a felhasznlk termszetes mdon, zrak nlkl dolgoznak. Ha konfliktus alakul ki, a rendszer ksrletet tesz arra, hogy a ksbb rkezett felhasznl munkjt beolvassza a friss vltozatba. Ez sok esetben sikerl is, de pldul a fenti esetben meghisul (mindketten a fjl vghez fznek adatot). Ilyenkor hibazenettel jelzi, hogy a kzzttel nem sikerlt (lsd 7. kp).

7. kp

Ez esetben Aladr tudja, hogy frisstenie kell a sajt munkapldnyt a kzzttel eltt. Ha ezt megteszi, a 8. kp ltvnya fogadja.

8. kp

Lthat, hogy a Subversion nem volt kpes a konfliktus feloldsra, ezrt a felhasznlra bzza ennek a kezelst. Ltrehozott egy .r2 kiterjeszts vltozatot a fjlbl, amely a munkapldny rgi vltozata. Az .r3 kiterjeszts vltozat az, amelyik jelenleg a trolban van. A .mine az, amelyiknek a kzzttele az imnt nem sikerlt. Vgl a kiterjeszts nlkli vltozat, amelynek llapota Conflict, az albbit tartalmazza:
#include "Circle.h" #include <cmath> Circle::Circle(double r) { this->r = r; } double Circle::GetArea() { return r*r*M_PI; } <<<<<<< .mine double Circle::getRadius() { return r; } ======= void Circle::setRadius(double r) { this->r = r; } >>>>>>> .r3

A felhasznl dntse, hogy melyik fjlbl kiindulva, miknt oldja fel a konfliktust. Aladr jelen esetben tudhatja, hogy egyszeren a <<<<<<<, =======, >>>>>>> jellket kell eltvoltani a fjlbl, s a problma megoldst nyer. Ezt megteheti a SmartSVN-en bell is, ha az Edit/Open menpontot vlasztja. Miutn a konfliktust feloldotta, ezt jeleznie kell az SVN-nek a Modify/Mark Resolved... menponttal. Ezt kveten mr sikeresen kzzteheti a mindkettejk vltoztatsait tartalmaz, 4. verzit. A copy-modify-merge modellbl is jl ltszik, hogy a verzikvet rendszer nem gondolkozik a fejleszt helyett, s nem helyettesti az emberi kommunikcit. Mindemellett elengedhetetlen segdeszkz a fejleszts sorn.

You might also like