You are on page 1of 7

Subversion (SVN) L nh Duy

1. Ti sao cn Subversion Ti hin c mt chng trnh face detector cho php detect faces trong images (chuyn ny OpenCV cng lm c), v cho php detect eyes trong detected faces (OpenCV ko c chc nng ny). Chng trnh ny ti vit t hi hc PhD v s dng kh hiu qu cho nhiu ng dng khc nhau. Tuy nhin, do chng trnh vn c mt s bugs nn sau vi ln sa, mi ln lu mt ni khc nhau m ko c ch thch g; hu qu l cho n gi, ngi nhn 5 copies ca chng trnh ny, ti ko bit ct no l phin bn cui cng ko cn bug na. y l mt v d trong s rt nhiu v d ca ti lin quan n qun l cc phin bn ca chng trnh trong qu trnh lp trnh. Cch lm thng thng l mi phin bn lu thnh 1 th mc. Sau , mi khi c project mi th li copy th mc ny sang th mc ca project mi, ng thi vn gi li th mc c phng khi c th quay li phin bn c, nu cc cp nht trong project mi b li. Lm ti, lm lui vi ln, cui cng ko bit mnh sa ci g, u, khi no. cng chnh l l do ti cn c mt cch qun l hiu qu hn v cc s thay i trong qu trnh tin ha ca cc code ti vit. Cc version control systems nh subversion (svn) chnh l gii php m ti cn tm.

Version control is the art of managing changes to information. It has long been a critical tool for programmers, who typically spend their time making small changes to software and then undoing or checking some of those changes the next day. Imagine a team of such developers working concurrently - and perhaps even simultaneously on the very same files! - and you can see why a good system is needed to manage the potential chaos.

C kh nhiu h thng h tr version control, v d nh cvs, subversion, git, etc. Ban u ti ch bit cvs, nhng sau mi bit thm subversion, git. Sau khi tm hiu, ti quyt nh chn subversion bi v subversion l "hu du" ca cvs, ra i khc phc nhng hn ch ca cvs (hn ch g ca cvs m subversion c th gii quyt, ti ch mi nghe ni, ko hiu g v cha xi cvs v so snh n vi subversion bao gi!). Hin nay subversion c s dng kh thng dng trong rt nhiu d n m ngun m. Git mi ra i gn y, vit bi tc gi ca Linux. Trong bi ni chuyn ca mnh Google Talk, Linus ch trch subversion l sai v nguyn tc c bn. chnh y theo ti hiu l cch qun l. Git ca Linux dng c ch phn tn (distributed), trong khi cvs v subversion dng c ch tp trung (client/server). Ti th thch kiu client/server hn nn chn subversion.

2. Mt s khi nim Subversion da trn m hnh qun l tp trung kiu client/server. M hnh ny c 2 khi nim c bn: Repository t server l ni tp trung qun l cc phin bn ca cc tp tin. Working Copies t client l cc phin bn lm vic ca cc tp tin trong repository. Repository th ch c mt, trong khi working copies c th c nhiu (tng ng vi repository ).

Hnh 1 - M hnh client/server Mt kch bn thng thy l cc tp tin ca project A c lu repository. Sau , mi thnh vin ca project A, v d P1, P2 s checkout ly 1 phin bn copy cc file ca project A ny v my cc b ca mnh (gi l working copies). Mi khi P1 mun cc thay i trn cc tp tin ca project A my cc b ca mnh cp nht ln repository, anh ta s dng lnh commit. Nu P2 mun thy nhng thay i ca P1 trn repository cp nht xung phin bn ang dng ca mnh, anh ta s dng lnh update. Trng hp P1 v P2 cng cp nht mt tp tin, y l vn phc tp nht, v thao tc ny gi l merge . Subversion cung cp cc cng c nhn bit s thay i ca cc tp tin working copies so vi repository, ng thi cng cung cp cng c gip vic merge c d dng. qun l cc phin bn khc nhau, subversion dng khi nim revision. Ni mt cch n gin, h thng c th qun l c s thay i ca cc tp tin, mi tp tin s c dng Name-Revision. V d foo.c-rev1 v foo.c-rev2 l 2 revision ca tp tin foo.c. C mi ln commit, ton b repository s c mt con s revision mi (mi con s ny l duy nht v s ca revision sau ln hn s ca revision trc). Mt im cn lu l trong subversion, d ch thay i mt tp tin sau lnh commit, nhng ton b cc tp tin ca repository s c cng mt con s revision. Do , ko nht thit l foo.c-rev1 v foo.c-rev2 phi c ni dung khc nhau.

Hnh 2 - Minh ha v cc revision ca mt repository

Thng thng, c th nhn bit c nhng thay i qua mi ln commit, ngi ta thng note li nhng thay i ny trc khi commit. Nhng note ny s c lu vo history sau ny khi view ln c th nhn bit c hin trng ca tng revision, khi mun quay tr li trng thi trc cng rt d dng. Mt lu rt cn bn l nu bn mun subversion qun l cc phin bn/thay i ca mt tp tin no , th mi thao tc lin quan n tp tin , v d nh xa, sa, to mi, etc u phi thng qua subversion. Ni mt cch khc, bn nn trnh xa mt tp tin trong working copies bng chc nng thng thng ca file manager, v d nh dng nt Del trong Explorer, thay vo nn dng lnh xa ca cc subversion clients.

3. Cc bc ci t cho d hnh dung, hy ly mt m hnh thng dng v client/server l www. Trong m hnh ny, bn cn phi c mt phn mm server, cung cp (serve) cc dch v Web, v d nh Apache HTTP server, hoc IIS (nu xi Windows); v mt phn mm client, ng trung gian gia ngi dng v phn mm server, thc hin cc yu cu tng ng vi phn mm server (request), v d nh Firefox hay IE. Client v server phi c mt s qui c chung cho vic trao i vi nhau, trong trng hp ny chnh l giao thc http.

Hnh 1 - M hnh client/server ca subversion Cng tng t nh vy, khi dng subversion (svn), bn cn phi c mt phn mm server, v mt phn mm client (xem hnh 1). Danh sch cc phn mm server tng ng vi cc h iu hnh c th xem y. Nu bn dng Debian, Ubuntu hay Fedora, th phi ni l ko c g n gin hn, ch cn mt lnh t command line: apt-get install subversion (nu l Debian hay Ubuntu). Chn phn mm client mi l mt mi. Nu bn nhn vo danh sch ny th s thy hoa c mt khng bit chn ci no, b ci no. Ti cng mt c tun nhng cng khng c c cu tr li ng . Tuy nhin, cui cng th cng c mt vi phng n kh d. Cc phn mm svn client c th chia lm 3 loi chnh: stand-alone clients, desktopintegrated clients v IDE plug-in clients. Stand-alone clients l loi ng nh mt ng dng c lp, ngha l khng ph thuc vo phn mm no khc. Desktopintergrated clients l loi c tch hp vo cc phn mm desktop. V d nh TortoiseSVN tch hp vo Windows File Explorer, mi khi bn click chut phi trong mn hnh ca Windows File Explorer s thy cc chc nng ca svn client (xem hnh 2). IDE plug-in clients l loi tch hp vo cc mi trng lp trnh (IDE). V d Subclipse c tch hp vo Eclipse (xem hnh 3).

Hnh 2 - TortoiseSVN tch hp vi Windows Explorer

Hnh 3 - Subclipse tch hp vi Eclipse

Subversion h tr kh nhiu giao thc kt ni gia client v server. V d bn c th dng cc giao thc ca ng dng web nh http:// hoc https://, hay cc giao thc ca svn nh svn:// hoc svn+ssh://, hoc nu phn mm client v server ci chung trn 1 my th c th dng file:///. Vic cho php server h tr giao thc no ph thuc vo lc cu hnh. Nu bn dng Windows, th TortoiseSVN c l l la chn s 1. Ti xi th qua thy rt tin, rt nhanh. Nu bn dng Ubuntu Linux, th kdesvn cng l mt s la chn,

nhng ti xi th thy rt kh chu v n cc k chm. Khi chn client, nn chn loi c th h tr nhiu giao thc mt cht, ng thi cung cp cc h tr tin li cho authentication (kim tra nh danh khi bn truy cp my khc). Nu bn lp trnh bng Eclipse, subclipse cng kh tt. Ci t v s dng kh n gin, chy kh nhanh. Ti ko dng Visual Studio na nn ko bit client no l tt cho VS. C v nh AnkhSVN cng l mt la chn khng ti. Ti th xi server Linux ca lab t repository. svn th ci sn v c h tr giao thc svn+ssh nn ti ch xi giao thc ny lin lc gia client v server (Thc s l ti ko bit cu hnh server nh th no mc d c c qua ti liu cu hnh server. Tuy nhin ti ngh nu xi my Linux cho phn mm server v chn giao thc svn+ssh h tr th vic cu hnh ko c g kh khn v mi ci u theo mc nh m lm). V client, nu ti dng my Windows th ti xi TortoiseSVN, nu ti xi my Linux th khi lp trnh trong Eclipse, ti xi subclipse, ngoi ra th xi kdesvn (Ti dng kdesvn ch v n rt tin cho phn authentication, ch thao tc th chm i l chm, chc l v ti dng gnome ch ko phi kde cho my Linux ca mnh). 4. Mt s kch bn s dng 4.1. Eclipse Eclipse l IDE lp trnh. Lc ci t ban u, Eclipse ch h tr lp trnh Java. Nu mun h tr lp trnh C++ hay PHP, phi ci thm plug-ins. Mi ln ci nh vy c th s c nhng vn lin quan n tng thch. Do , ti t th mc Eclipse cho svn qun l. Mi khi install xong mi trng no chy thy n nh l commit, ri tip tc th nghim tip. Nu th nghim sai, li quay li trng thi trc mt cch d dng. 4.2. Virtual appliance Ti dng virtual appliance cho my o Linux. Cng tng t nh trng hp Eclipse k trn, ti c th th nghim nhiu th, v d ci th vi svn client ln th. Do , cng cn c cch lu li cc trng thi stable ca h thng. svn c dng cho mc ch ny. 4.3. Codes y l tnh hung thng dng nht. Trong hon cnh ca ti, code c vit chy c trn Windows v Linux. Do ti code tp trung trn repository. Sau nu dng my Windows, ti checkout v cp nht, hiu chnh code, sau commit ln li. Khi mun chy ng dng trn Linux, ti li checkout ra trn my Linux, dch v chy trn . Bng cch ny ti khi phi mt cng chp ti chp lui code, nht l khi code thay i xonh xoch v c bug, hoc khi chuyn sang project mi. Cng xin ni thm mt khng km phn quan trng l t chc repository (xem chi tit y). Bn c th to nhiu repository cho mnh, mi repository cho mt mc ch khc nhau. V d repository lu eclipse, mt repository lu virtual appliance v mt repository lu codes ca project XYZ. Ni chung, quan im l nhng g c

lp th tch ring thnh cc repository khc nhau, cn nhng g lin quan vi nhau th chung trong mt repository. i vi code, svn khuyn nn t chc thnh 3 th mc con trong repository l trunk, branches v tags. Ti c qua cng hiu vn nhng cha tri qua dng thc s nn ko mun vit y. Hi vng l post sau. 5. Mt s iu bn thm Ging nh khi bn dng mt h qun tr csdl no v d nh mySQL qun l cc tables ca mnh, bn s ko th no "nhn thy" cc tables ny ngoi file manager thng thng (v d Windows Explorer). Bn ch c th thy, thao tc v export cc tables khi dng cc lnh theo ng c php ca mySQL. svn cng tng t, nu xem ngoi file manager, bn s ko th no thy c cu trc repository ca mnh, cng nh nhng g mnh lu trong repository. Phi dng svn clients mi c th xem c. Ti vn ko hiu mt s chuyn: - svn lu li mi thay i trong qu trnh bn thao tc trn cc tp tin. S n mt lc no , kch thc ca repository s ln ln. Nu ti mun xa cc revision c hn, th ko bit lm cch no. C v cng ko n gin v phi xi svndump v thm my th lng nhng khc. - cc phn mm client v d nh TortoiseSVN c v nh t ng pht hin s thay i ca tp tin nm di s kim sot ca n. Gi s tp tin ny l rt ln, v d nh tp tin ca my o, vic kim sot s thay i nu tp tin my o c cp nht thng xuyn c lm h thng chy chm i hay khng (ging nh ci Norton Anti Virus vo th copy d liu cc chm v mi thao tc c/ghi u phi qua NAV kim tra virus). L nh Duy

http://ledduy.blogspot.com

You might also like