You are on page 1of 49

H Thng Qun L Phin Bn Theo M Hnh Phn Tn (Distributed Version Control System)

GVHD :NGUYN MINH C SINH VIN :


NGUYN NGC LAN I TRN TIN LONG NGUYN C ANH

1. Tng quan v h thng qun l phin bn


a.Ti so phi c cc h thng qun l phin bn (Version control system)
Trong cng ngh phn mm cc lp trnh vin ,nhm lm vic vi nhiu d n ,mi d n li c nhiu phin bn khc nhau , trong mi phin bn vic lin tc chnh sa m ngun l iu khng chnh khi .Khi cc d n v cc phin bn lm vic c s lng ln th vic qun l cc phin bn phi lin tc s i v d n tr nn phc tp VD: Mi khi cn ly li mt s m ngun c pht trin thm lp trnh vin li phi nh v tr ni lu tr bn sao , hoc khi cn mt on m ngun trc hin ti

b chnh sa th lp trnh vin li phi vit li , vic chia s,phn chia m ngun gia cc thnh vin mt thi gian Chnh v vy cn phi c mt h thng qun l phin bn (VCS - version control system), - N lu gi cc phin bn ca m ngun ca sn phm phn mm mt cch ngn np,trnh t bn trong mt th mc c gi l Repository
-

Theo di ,sao lu,ng b ha cc thay i ,gip cc lp trnh vin c th d dng ly li phin bn mong mun Cho php nhiu developer cng tc vi nhau cng pht trin d n
( http://vi.wikipedia.org/wiki/h_thng_qun _l_phin_bn )

b. Mt s khi nim s dng trong cc h thng qun l phin bn


(Theo http://vi.wikipedia.org/wiki/VCS )

- Repository:Th mc lu tr tt c cc phin bn ca tt c cc file v nhng thay i ca chng ,n c th l ni cha cc file m ngun , hnh nh ,m thanh (Repository ca Egit mt plug in ca Eclipse)

- Phin bn: Mi tp tin c th c nhiu phin bn (version). Cc phin bn c nh s khc nhau. Mi ln chng ta hiu chnh ni dung tp tin v cp nht vo ni cha ca VCS, phin bn s c cp nht.

Mt s VCS s dng h thng phin bn 1, 2, 3, ... trong khi c mt s khc s dng h thng 1.0, 1.1, 1.2, ... Cc VCS thng lu phin bn cui cng v cc thay i ca cc phin bn trc so vi phin bn cui .
Cc s phin bn (nh 1.0, 1.1, hay 1.2,...) cn c gi l revision. i i vi s phin bn, VCS lu thm cc thng tin v ngy gi cp nht, ngi cp nht v mt s ghi ch nu c.

Mt vn nh trong cch nh s ny l lm sao cc thnh vin trong nhm bit c cc phin bn ca d n. S phin bn trong d n s thay i khi phin bn ca tp tin thay i. Cc VCS do s dng thm mt cch ghi nhn phin bn l nh nhn (labeling, tag). Khi , cho d s phin bn ca d n thay i, nhn ca d n vn khng i.

- Branch (phn nhnh) : Khi lm vic nhm, mi thnh vin u c mt phn m chung, gi l nhnh chnh (mainline). V cc thnh vin u lm vic vi mt phn ca nhnh chnh. Khi c yu cu tch mt phn m chung , v d nh to mt phin bn th nghim, cc thnh vin ca nhm phn phi th nghim cn m c lp vi nhnh chnh. Gii php l dng phn nhnh. Chia nhnh (branching) l mt c ch ca h thng qun l phin bn cho php tch mt phn ca d n ra ring. Phn ny s hot ng c lp vi d n chung. Khi , vic nh phin bn cng thay i. V d: nu mt tp tin A trong nhnh chnh c s phin bn l 1.14 v mt nhnh mi c to ra, A s c s phin bn trong nhnh l 1.14.1.1. Vic hiu chnh tp tin trong nhnh chnh s

cho ch s phin bn mi trong nhnh chnh l 1.15 tuy nhin nu hiu chnh tp tin trong nhnh th n c s phin bn mi l 1.14.1.2

- Check out: Download mt hoc nhiu file t Repository v th Repository client my mnh.Qu trnh ny bt u a mt phin bn ca project t trn Server lm vic Vi d v qu trnh Check out s sng Subversion mt h thng qun l phin bn

- Commit: Lu nhng sa i ca phin bn trong Repository Hnh nh minh ha qu trnh commit

- Merge (Gp): Nhm ni dung ca 2 file li vi nhau thay ,trong mt s trng hp cn thit thay v to thm mt phin bn mi c ni dung ca 2 file .Khi gp 2 file li vi nhau v mi phin bn c nhng dng code khng ging nhau v th c th xy ra xung t nh hnh :
http://www.benefitsflex.net/perl_tools/

Push: Vic a tt c cc commit ln Repository Server .Phng thc ny ch s dng cho m hnh phn phi (DVCS) Pull: Cp nht nhng thay i ca Repository Server .Phng thc ny ch s dng cho m hnh phn phi (DVCS).

c. Cc loi m hnh ca h thng qun l phin bn.


-

M hnh tp trung: Centralized version control system (CVCs) :cc h thng s dng m hnh ny ang c s dng ch yu nh CVS , Subversion (SVN) (Hnh nh c ly trong ebook: Pro Git Scott chacon)

M hnh tp trung s dng kin trc Client - Server trong server cha tt c cc files phin bn ,hin ti ca d n v lch s cc thay i chnh sa trn cc file , cc client kt ni ti server ly v mt phin bn copy y d n(check out) , hoc cp nht nhng thay i mi nht t d n (update) ,lm vic trn phin bn v sau lu li nhng thay i ca h (commit).

Client v server c th kt ni thng qua mng LAN hoc Internet,Client v server c th cng chy trn mt my nu CVS c nhim v theo v lch s ca d n do cc nh pht trin phn mm pht trin trong ni b. Phn mm server thng chy trn Unix trong khi CVS client c th chy trn nhiu h iu hnh khc nhau (trch t : http://vi.wikipedia.org/wiki/CVS) Kin trc client server l c trng ca VCS , c 2 h thng tp trung v phn b u s dng kin trc ny .

M hnh phn tn : Distributed version control system (DVCs) Cc h thng s dng m hnh ny hin nay l Git, Mercurial, Bazaar,Darcs

Mi thnh vin s c mt repository local v tt c cc thao tc nh commit, add u lm vic trc tip vi n ging nh bn n va l client va l mt server.Cc thnh vin

trong local c th share trc tip vi giao thng qua share SSH.V n cng cng hot ng c vi kin trc client server nh trong CVCs

2. ng dng ca DVCs
Mt s ng dng ca DVCs

http://code.google.com/ Google code s dng 2 h thng qun l ngi dng la chn l Subversion ca h thng tp trung v Mercurial ca h thng phn tn Git cng l mt DVCs v hin ti Git c rt nhiu cc cng ng lp trnh vin th gii s dng.

https://qt.gitorious.org/ (y cng l mt mng x hi lp cho trnh vin s dng Git qun l cc project) Cc Repository ca Linux Kernel

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary

http://android.git.kernel.org/

http://android.git.kernel.org/?p=device/common.git;a=summary Bn trong mt Repo u tin tn l common c cc thng tin v URL lm vic vi Repo trn server nh nht k cc commit

https://www.ohloh.net/repositories/compare y l bn thng k cc cng c c s dng qun l m ngun cc project trn trang ohloh.net .Cho thy cc h thng qun l phn tn (Git + mercurial + Bazaar ) mc d ra sau nhng ang ngy cng c quan tm v s dng, c bit l Git

nh chp s ngi tham gia github.com (mt mng x hi cho lp trnh vin s dng Git qun l m ngun) v cc Repository c s dng vo khong cui thng 10/2010 (nh trn trang : http://namheo.com/blog) . Git cng c rt nhiu cng ng lp trnh vin trn ton th gii s dng nh Twitter,facebook,yahoo,.

nh chp s ngi tham gia github v s lng cc Repository c s cho thy hin ti s lng ngi s dng dch v s dng Git tng rt nhanh. Vit Nam:

https://github.com/DrupalVietNam

https://github.com/sanglt

Ch vi mt t kha ting vit c th tm kim rt nhiu cc lp trnh vin Vit Nam ca cc cng ty phn mm hin ang s dng github qun l m ngun Mt s Git hosting (Ni lu tr source code h tr qun l bng Git) https://git.wiki.kernel.org/index.php/GitHosting

3. Kt qu nghin cu ca mt s nhm trc


Cc nghin cu ca mt s nhm trc gii thiu v h thng phn b qua qua vic tm hiu v Git mt VCS s dng h thng phn b v Github (mng x hi cho lp trnh vin) nhng hu ht ch mc ngn gn cha khi qut ht .C th xem bi vit c nh gi cao ti http://namheo.com/blog/share/phn-i-git-h-thng-qun-ly-source-phan-tan

4. Ni dung thc hin


a. M hnh ca DVCS:

(ebook Pro Git Scott Chacon Publishes:APRESS) DVCS cng l mt server ,c mt Repository mi ngi gi nhng thay i ln, mi client c mt Repo nm my h ,v vy h ch cn kt ni n Repository trung tm khi cm thy thch chia s nhng thay i.V cc hot ng nh commit , update xy ra Repository nm trn my , chng c ng b vi Repository trung tm thng qua push/pull.Nhng trong m hnh phn phi bt c ai cng c th l mt my ch nn c th Push/pull vi nhau.

http://docs.joomla.org/Dvcs

b.

Mt s Workflow Ca h thng phn tn


(Theo ebook: Pro Git Scoot chacon)

Centralized Workflow:

Trong h thng tp trung ,c chung mt m hnh hp tc duy nht Centralized Workflow Share repository l mt Repo trung tm m mi ngi c th gi cc thay i v cp nht, ng b ha .Nhng developer l nhng node ca Repo trung tm .Khi 2 developer cng gi (Push) nhng thay i ln mt Repo , th ngi gi ln sau phi cp nht (Pull) nhng thay i m ngi trc gi ln v gii quyt cc xung t m sau mi gi ln c

Integration-Manager Workflow:
V DVCs cho php c nhiu Repository trung tm,nn n c th c mt Workflow m mi developer truy cp v gi nhng thay i ln Repo public v c t nhng Repo khc .Kch bn ny thng bao gm mt Repo chun i din cho d n . mt developer ng gp vo d n th developer to cho ring mnh mt bn sao d nv a (push) nhng thay i ln.Sau c th gi nhng yu cu cp nht nhng thay i vo d n chnh v nu c d n chnh s cp nht (pull) nhng thay i .V ngi kim sot d n chnh c th test nhng thay i v gp (merge) nhng thay i trong nhnh lm vic ca h my ca h v push tr li Repo chnh.

(Ebook: Pro git,tc gi : scott chacon,NXB:APPRES ) Kch bn:

1. Ngi ch d n chnh Push nhng thay i vo Public Repository ca h

http://Github.com

2.

Ngi ng gp sao (Clone) sao Publick Repository v pht trin thm

3. Ngi ng gp s Push nhng thay i ln copy Public Repository 4. Ngi ng gp s gi mt mail hi h c mun update thm nhng thay i m h to ra khng 5. Ngi ch d n Add Repo ca ngi ng gp ging nh h remote Repo t xa v gp (Merge) ni dung thay i vo nhnh lm vic chnh 6. Ch d n Push nhng thay i ln nhnh chnh y l Workflow ph bin vi nhng trang nh github.com Mt trong nhng u im chnh ca phng php ny l bn c th tip tc lm vic v ngi ch ca d n chnh c th cp nht nhng thay i trong ca bn ti bt k thi im no .Ngi ng gp khng phi i project tch hp nhng thay i ca h,mi bn c th lm vic vi nhp ca ring h

Dictator and Lieutenants Workflow

(Ebook: Pro git,tc gi : scott chacon,NXB:APPRES )

y l mt bin th ca Integration Manager Workflow .N thng c s dng bi cc d n ln vi hng trng cng tc vin;mt v d ni ting l Linux Kernel.Cc integration managers c ph trch phn nht nh ca Repository, h c gi l lieutenants- ph t.Tt c cc lieutenants c mt integration manager c gi nh nh c ti (dictator)nhn t. Cc repo ca cc dictator ng vai tr nh Repo tham kho m t tt c cc cng tc vin cn cp nht (pull) Kch bn: 1. Cc nh pht trin thng thng lm vic trn nhnh ch (topic branch) ca h v ti c s (rebase) cng vic ca h trn cng ca tng th (master).Nhnh master l ca dictator 2. Cc lieutenant gp (merge) cc nhnh ch ca cc developer vo nhnh chnh (main branch) c dictator. 3. Dictator push master ca h n Repo tham kho v th nhng Dev khc c th rebase(cn c li) trn n Loi Workflow ny khng ph bin nhng c th hu ch trong cc d n rt ln hoc cc mi trng phn cp cao v n cho php cc trng d

n (dictator) y nhim nhiu cng vic v thu thp mt tp ln cc m ti nhiu im trc khi tch hp chng. a

c.

So snh gia h thng phn tn v h thng tp trung

CVCS Mc ch
(http://stackoverflow.co m/questions/111031/ comparison-betweencentralized-and-distributedversion-control-systems)

DVCS H thng c thit k vi mc ch l mt Repo tt tng ng vi bt k Repo khc,v merge t mt repo n repo kahcs l ch khc hnh thc giao tip.Bt k gi tr ng ngha ng tin cy c p t t bn ngoi ch khng phi bn thn chng trnh Qun l phn l mt repositories khng cn c chung mt ni lu tr, m mi thnh vin s c mt repository local ca h. Tt c thao tc ta lm vic vi Git u trn my ca ta, local repository, khi quyt nh a nhng thay i ln server ta ch cn mt thao tc "push" n ln server. Chng ta vn c th share thay i ca chng ta cho thnh vin khc, bng cch commit hoc update trc tip t my ca h m khng phi thng qua repositories gc trn server (thng qua share ssh cho nhau) khi server b down, cc thnh vin vn c th lm vic offline, h vn c th commit v update trn local ca h hoc thm ch vi nhau m khng cn thng qua server. Khi server hot ng tr li, h c th cp nht (push)tt c ln li server

M hnh lm vic
(http://namheo.com/blog/ share/ph%E1%BA%A7n-i-gith%E1%BB%87th%E1%BB%91ngqu%E1%BA%A3n-ly-sourcephan-tan/)

c thit k vi mc ch c mt Source chun nht v tt c cc developer lm vic (check out) t source ,v sau lu (commit) nhng thay i .Ch c s khc bit thc s gia CVS ,SVN,ClearCase,Perforce ,VisualSourceSafe v tt c cc CVCS khc l trong Workflow, hiu xut v tch hp mi sn phm cung cp repository gc s c lu tr trn server v lp trnh vin s checkout v mt bn copy mi nht t source code trn server lm vic. V khi ta mun apply thay i ca ta t local ta s send yu cu ln server. chnh l nguyn tc chung ca source control

An ton
(http://namheo.com/blog/ share/ph%E1%BA%A7n-i-gith%E1%BB%87th%E1%BB%91ngqu%E1%BA%A3n-ly-sourcephan-tan/)

Khi server b dow hoc li s khng lm vic c hoc mt d liu

Tc
(http://whygitisbetterthanx.com /#cheap-local-branching) Kch thc Repository (http://nguontrithuc.net/mybb/ thread-2318-post8470.html#pid8470)

CVCS lm vic gia client v server nn tc chm Kch thc repository thng ch bng 1.5 ln kch thc project n chaRepository ca Mozilla chim khong 12GB khi dng SVN C th s dng trong cc d n private ,cc cng ty ,t chc v c m hnh Client Server nn vic thc hin cc Workflow cho cc cng ng m ngun m nh mng x hi cho lp trnh vin nh github hoc d n ln ng ngi nh linux kernel l rt kh khn, Nh v client khi lm vic ch ly v mt phin bn t server nu mun phin bn khc h c th cp nht ,nn cng chnh v th m khi u n nhanh hn DVCS L mt phn ca hu ht CVCS

Git lm vic vi mi thao tc trc tip trn Repository ca Local nn nhanh hn. khi chuyn sang Git th ch chim khong 400MB. C th s dng mi phm vi ,rt thch hp cho vic pht trin cng ng m ngun m v vi cc d n ln ng ngi tham gia cng pht trin Repository ca DVCS l mt bn sao ca Repository trn server ,n cha tt c cc phin bn v lch s lm vic nn n s tn nhiu dung lng nu developer lm vic vi d n ln. Khi u chm hn Thiu c ch kha

Phm vi ng dng

Dung lng Repository client

C ch kha

d. Git v Github Gii thiu v Git

Git - H thng qun l source phn tn (DVCS) c dng ph bin nht trong s cc DVCS hin c.Mt trong nhng li th ca Git l n c xy dng lm vic trn Linux kernel, ngha l n c dng gii quyt hiu qu vi cc Repository ln .Thm vo Git c vit bng C, gim thi gian chy so vi cc chng trnh khc vit bng ngn ng bc cao hn.Mt l do cho tc qu nhanh so vi cc chng trnh khc l cc nh pht trin chnh thc hin mc tiu ny thit k mt s ng dng (mng x hi cho lp trnh vin) y l kt qu test khi s dng cc DVCS khc nhau vi cng mt m ngun

http://whygitisbetterthanx.com/#git-is-fast Ngoi vic nhanh hn Git cng tit kim c khng gian lu tr trn hosting hn cc cng c khc y l kt qu test khi push mt project ln hosting

Hu ht cc source control vic to branch u clone mt phin bn mi nht t repository


Hu ht cc source control vic to branch u clone mt phin bn mi nht t repository gc thnh mt th mc mi trn server.

Git cho php bn to nhiu branch c lp my local, t cc thao tc create, merge, delete cc dng code trong source code din ra rt nhanh, trong vi giy. iu ny c ngha l bn c th lm nh sau:

-To mt branch mi trn local ca bn th nghim tng ca , commit th nghim mt vi ln ln branch , bn bn tr li trng thi trc khi to branch, ri sau c th tr li branch hoc merge code th nghim vo trunk chnh. -Bn c th to mt branch ch cha nhng g cn a ln production site, hoc l ni bn merge code cho vic testing v commit hng ngy trn brach , xem n nh l mt phng th nghim local. -Bn c th to nhiu brach mi cho mi tnh nng mi m bn ang lm, v vy bn c th chuyn i qua li gia chng d dng hoc xa branch i khi n c st nhp vo branch chnh hoc khng cn s dng na -Trong khi to mt brach th nghim, bn nhn ra n khng hu dng na v ch cn xa n i, khng ai khc ngoi bn thy n (ngay c khi bn y cc branch khc trong khi ch i) rt nhanh, trong vi giy. iu ny c ngha l bn c th lm nh sau: -To mt branch mi trn local ca bn th nghim tng ca , commit th nghim mt vi ln ln branch , bn bn tr li trng thi trc khi to branch, ri sau c th tr li branch hoc merge code th nghim vo trunk chnh. -Bn c th to mt branch ch cha nhng g cn a ln production site, hoc l ni bn merge code cho vic testing v commit hng ngy trn brach , xem n nh l mt phng th nghim local. -Bn c th to nhiu brach mi cho mi tnh nng mi m bn ang lm, v vy bn c th chuyn i qua li gia chng d dng hoc xa branch i khi n c st nhp vo branch chnh hoc khng cn s dng na -Trong khi to mt brach th nghim, bn nhn ra n khng hu dng na v ch cn xa n i, khng ai khc ngoi bn thy n (ngay c khi bn y cc branch khc trong khi ch i)

(http://namheo.com/blog/share/ph%E1%BA%A7n-iii-git-%E2%80%93-t%E1%BA%A1i-sao-nens%E1%BB%AD-d%E1%BB%A5ng-git/)

Ci t Git
Vo trang http://git-scm.com/ chn h iu hnh v download:

Cc bc ci t:

S dng Git thng qua GitHub


GitHub l mng x hi dnh cho lp trnh vin ln nht v d dng nht. Mt s tnh nng hp dn , cch tip cn d nht hc Git l s dng Github v khi s dng Github s c hc tng bc s dng git lm vic vi github mt cch n gin v d hiu https://github.com/

http://help.github.com/win-set-up-git/

Wiki, issue, thng k, i tn project, project c t vo namespace l user. Watch project: theo di hot ng ca project ca ngi khc, xem qu trnh ngi ta pht trin phm mm th no, project tin ho ra sao. Follow user: theo di hot ng ca ngi khc, bit ngi ta lm project g mi, ngi ta follow user no, xu hng quan tm ci g (= cng ngh g). (http://lilylnx.wordpress.com/2010/06/10/github-com-mang-xa-hoi-danh-cho-lap-trinhvien/)

Cc cng c h tr dao din ha cho Git

Khi Git mi xut hin th hin cha c nhiu cng c dao din h tr cho n khi lm vic trn nhiu cng c lp trnh thm ch n hin gi nhiu ngi cha tm hiu v Git cng vn cn ngh nh vy.Nhng ch n thi im ny Git c kh nhiu cng c dao din h tr thay cho vic dng Git tool chy bng cc dng lnh Linux nh trong hng dn ca github.Sau y l mt s cng c h tr dao din Nbgit (Cho Netbeans)

http://nbgit.org/

http://code.google.com/docreader/#p=nbgit&s=nbgit&t=nbgit

http://eecchhoo.wordpress.com/

Git Extension (Cho Visual 2005/2008/2010)


http://stackoverflow.com/questions/97704/what-to-use-for-version-control-with-visualstudio-2008-for-inhouse-projects

https://sourceforge.net/projects/gitextensions/

Thng tin chi tit xem ti: http://code.google.com/p/gitextensions/

Egit (Cho Eclipse)


y l cng c c nhiu hng dn chi tit v d s dng http://www.eclipse.org/egit/

Hng dn chi tit tng bc thc hnh v gii thch mt s khi nim trong Egit: http://wiki.eclipse.org/EGit/User_Guide#Getting_Started

Hoc c th xem thm mt s hng dn :

http://www.vogella.de/articles/EGit/article.html

You might also like