Verziókövetés és Subversion hsznált Scherer Blázs, Csordás Péter BME MIT 2009
Bevezetés: Fejlesztés közben fellépı áltlános problémák Egy tipikus fejlesztési problém: Az eddig futó lklmzáshoz új kódrészletet rkunk Az lklmzás lefgy Visszállítjuk módosításokt Az lklmzás még mindig fgy A helyzet csk bonyolódik, h nem egyedül dolgozunk: Változttunk mőködı lklmzáson De vlki más is beleír egy picit Az lklmzás lefgy
Megoldás: Verziókontroll, verziómenedzsment A verziómenedzsment lpj nem más, mint egy dott project összes változásánk nyilvántrtás. Egy verziómenedzsment rendszer nyilvántrt minden egyes file-on létrehozott változást, könyvtárstruktúrát érintı minden változást. A felhsználónk lehetısége vn megtekinteni project vgy egy file állpotát egy dott pillntbn, megtudni, hogy ki, mit és mikor változttott z dott projecten kommentet tenni minden változttás mellé
Alpfoglmk: Repository, Client, Working copy (munkmásolt) Repository (rktár): Központi nyilvántrtás z dtoknk vgy projectnek ( mster copy). Client: Felhsználó, ki dolgozni kíván projecten. Working copy: Egy Client áltl projectbıl létrehozott munkváltozt, mit szbdon változttht.
Alpfoglmk: mőködés Repository Visszír (Commit) Olvs (Check out) Olvs (Check out) Client 1 Client 2 Client 3
Verziómenedzsment strtégiák: A problém Hogyn támogtj verziókövetı rendszer, hogy felhsználók együtt dolgozznk, de mégse lépjenek egymás lábár? Ilyen strtégi nélkül könnyen elıfordulht, hogy egy file-t vgy projectet egyszerre többen módosítnk, mjd felülírják egymás módosításit ( módosítások nem tőnnek el, de nem is kerülnek bele z új verziób).
A Lock Modify Unlock megközelítés Módosítás elıtt le kell lockolni egy file-t. Tehát egyszerre csk egy ember tudj módosítni file-t. Olvsni tudj más is.
Lock Modify Unlock megközelítés Repository Lock Red User 1 Locl copy User 2 Locl copy
Lock Modify Unlock megközelítés Repository User 1 Locl copy 3; 3; User 2 Locl copy X Lock
Lock - Modify - Unlock megközelítés Repository 3; 3; Write Unlock User 1 Locl copy 3; 3; User 2 Locl copy
Lock - Modify - Unlock megközelítés Repository User 1 Locl copy 3; 3; 3; 3; Lock User 2 Locl copy Red 3; 3;
A Lock Modify Unlock megközelítés problémái Adminisztrtív problémákhoz vezethet: H egy fejlesztı elfelejt kilockolni egy file-t, kkor más nem férhet hozzá. H szbdságr megy, kkor pl. rendszergzd kell. Felesleges egymásr várást okozht. Egy C file-on belül például vlki z F1 függvényt krj módosítni, másvlki pedig z F2-t. Semmi köze kettınek egymáshoz mégsem tudják egyszerre megcsinálni. A biztonság hmis illúzióját keltheti. Például két fejlesztı dolgozik ugynzon projecten, z egyik lockolj z A file-t, másik B file-t. A két file között függıség áll fent. Mindketten zt hiszik biztonságbn vnnk, holott mégsem.
A Copy Modify Merge megközelítés (CVS, Subversion stb. áltl hsznált módszer) Egyszerre több fejlesztı is ki check out -olhtj ugynzt, mindenki sját Working copy-ját hsználj. Working copy: A Repository (vgy nnk egy részének) sját gépen tlálhtó leképezése. A létrejövı konfliktusokt pedig Merge-gel, tehát fuzionálássl oldják fel, és így hoznk létre egy új verziót. A Merge, bár támogtv vn verziókövetı rendszer áltl, lpvetıen mégis emberi döntéseket követel, tehát nem utomtikusn történik.
A Copy Modify Merge megközelítés Mindketten ki check out -olják file-t Repository User 1 Locl working copy Check out User 2 Locl working copy Check Out
A Copy Modify Merge megközelítés Mindketten módosítják Repository User 1 Locl working copy User 2 Locl working copy
A Copy Modify Merge megközelítés User 1 végzett, feltölti módosításokt Repository Commit User 1 Locl working copy User 2 Locl working copy
A Copy Modify Merge megközelítés User 2 nem tudj feltölteni módosításokt, mert z ı locl working copy-j nem up-to-dte Repository User 1 Locl working copy User 2 Locl working copy X Commit
A Copy Modify Merge megközelítés User 2 kiolvss z új verziót Repository User 1 Locl working copy Edit conflicts User 2 Locl working copy
A Copy Modify Merge megközelítés User 2 mergel Repository User 1 Locl working copy User 2 Locl working copy
A Copy Modify Merge megközelítés User 2 feltölti z új verziót Repository User 1 Locl working copy User 2 Locl working copy Commit
A Copy Modify Merge megközelítés User 1 Updte-el Repository User 1 Locl working copy Updte User 2 Locl working copy
A Copy Modify Merge megközelítés Egyszerre több fejlesztı is dolgozht ugynzon kódon. Commit-nél z esetleges konfliktusok kiderülnek. Embernek kell döntenie konfliktus feloldásáról. A verziókövetı rendszer nem helyettesíti z emberek közötti kommunikációt.
Melyek zok z esetek, mikor mégis lockot kell hsználni? Olyn bináris jellegő file-ok esetében, hol merge nem megoldhtó. Például, hngfile-ok, bináris file-ok NYÁK-tervek, kpcsolási rjzok Ezért legtöbb verziókövetı rendszerben megtrtották lock funkciót.
Subversion (SVN) A Copy Modify Merge módszert hsználj. Open source http://subversion.tigris.org/ Eredetileg CVS leváltásár, egy jobb CVS. Apche webszerver lá telepíthetı, lpvetıen szerver, létezik windows-os egybıl települı változt is. Alpvetıen commnd line kliens, mihez sok grfikus user interfce változt létezik.
Subversion working copy-k Helyi gépen lévı másolt repositorynk vgy nnk egy drbjánk. Trtlmz még egy.svn könyvtárt könyvtáronként, mi trtlmzz, hogy melyik file került módosításr stb. Minden commit mővelet htásár egy snpshot jön létre repository-ról.
Subversion hsznált Elsı lépés: server telepítése Apche webszerver lá Áltlábn nem mi dolgunk ezt telepíteni és beállítni különbözı felhsználókt. Létezik Visul SVN telepítı, mely egyszerősíti problémát.
Subversion server Windows-on http://www.visulsvn.com/server
VisulSVN (telepítés) Gykorltilg next nyomogtás, szerver nevet kell megdni.
Repository és nnk elemei Második lépés: repository létrehozás Repository (rktár): Központi nyilvántrtás z dtoknk vgy projectnek ( mster copy). A legtöbb repository projectenként következı lpkönyvtárkt trtlmzz: trunk Min line of development tgs Relese-ek, stbil verziók brnches Az elágzások követésére Minden commit mővelet htásár egy snpshot jön létre repository-ról. Az összes repository-bn nyilvántrtott elemhez (file, vgy könyvtár) trtozik egy ún. Revision number. A Revision number egy integer szám, mely minden változttásnál inkrementálódik.
Repository változás egy project során Második lépés: repository létrehozás A legtöbb repository projectenként következı lp könyvtárkt trtlmzz Trunk: Min line of development tgs: Relese-ek, stbil verziók Brnches: Az elágzások követésére
VisulSVN (Repository létrehozás 1)
VisulSVN (Repository létrehozás 2)
VisulSVN (User hozzádás) Hrmdik lépés: felhsználók hozzádás
VisulSVN (User hozzárendelése egy repository-hoz)
VisulSVN (repository címének másolás) Ezt kell mjd megdni kliensnek
Client Tortoise SVN Negyedik lépés: kliens telepítése
TortoiseSVN Ingyenes SVN kliens (létezik CVS változt is) http://tortoisesvn.net/ Windows-b beépülı felhsználói felület
Hozzá dás z SVN rendszerhez Ötödik lépés: új file-ok hozzádás verziókövetıhöz Add..
File-ok hozzádás 2 Ki kell válsztnunk, hogy mely file-ok fognk szerepelni rendszerben. Minden hozzádott könyvtárhoz létrejön sját rejtett SVN könyvtár. Nem célszerő olyn file-okt hozzádni rendszerhez, melyek nem trtoznk szorosn verziókövetés lá Object file-ok Hex file-ok is, bár ez lól vn kivétel.
Commit Htodik lépés: repository elsı feltöltése Még nincsenek hozzádv repository-hoz, csk commit-elni lehet. Fontos, hogy minden új hozzádáshoz egy note-ot kell írnunk. Ez teszi lehetıvé, hogy összefoglljuk mit változtttunk. A verziókövetı rendszer nem vrázsló, nem tlálj ki gondoltunkt.
Új felhsználó hozzáférése projecthez Check out Még nincs sját working copy-nk, létre kell hozni. Kijelöljük, hová krjuk sját snd boxunkt, és Check out
Check out Leszedi z új verziókt Minden up-to-dte
Ikon mgyráztok Norml: státus, up-to-dte Modified: helyi módosítás Conflict: nem updtelhetı Red-only vlki lockol-t, míg nem tudjuk lockolni, ddig csk olvshtjuk. Locked: Zárolv Deleted: Törölve Added: Új hozzádv
Helyi módosítás és nnk felvitele Commit Miért nem jó ez így? Meg kellene nézni, hogy volt-e változttás projecten (egyébként szólt voln). Össze kellene vetni változásokt.
Többiek követik módosítást Updte
De mi volt módosítás? Updte
Repository Több user módosít Mindketten ki check out -olják file-t User 1 Locl working copy Check out User 2 Locl working copy Check Out
Repository Mindketten módosítják User 1 Locl working copy User 2 Locl working copy
User 1 végzett, feltölti módosításokt Repository Commit User 1 Locl working copy User 2 Locl working copy
User 2 nem tudj feltölteni módosításokt, mert z ı locl working copy-j nem up-to-dte Repository User 1 Locl working copy User 2 Locl working copy X Commit
Repository User 2 kiolvss z új verziót User 1 Locl working copy User 2 Locl working copy Updte
Repository User 2 mergel User 1 Locl working copy User 2 Locl working copy
Repository User 2 feltölti z új verziót User 1 Locl working copy User 2 Locl working copy Commit
Több user módosít (Elsı lépés: Check..) Az egyik user jvít vlmit, és feltölti A másik is módosít, és mit kell tennie Elsı lépés: Check for modifiction
Több user módosít (Második lépés: Updte, Merge, mjd Commit) A módosított file-ok letöltése Updte H nincs olyn változás, mi zt részt érinti, mit mi hsználtunk, kkor utomtikusn mergel. H vn, kkor konfliktust jelez, mit nekünk kell feloldni.
A verziók változttásink követése
A verziók változttásink követése Mindegyikrıl meg lehet nézni Mi változott? Mikor? Ki áltl? Mi volt komment? Össze lehet z egyes változásokt hsonlítni.
A verziók változttásink követése grfikusn Revision grph
Vissztérés egy régi verzióhoz Updte to revision
Új relese létrehozás Brnch/tg
Összefogllás Hsznos eszköz, de Nem trtj helyettünk számon, hogy mit, miért módosítottunk. Csk segít tiszt project dtbázis létrehozásábn, nem csinálj meg helyettünk. Nem helyettesíti munktársk közötti kpcsolttrtást. Ezek z emberek dolgi.