You are on page 1of 5
‘raraors oriag? GIT la gi? GIT la mt hg théng quan ly source code Phin 4: Giéi Thiéu Git - Hé théng quan ly source phan tan, cé I8 nhiGu 46 dit 48 néi 18n "tinh than" cia huéng tiép cn méi cia Git so véi cic hi thdng source control khéc nh’ SVN hay CVS. (Thét ra xu hung Git khéng phai |8 mdi, vind dang phttrién trén cing dng Iép trinh thé gidi, ca Facebook, Twitter, Yahoo cling dang ding github: http://aithub.com dé quan ly source code cla ho) 1 - CENTRALIZED (M6 hinh quan ly source tap trung) CVS (Concurrent Versions System) va SVN (SubVersioN) véi m8 hinh quan If source code tp trung, 18 hai phién ban doe sif dung phé bién hién nay. Céc hé théng nay cho phép cdc céng tac vign theo déi sy’ thay d6i dang thuc hién va biét ai dang phat trién nhénh no cla source code. CVS ra dif truéc, sau dé dén sy’ bin né ciia SVN. SVN ban chat van Ia CVS duoc cai tién, nung 6 nhidu cong cu hS trg gn, C3 CVS va SVN du cé tu’ tuéing chung vé céch lim vige chung gitta céc thanh vién theo mé hinh (quan ly source code t&p trung) nhu’ sau: C6 18 sy c&l thign In nh&t cLa SVN tir CVS 18 b6 sung vic commit cia céc thanh vién duige gol & Atomic Commit Atomic Commit cho phép méi commit ti thinh vién dugc upate day dii hoc khéng cé gi c&, dtu n8y rét c6 ¥ nghia khi mdy chis bl treo trong lic commit. Véi CVS Khi may chii bi treo hay két néi bi truc tr&c thi viéc commit cé thé bi dé dang, khéng dy du, *V4i SVN, céc commit c6 thé duigc roll-back lal trang thai truée 46, trong khi CVS thi khéng thé undo. **Ngoai ra SVN tién Idi hon CVS trong viée di tn va di chuyén céc tap tin, thu muc. Véi SVN cae tap tin dug di tén hod loai bd van mang theo day dii history va meta data cia né truvdc dé, trong khi dé vel CVS thi tap tin bi déi tén hoc di chuyén s& bi mat history trutéc 46. CVS cling khéng thé dy bat ci nhiing thay d6i méi dén repositories cha m8 chi cé thé dy [én repositories con cia n6, trong khi mét sé cng cu SVN cé kha ning nay. C3 hai sit dung giao this dBc quyén qua mét két ndi SSH d8 dim bao an todn théng tin dang duigc truyén di trén mang. SVN bé sung WebDAV DeltaV, giao thie nay dude dufa trén HTTP va HTTPS cung cp cho ngui dling rat tly chon dé kat ‘di cdc SVN qua web, i dy [8 nhiing tinh ning dan gin nhumng dn nay CVS van khdng thé hé trd vi ban than kign tric ala né cé thé gay I6i trén mét s6 thinh vién trong dy én. B6i vat Nu hét moi ngudikhi bt Gu véi source control, SVN 18 va chon t6t hon va hop I hon (né cung cp cho ngudi ding céc tinh ning cn thiét dui €8 dap ting nhu cBu co ban hang nady cia mat developer nhut: checkout, update, commit...) LY do duy nhat dé tip tuc st dung CVS Ia nu ban dang bi mac ket véi mot hi thdng source code cif trén CVS ma khéng cé cdch ndo 48 move né qua SVN ... Chia bin cing ban Tom tat 1. SVN mét hon va tién tién hon so vét CVS. 2. SVN cho phép atomic commit, CVS thi khéng. 3. SVN cé thé roll-back viéc commit, SVN cho phép déi tén va di chuyén file ho&c folder ma van git nguyén history cla né, trong khi CVS thi khdng, 4. SVN cho phép day thay di Ién repositories cha, trong khi CVS khéng 5. SVN hé trg hai giao thc mang (trong s6 46 cd HTTP va HTTPS trén én web) trong Khi CVS khéng hé trg HTTP va HTTPS Nhus vay ta thay SVN that chat chi Id phién ban cai tin so vai CVS, v8 mat co bin c8 2 du hoat déng nhu nhau: tat cd source code sé duigc dat trén 1 server trung tém, moi thanh vién déu lam vigc trén source code 46. 2 DISTRIBUTED (M6 hinh quan If source phan tan) Do dé Git o6 thé néi fa mét hung tiép cn hoan toan mdi so vi SVN (CVS va SVN theo huéng CENTRALIZED - quan ty source code tép trung, cbn Git theo hung DISTRIBUTED - quan ly source code phan tén). CChiing ta thu’ing ding SVN chéc d3 hidu khdi niém CENTRALIZED [a gi rui, vay thi DISTRIBUTED sé nhu' thé nao dy: \Véi mt vai h@ théng nhu Git va ngay cd CVS va SVN, repository g6c sé duigc Iu tr trén server va lap trinh vign sé checkout v8 mét ban copy méi nhat tif source code trén server dé dé lm vigc. Va khi ta mun apply thay déi cia ta tit local ta sé send yéu cBu dé lén server. 8 chinh [8 nguyén téc chung cla source control. Source control radii dé phyc vy inhu cBu cho nhiéu hon mat developer dé ho cé thé lam viéc vai nhau trén cing mat project. Mdi mat developer s8 co mét source code v8 lam viéc vi né, va cp nh&t thay déi cia minh cho hing nguti Khdc trong team biét Vigc cp nhat thay déi cua ban dén server la theo nguyén ly cua SVN va CVS, tife la khéng phan tén vi tat ca thay di déu ‘8p trung 4 server. Vide quén Ij t8p trung yéu c&u quyén truy cSp dn server khi ta commit hoiic update tiv nhiing thanh vvién khdc, chinh ho cing dua thay di cua minh lén server (dé trénh conflic hod out of update). tapi nll288 gil m 45 ‘raraors oriag? Git hodn toan di I8p: Quan ly phan tan cia Git 8 mét repositories khéng cn c8 chung mét noi dé lu tr, ma méi thanh vign sé cé mat repository & local cia ho, Tat cd thao tac ta lam viéc véi Git du 4 trén may cia ta, local repository, khi quyét dinh dua nhiing thay d6i dé Ién server ta chi cn mét thao tée "push" né ln server. Chuing ta van c6 thé share thay Si cia chiing ta cho thanh vin khéc, bing céch commit ho8c update truc tép tiy méy cla ho ma khéng phai théng qua repositories gc trén server (théng qua share ssh cho nhau). Va di nhién I moi thao téc du mang theo théng tin history vei Git. Tinh phén tin thi an toan hon so véi tip trung, vi mdi ban copy cua thanh vign du [a full copy tir repository géc, khi server bi down, cdc thanh vién vn cé thé lam viéc offline, ho van cé thé commit va update trén local cla ho ho8c thm chi véi rnhau ma khéng cn théng qua server. Khi server hoat ding tré Iai, ho c6 thé cp nhét tat ca len lai server. \Véi m6 hinh Git, MBi thanh vign tham gia git sé cé mét repository trén local cla ho: may John’s Mac day cé thé trd thanh mét repository server, sau khi copy source code ti repository server, vii 2 repository client kha la John's Linux va John’s Solairs, 2 may nay sé lam vigc hon todn véi may John's Mac nhu’ dt mé hinh git con khéc. Phan II: i dung L ub 18 gi Github htp://github.com, cn duigc goi Ia social network danh cho developer di vio hoat ding théng 2 nim 2008, 13 mat dich vu si dung hé théng quan I phn tén GIT gidp ngudi ding luu tr source code cho céc dyn. Tinh nng cia GIT inhu bai truéc minh d3 néi, né ¢8 moi tinh ning cua mét source control nhu’ SVN va hon thé nia. Github dugc viet bang Ruby on Rails. GitHub cung c&p dich vy thuidng mai va ca tai Khoan min phi cho céc dy én nguén mé. Theo khdo sat cla nguéi st’ dung Git vao nam 2009, Github hién dang la server Git luu tr source code phé bién nhat hign nay (Ngoai ra, Gitorious http://aitorious.org cling I& server Git haat déng giéng Github dude chi ¥ dén). 439000 developer tao han 1 triéu 350 ngan repositories 18 mat con sé kha &n tong, cling véi mét sé khach hang lén cla github nhu Twitter, Facebook, Yahoo ... cho thay tinh phé bién ca Github, ciing nhur céng déng lp trinh thé gidi tinh inhiém né nhu thé nao, 2. Tinh nang API cua Github Ngoai ning tinh ning tuyét vat cia hé théng quan ly source phan tan GIT néi chung (Ching ta s& néi d mét bai cy thé hdc), Github cbn hd trg nguéi ding nhiing tinh n&ng quan trong théng qua API sau: 1) API to Update The Repository via HTTP: GitHub hd tro nguai ding cé thé edit file source code tir web browser théng qua HTTP - POST. 2) API to Access Compare Views (Gidi thiGu chifc ning Compare Views http://github.com/blog/612-introduci...b-compare- view): Tinh nding nay hé tro nguét dling review va so sénh code ciia duf én théng qua viéc xem cc commit, comments, céc ding kndc nhau gia 2 version cla file code ... Tinh n&ng nay ciing théng qua HTTP - POST, naudi ding o5 thé thuc hign trén web browser. 3) API to Manage Service Hooks: GitHub hé trd tinh ning md rng post-receive hooks http: //help.github.com/post-receive- hhooks. Tinh nng nay cho phép ngusl dling dng kj 1 URL cia minh (nhu 18 mét web hook) cho cdc respository. Bét ct khi nao cé ngudi push source code cia ho In repository, GitHub théng bo cho ban biét bing cach POST théng tin (dang JSON) v8 fan push d6 dén URL ma ban d8 dng kj truéc dé, Cdn rt nhiéu API hitu ich khdc, cdc ban c6 thé xem tt c& tai dyhttp://develop github.com 3. CAch thie lam viée véi GitHub Lam vic v6i GitHub néi riéng hay hé théng GIT néi chung 6 2 workflow chinh Ia local workflow va server workflow. Ban cé thé lam moi chuyén thay d6i source code & local, sau khi da thay d6i xong, ban sé commit nhung thay é6i dé [én server va ban lén server phai la ban hoan chinh mét tinh ning néo 66, hoc fix bug xong, test xong hoc it nhat ban a phai chay dude. Khéng dugc commit code dé dang, chua qua test lén repository server sé lam anh huténg dn céc thanh vién khéc, naudc lai ban cé thé lam diéu d6 & repository local (Ban ciing o6 thé tao mét branch 6 server cho viéc comm code dé dang hay tinh ning chufa hodn thanh nhu ting lim vali SVN, né s® chiém space d server cing nhu lam mat th gian clia ban vao viée tuzong tac k&t néi véi server, vay tal sao khéng commit né len repository local ni, vita nhanh thao tac lai khéng mat space cia server) Mé réng: tif repository cia github ta c6 thé theo phuicng thiéc cila Git tao ban build cho production site (tr8n day cting l& m@t repository server) bing céch push thay déi (d3 qua test kf cang) lén né. Khi tung téc véi repository server (cp nh&t hay thay di) GITHUB doi héi ma chting nhan "Ban | ai" théng qua so sénh SSH key d local cla ban va SSH key trén server tuong Ging véi account ma ban da dng kj véi GITHUB truéc dé. tapi nll288 gil m 25 ‘raraors oriag? 1, Lam viéc vdi repository local: véi 2 command thudng ding la git add va git commit git add: add file da thay déi vao stage + git commit: commit cdc file d3 add vao stage Ién repository 6 local + Ngoai ra ban xem mét sé command khac 2. Lam vige vii repository & server github: Sau khi d3 quay t2 le ¢ local, cuéi cing khi cb mét ban én dinh va hodn tat (cé thdng qua test) ta s8 quyét dinh cp nhat 16 lén repository server véi ‘+ push: push thay di ti repository local Ién repository server + fetch: cp nhat thay d6i tir repository server v8 repository local + pull/rebase: sao chép source code tf server vé local workspace (tong dugg checkout cia SVN) 4. Hung dan siv dung: 1. Bing kj tai khodn GitHub tai http://oithub.com 2. Download va cai Gat cBng cy Git: Download tai day http://git-scm.com/download o6 3 phién ban cho ca 3 HDH, Khi Cai dt Git: Ban nén chon "Run Git From the Windows Command Prompt" 3. Tao SSH Key: SSH Key la mét ma chifng nhén 48 ban cé quyén thao tac trén repository cia Githiub, SSH Key s8 mang tt cd théng tin v8 account cia ban. SSH Key nay dUgc tao ra trén local may alia ban va duoc chinh ban add vao GitHub. Khi ban push source code ctia minh lén repository server, GitHub sé kiém tra SSH key 6 local ca ban va SSH key trén server ciia né (ma ban di add truéc dé) 8 gidng nhau khéng. N&u giéng nhau né xéc nhan ban c6 quyén thao tac trén repository server. Mét account GitHub cé thé cé nhiéu SSH Key trén server. Cch tao SSH Key chimng nhan nhu sau: Mé Git Bash d& dude cai dat 6 trén: + Step1: $ sshekeygen -t dsa : khdi tao SSH key ~ Step 2: Chon éuéing dn cho file SSH key: C:/Users/your_computer_name/.ssh/id_dsa + Step 3: Nhap mét password cla ban (nhp 2 Fn) - Step 4: Ban da tao key than cng key sé nm tai dia chi C:/Users/your_computer_name/.ssh/id_dsa - Step 5: Add SSH Key local vao server GitHub: ‘Bn dia chi file SSH key ma ban di tao, mé file id_dsa.pub va copy tat cd ni dung key trong 46 ‘Add key vita copy 46 vao account GitHub tai https: //github.com/account: Khi ban tuong tac var server cla GitHub, n6 sé kiém trra SSH key ma ban dé thém vao tai khoan cia minh (hinh trén) vots SSH key trong file local ma ban di tao ban du C:/Users/your_computer_name/.ssh/id_dsa Paste néi dung fle SSH key 6 local vao text field Key. Nhu’ vay ta d3 xong phn dng ky SSH key (df nhién Ib ban phal gidy private SSH key nay nhé) 4. Tao repository cho project méi trén GitHub tal https://aithub.com (sau khi ban ding nhap) Nh§p théng tin cia repository project cua bat Tao thanh cng ban sé c6 giao dién web quan ly repository ca ban trén GitHub nhu sau: Luu y link URL aia Git trong trang nay rét quan trong, né gi6ng link SVN ma ban hay ding dé cé thé thyc hién céc thao téc lén source code server nhu: checkout, update, commit .. 5. Khéi dng vei Git command line trén local: Step 1: Cau hinh théng tin cua ban: + ait config --olobal username “laptrinhvn" + git config --global user.email laptrinhvn@gmail.com Step 2: Thao téc trén local Ta lam mét vi dy nhé, tao mét thy muc cho project trén local va 1 file text readme, nhiém vu cia chiing ta la dua file nay lén repository server ma ta da tao 6 trén + Tao thir myc cho project : mkdir YOUR_PATH + Di chuyén dn thu’ muc vila tao: cd YOUR PATH + Khoi tao GIT cho thu’ muc nay: git nit + Thém file readme.txt vao "working stage" (Iuu ¥ readme.tit nay ban da tgo truéc dé trong thu myc YOUR_PATH): git add readme.bt + Commit né lén repository local cua ban: git commit -m "YOUR_ COMMENT" tapi nll288 gil m 35 ‘raraors oriag? Step 3: Thao tac vei GIT server (hinh trén) = Remote vao server: git remote add origin git@github.com:laptrinhvr/Demo ait (link nay éurge ldy tr project ma ban da tao truéc dé trén github) + Push thay d6i cia minh lén server github 6 nhénh master: git push origin master (Luu y dé trénh out of update hay conflict tle source code server so vei local, ta nén git pull hod git fetch, cp nhat thay d6i tir server v8 local, trutéc khi git push) Phian 3: Ly do sir dung 1. Linh dng, phong phi va da dang phién ban: \Véi nhiéu workflow lim vigc khéc nhau, tao ra nhiéu phién ban phong phi, da dang, ti d6 thic dy nhiing huting di met tir 1 source code gc trong cng déng ma nguén md \Véi viéc c6 nhiéu repo trong Git, cdc thinh vién cd thé két hp code cia ho véi nhau théng qua viéc merge repo local cia ho vai nhau, ti dé tao ra nhiéu phién ban, nhiéu tinh nang phong phi va. Ta cé thé thay qua vi du sau \Véi SVN phién ban cuéi clung cia ta nm 6 server va 18 phién bin duy nh&t tich hgp tt c& cdc tinh ning ma dev commit In. Ta khéng thay duce tinh phong phi va da dang cla cdc phién bin & dy. Hay xem GIT am ‘Bay [a mo wéc cia céng déng ma nguidn mé bay Iu. Céc dev cé thé ty’ do tich hap nhiing tinh ning hoc source code cua minh véi nhau, é8 tao ra rat nhiéu phién ban da dang tir mét phién ban géc. MBi phién ban 5 thé cé mét huéng di mei, dc lap nhau. Sau day [a mét sé workflow phé big: a. SVN Style: Véi Git ta van cé thé ding né theo céch hoat dng cla SVN: Cac developer déu dng bé dif ligu va commit thay d6i tran mét repo duy nh b. Integration Manager Workflow: Day la mé hinh khd phé bién hién nay, GitHub va nhiéu open source cling dang 4p dung né: ‘+ Integration manager Ia bd phn sé tip hgp cdc function duzgc céc dev commit Ién d8 kiém tra xem cé nén cp nhét function dé vao ban gc Khong ? + Blessed Repo: la source code n dinh sau nhiing thay di dugc Integration manager quan Ij va tich hgp cc function mdi tir dev vao. + Vidy mét cbng déng cé nhiéu dev cing phét trién mét open source: + Khi mét dev private muéin thém function ma minh nghi ra, ho s® download source code én dinh tir Blessed Repo v8. ‘Sau khi hon thanh function mong muén dua trén source code down v8 ho dua lén Developer public ciia minh. + Céc function trén Developer public duigc tap hop 6 Integrate Manager cho viée chon loc, testing va cudi cing sé udc tich hgp lén Blessed Repo thanh ban én dinh, . Dictator and Lieutenants Workflow: M@ hinh nay dude mé rng tit Integration Manager Workflow. Thay vi véi "Integration Manager Workflow" thi méi dev lam viéc dc Ip véi nhau, khéng hdp tac vii céc thanh vién Khéc. Vét "Dictator and Lieutenants Workflow” thi cic dev c6 thé lam viéc véi nhau, ho c6 thé merge truc tiép repo ciia ho (théng qua share SSH) véi ngudi khac thanh mét lieutenant. Mt lieutenant la mat phién ban tich hgp nhiéu tinh ning cua nhi@u dev. Cc lieutenant sé dufoc tp hop vé dictator, dictator sé lam nhiém vu gi6ng Integration manager: quan ly, testing, chon loc va tich hgp lieutenant véo blessed repo ki dat yéu cau. Local Brancl Phian nay nél v8 viée tao branch ca Git tét han cde source control khéc. Hu hét cdc source control vige tao branch du clone mét phién ban méi nhat ti repository g6c thinh mét thu’ muc méi trén server. Git cho phép ban tao nhiéu branch dBc lap 6 may local, tr d6 cdc thao tac create, merge, delete cdc dong code trong source code dién ra rat nhanh, trong vai gidy. iéu nay cé nghia la ban cé thé lam nhu sau: + Tao mét branch méi trén local cla ban dé thir nghiém ¥ tuéng cua , commit thir nghiém mét vai fan lén branch a6, bin bin tré lai trang thai trude khi tgo branch, réi sau d6 cé thé tré lai branch dé hoiSc merge code thi nghiém 6 vo trunk chinh, + Ban c6 thé tao mét branch chi chifa nhitng gi can dua Ién production site, ho8c Id ndi ban merge code cho viée testing va commit hing ngay trén brach dé, xem né nhu’I8 mat phéng thi nghiém local, + Ban c6 thé tao nhigu brach méi cho mai tinh nang méi ma ban dang lam, vi véy ban o6 thé chuyén di qua lai gitta chiing d8 dng hoc x6a branch dé di khi né duigc sét nh§p vao branch chinh hoc khdng cdn sir dung nia tapi nll288 gil m 45, ‘raraors oriag? + Trong khi tao mét brach dé thir nghiém, ban nhén ra né khéng hitu dung nia va chi cin xéa né di, Khéng ai khéc ingoai ban thay né (ngay ca khi ban da day cac branch khdc trong khi chd dof) Ban c6 thé lam tat cd céc diéu trén vét Git nhung cBn luu ¥ khi push Ién server ac, ban khang dugc push tat cB céc brach ma ban tgo ra dé thir nghiém. Viéc nay thic diy developer thir nghiém cc nhénh méi ma ho khéng cn phai lo fing v8 vigc phai len ké hoach nhu thé nao hay khi no dé sét nhdp nhénh cia ho vao nhanh chinh, trong qué trinh this ng moi history cla ho du duigc lu tr 6 local. Nu branch thi nghiém thanh cng thi tt, khéng dsc thi ho dan gian chi delete ci ld xong. Khi tham gia phat trign mét dy’ an ma nguén m@, nu dling svn mét nguisi déng gép khi mei tham gia sé khéng cé quyn tao branch trén server ca ho, vi Git ban cé thé tao branch local cho ning thir nghiém cia minh va ¢é thé sat nap né vao trunk chinh trén server khi this nghiém thanh cing. Lutu ¥: Tat cd cdc diéu trén khéng phai céc source control khae khéng lam duidc, ma du c6 céch dé lam nhuing chi phi thy hign cao, cé kha ning gay [6i trong qué trinh thy hién hoc lam phin kich thu‘de source & server. Git dugc sinh ra theo md hinh quan ly phan tén thi day 1a ut diém ma né thyc hién duge dé dan tapi nll288 gil m

You might also like