Yon siksè modèl fèy palmis nan Git

Pou itilize Git a ki enpòtan, ak sa gen ladann kenbe yon anviwonman kolaborasyon developman pou lojisyèl à.

Kredi

Post sa a se yon vesyon Potige nan orijinal la, An angle, “Yon model branch sikse Git“, ote a ki otorize, Vincent Driessen. Mesi nonm!

Pou rezon teknik, kek mo kle yo te rete nan lang angle. Mwen te eseye asire orijinalite teks la, men mwen konfese mwen te oblije fe ajisteman pou mwen fe ajisteman pou mwen konprann nan lang nou (EN-BR). Nenpot koreksyon oswa sijesyon nan amelyorasyon nan tradiksyon se akeyi.

Yon ti rale

Sa a se pa yon anseyman Post ki jan yo sevi ak Git. Si se sa ou bezwen, sijere pran yon gade nan Manyel Git. Li se tou pa objektif nou yo montre ki jan yo fe yon vesyon lojisyel, nan ka sa a, We Semantik vesyon.

Isit la pwopozisyon an se nan jere kolaborasyon an nan ekip la nan vesyon lojisyel. Ou konnen le ou gen plizye pwograme “brase” nan kod la menm sous? Sa enpotan pou pi vit devlopman, men li ka jenere yon bann maltet (blesi ak retravay) si pa gen kontwol. Pou anpeche yon pwomote nan ranplase travay yon lot epi asire pwogresis ak devlopman oganize, minimize konfli ak jere vesyon lojisyel, se ke nou itilize Git ak la branch yo apre.

Model Branch

Nan pos sa a mwen prezante model la devlopman mwen te itilize nan kek nan pwoje mwen (toulede, nan travay ak prive) Sou 1 sa gen kek ane, e se te tre sikse. Mwen te vle ekri sou sa pou yon tan long, men pa janm jwenn yon tan ki disponib, byen lwen telman. Mwen pa p pale osije detay pwoje, senpleman osije estrateji branch yo e jesyon de Lage yo.

Model sa a konsantre selman sou Git kom yon zouti pou vesyon tout kod sous nou an. (Pandan wap di sa, si ou enterese nan git, konpayi nou an Gitprime Founi, an tan reyel, gen kek analytics done etonan pou optimize jeni lojisyel)

Poukisa gita?

Pou yon diskisyon bon jan nan avantaj git la ak konpare ak sistem kontwol sous santralize, We a Entenet. Gen yon fomidab “Ge” anviwon sa. Kom yon pwomote, Mwen pito Git sou tout lot zouti ki deja egziste jodi a. Git te san dout chanje fason devlope yo panse sou fe yon Amalgame oswa kreye yon branch. Mwen soti nan mond klasik la nan CVS / Subversion, Kote fusion/branch se yon bagay ou fe yon fwa nan yon ti tan epi li toujou sanble yon ti kras pe (“Fe atansyon ak konfli de Amalgame, yo mode ou!”).

Avek Git aksyon sa yo [fusion/branch] yo tre senp epi reprezante youn nan pati prensipal woutin travay nou an, Kwe. Pa ekzanp, nan Liv CSV / Subversion, branch ak fusion pou lapremye fwa selman nan chapit pita yo (pou itilizate avanse), pandan kelkeswa liv sou Git, men sa nan chapit la 3 (Fondamantal).

Kom yon konsekans nan senplisite li ak nati repetitif, branch ak fusion yo pa gen yon bagay pou yo pe. an reyalite, zouti kontwol vesyon yo ta dwe edeAmalgame e kreye branch plis pase nenpot lot bagay.

Pa gen plis pale, an nou ale nan model la devlopman. Model la mwen pral prezante isit la se esansyelman pa gen anyen plis pase yon seri pwosedi ke chak manm ekip dwe swiv yo nan lod yo vini ak yon pwosesis devlopman jere.

Desantralize, men santralize

Konfigirasyon nan repozitwa a ke nou itilize e ki travay tre byen ak model sa a nan branch se konpoze de yon repozitwa santral. Remake byen ke depo sa a se selman “konsidere kom” Santral (paske Git se yon DVCS [Distribiye Sistem Kontwol vesyon], IE, pa gen anyen tankou yon repozitwa santral nan nivo teknik). Nou pral referans sou repozitwa sa a kom orijin, depi non sa a abitye ak tout itilizate Git.

Chak pwomote fe rale ak pouse pou orijin. Men, pi lwen pase relasyon an pouse pou santralize a [orijin], chak pwomote kapab ranmase [Rale] chanjman lot pe yo pou fome subteams. Pa ekzanp, sa a ka itil yo travay ansanm ak de oswa plis devlope sou yon foncsyon nouvo, deja voye [pouse] travay la nan pwogre pou orijin. Nan figi ki anwo a, gen alice ak soumet bob yo, Lalis ak David, e Clair ak David.

Teknikman, sa vle di pa gen anyen plis pase Lalis te defini yon aleka Git rele Bob, montre nan repozitwa Bob a, e vis versa.

Branch prensipal yo

Nan background nan, model devlopman sa a byen enspire pa model ki deja egziste deja la. Repozitwa santral la gen de branch [branch yo] ak yon lavi enfini:

  • mèt
  • devlope

A met branch nan orijin dwe abitye ak tout itilizate Git. Paralel ak met branch, gen yon lot branch Rele devlope.

Konsidere orijin/met kom se branch prensipal la kote kod sous la Tet toujou reflete yon eta pwodiksyon-pare [pre pou pwodiksyon].

Konsidere orijin/devlope kom sete branch kote kod sous Tet toujou reflete yon eta ak denye chanjman devlopman yo dwe delivre nan pwochen lage. Gen kek ki ta rele sa “branch entegrasyon”. Sa a kote bilding ki pi senister rive.

Le kod la sous nan la devlope branch rive nan yon pwen ki estab epi yo pare pou yo relve [libete], tout chanjman yo dwe fizyone [fizyone] retounen nan met branch ak Le sa a, make ak yon nimewo vesyon [liberasyon]. Ki jan sa fe an detay, yo ap diskite pita.

Se konsa, chak fwa chanjman yo enkopore [fizyone] retounen nan mèt, yon nouvo vesyon pwodwi [libete], pa definisyon. Nou eseye fe byen strik sou li, Se konsa, Teyorikman, nou te ka menm itilize yon script Kwoke otomatikman kreye epi voye aplikasyon nou an nan serveurs yo pwodiksyon chak fwa gen yon Komite nan mèt.

branch oksilye yo

akote branch yo Pwensipal, mèt ak devlope, model devlopman nou itilize yon varyete de branch yo sipo pou ede devlopman similtane nan mitan manm ekip yo, Kisa 1) fe li fasil pou swiv karakteristik nouvo [Karakteristik], 2) prepare pou livrezon yon nouvo vesyon [liberasyon] ak 3) ede ou byen vit ranje echek pwodiksyon [Hotfiks]. Kontreman ak branch yo Pwensipal, Sa branch yo gen yon ti tan, depi yo ap finalman retire.

Diferan kalite branch yo [Oksilye] ke nou ka itilize, Yo:

  • Karakteristik branch
  • Lage branch
  • branch Hotfix

Chak nan sa yo branch yo gen yon objektif espesifik epi li mare pa regleman strik, pou, branch yo leve kanpe branch e sa branch yo dwe fizyone [fizyone] sib yo. Nou pral we chak nan yo [branch yo] nan yon moman.

Soti nan yon pespektiv teknik, Sa branch yo yo pa konsidere kom “Espesyal”. Chak kalite branch se kategori nan fason nou itilize yo. Sa tout fason, senp branch yo de bon git la fin vye granmoun.

Karakteristik branch

[Karakteristik = karakteristik / karakteristik]

– Li ka branch [branch] Soti:
devlope
– Dwe amalgame [Amalgame] anko:
devlope
– Konvansyon pou randevou branch:
Anyen, Eksepte mèt, devlope, lage-*, oswa hotfiks-*

19 branch karakteristik yo (oswa pafwa yo rele branch sije yo) yo itilize yo devlope karakteristik nouvo / foncéalités pou yon lage tou pre oswa nan lavni. Le ou komanse devlopman yon karakteristik, vesyon an sib kote karakteristik sa a ap enkopore kapab byen enkoni nan pwen sa a.

Sans yon branch karakteristik yo seke li egziste osi lontan ke karakteristik se nan devlopman, men evantyelman li pral enkopore [fizyone] retounen nan devlope (definitivman ajoute nouvo karakteristik nan pwochen liberasyon) oubyen te derespekte (nan ka yon eksperyans san sikse).

Karakteristik branch tipikman egziste selman nan repozitwa a devlope, pa nan orijin.

Kreye yon branch karakteristik

$ katye gita -b b devlope myfeature
# Switched to a new branch "myfeature"

Enkopore yon karakteristik fini nan devlope

Karakteristik kapab fusionnen[fizyone] avek devlope branch definitivman ajoute yo nan pwochen an liberasyon.

$ katye devlope
# Chanje nan branch 'devlope'
$ git fizyone --nan-afyati
# Mete ajou ea1b82a.. 05e957
# (Rezime chanjman yo)
# $ branch branch -d myfeature
# Efase branch myfeature (te 05e957).
$ git pouse orijin devlope

Drapo a –pa gen okenn fason lakoz amalgame [Amalgame] toujou kreye yon nouvo obje Komite, menmsi li ta ka fet avek yon avansman vit [anmedan]. Enfomasyon sa a anpeche yo pedi enfomasyon sou istwa egzistans yon branch karakteristik, gwoupman tout komesyal yo sa yo te ajoute nan karakteristik. Konpare:

Nan let la ka [soti de figi ki anwo a], li enposib we nan istwa git ki nan komesyal yo yo te aplike nan yon karakteristik; ou ta gen manyelman li tout mesaj boutey demi lit. Ranvese yon karakteristik Antye (IE, yon gwoup de komesyal yo), se yon tet fe mal reyel nan denye sitiyasyon an, aloske li fasil fe si drapo a –pa gen okenn fason te itilize.

Wi, sa ap kreye kek plis obje komesyal yo (Vid), men pwofi a pi wo pase pri a.

Lage branch

[Lage = lage / livrezon / vesyon]

– Li ka branch [branch] Soti:
devlope
– Dwe amalgame [Amalgame] anko:
devlope ak mèt
– Konvansyon pou randevou branch:
lage-*

19 branch yo ede prepare yon nouvo vesyon pwodiksyon [lage pwodiksyon]. Yo pemet ou mete degoutan yo sou minit ki sot pase a mwen. epi tou, yo pemet pou koreksyon mine Pwen e definisyon de meta-done pou yon liberasyon (nimewo vesyon, bati dat yo, ets). Le ou fe tout travay sa a nan yon branch lage, a devlope branch vin pwop pou resevwa Karakteristik de pwochen gwose a liberasyon [vèsyon pipiti de youn].

Moman kle a yo kreye yon nouvo branch lage branch soti devlope se le a devlope se deja (Preske) reflechi sou eta nouvo an liberasyon [vèsyon pipiti de youn]. Tout Karakteristik aplikan yo pou liberasyon enkopore dwe enkopore [Amalgame] Pou devlope nan pwen sa a. Nan lot la pase Karakteristik vize a Lage yo avni yo ta dwe atann yon pwochen liberasyon [vèsyon pipiti de youn].

Se egzakteman nan komansman yon branch lage ke pwochen an liberasyon resevwa yon nimewo vesyon – pa anvan. jiska pwen sa, a devlope branch chanjman ki reflete nan “lage pwochen” [pwochen vesyon], men li kle si sa a “pwochen vesyon” evantyelman 0.3 ni ni 1.0, jiskaske branch lage te komanse. Desizyon sa a pran nan komansman branch lage e li pote regleman pwoje yo sou vesyon [mwen sijere we osije de “Semantik vesyon“].

Kreye yon branch lage

19 branch yo yo kreye nan men devlope branch. Pa ekzanp, ann di vesyon an 1.1.5 se vesyon pwodiksyon aktyel la e nou gen yon gwo liberasyon Ap vini. Eta de devlope se pare pou “pwochen vesyon” [lage pwochen] e nou te deside sa t ap tounen vesyon an 1.2 (Olye de 1.1.6 ni ni 2.0). Se konsa, nou fe yon branch epi ba nou branch lage yon non ki reflete nouvo nimewo vesyon an:

$ katye gita -lage-1.2 devlope
# Switched to a new branch "release-1.2"
$ ./zoukloum-Vesyon.Choute 1.2
# Dosye avek sikse modifye, vesyon kase 1.2.
$ komite gita -a -m "Bumped version number to 1.2"
# [lage-1.2 74d9424] Nimewo vesyon bumped nan 1.2
# 1 Chanje dosye, 1 ensesyon yo(+), 1 sipresyon yo(-)

Apre ou fin kreye yon nouvo branch e akse li, nou te boulvese nan nimewo vesyon an. Isit, bump-version.sh se yon script koki ki chanje kek dosye kopi ki ap travay yo reflete vesyon an nouvo. (Sa kapab, Men wi, se yon chanjman manyel – pwen an se ke kek dosye chanje.) Se konsa, se fet la Komite nan nimewo a vesyon modifye.

Nouvo sa a branch gendwa egziste la pandan yon ti tan, jiskaske liberasyon lanse tout tan. Pandan peryod sa a, fikse ensek yo ka aplike nan sa a branch (alaplas de devlope branch). Anplis de nouvo ak gwo Karakteristik men entedi. Yo dwe fizyone [fizyone] nan devlope ak, konsa, tann pwochen gwose a liberasyon.

Finalizasyon yon branch lage

Kile branch lage se pare yo vin yon vesyon reyel, gen kek aksyon ki dwe pran. Pwemye, a branch lage se fizyone nan mèt (depi chak Komite nan mèt se yon nouvo vesyon pa definisyon, Sonje). apre, Sa Komite nan mèt ta dwe make pou fasilite yon referans nan lavni nan istwa vesyon sa a. A la fen, chanjman yo te fe nan branch lage bezwen fizyone [fizyone] anko pou devlope, se konsa ke Lage yo avni tou gen sa yo fikse ensek.

De premye etap sa yo nan Git:

$ git kesye met
# Chanje branch 'met'
$ git fizyone --nan-lage-1.2
# Rantre fet pa repetitif.
# (Rezime chanjman yo)
$ tag git -a 1.2

A liberasyon se kounye a ranpli ak make pou referans nan lavni.

Obsevasyon: ou kapab itilize drapo -s oswa -u e siyen tag ou cryptografikman.

Pou kenbe chanjman ki fet nan branch lage, nou bezwen remesye yo ansanm devlope. nan Git:

$ katye devlope
# Chanje nan branch 'devlope'
$ git fizyone --nan-lage-1.2
# Rantre fet pa repetitif.
# (Rezime chanjman yo)

Etap sa a ka mennen nan yon konfli fizyone (pwobableman ale, yon fwa nou chanje nimewo vesyon an). Si se konsa, fikse epi fe Komite.

Kounye-a, ke nou vreman fe, a branch lage yo ka retire, depi nou pa bezwen li anko:

$ branch an gita -lage-1.2
# Efase branch lage-1.2 (te ff452fe).

branch Hotfix

– Li ka branch [branch] Soti:
mèt
– Dwe amalgame [Amalgame] anko:
devlope ak mèt
– Konvansyon pou randevou branch:
hotfiks-*

19 branch Hotfix gen menm sanblab ak branch lage yo, paske yo gen entansyon prepare yon nouvo vesyon pwodiksyon, atrave deplase. Yo leve soti nan bezwen pou aji imedyatman apre yon eta vle yon vesyon pwodiksyon [nan itilize]. Le yon ere kritik rive nan yon vesyon pwodiksyon, rezoud imedyatman, alo branch hotfix tag la kapab soti nan tag la ki make vesyon pwodiksyon ki egziste deja nan met branch.

Sans lan seke travay manm ekip yo (nan devlope branch) ka kontinye, pandan yon lot moun ap prepare yon ranje rapid nan echek pwodiksyon an.

Kreye branch lan hotfix

19 branch hotfiks yo kreye nan men met branch. Pa ekzanp, sipoze vesyon an 1.2 se vesyon aktyel la nan lage pwodiksyon an kouri ak prezante pwoblem akoz yon ere grav. Chanjman nan devlope kite toujou enstab la. Nou ka le sa a branch yon branch hotfix e komanse rezoud pwoblem nan:

$ katye gita -otofiks-1.2.1 mèt
# Switched to a new branch "hotfix-1.2.1"
$ ./zoukloum-Vesyon.Choute 1.2.1
# Dosye avek sikse modifye, vesyon kase 1.2.1.
$ komite gita -a -m "Bumped version number to 1.2.1"
# [hotfix-1.2.1 41e61bb] Nimewo vesyon bumped nan 1.2.1
# 1 Chanje dosye, 1 ensesyon yo(+), 1 sipresyon yo(-)

Pa bliye chanje nimewo vesyon an apre branch!

apre, korije ere a epi fe Komite koreksyon an nan youn oswa plis Komite separe.

$ komite gita -m "Fixed severe production problem"
# [hotfix-1.2.1 abbe5d6] Fiks pwoblem pwodiksyon grav
# 5 Chanje dosye, 32 ensesyon yo(+), 17 sipresyon yo(-)

Finalize yon branch hotfix

Le ou fini, a Bougfiks bezwen fizyone tounen nan mèt, men li bezwen enkopore tou tounen nan devlope, pou asire ke Bougfiks se tou nan vesyon kap vini an. Sa a se byen menm jan ak wout la branch lage yo yo finalize.

Pwemye, mete ajou mèt e baj liberasyon [make ete]:

$ git kesye met
# Chanje branch 'met'
$ git fizyone --nan-nfleman hotfix-1.2.1
# Rantre fet pa repetitif.
# (Rezime chanjman yo)
$ tag git -a 1.2.1

Obsevasyon: ou kapab itilize drapo -s oswa -u e siyen tag ou cryptografikman.

apre, enkli ladan li Bougfiks nan devlope Tou:

$ katye devlope
# Chanje nan branch 'devlope'
$ git fizyone --nan-nfleman hotfix-1.2.1
# Rantre fet pa repetitif.
# (Rezime chanjman yo)

Eksepsyon selman nan reg la isit la seke, ki le gen yon branch lage nan pwogre, chanjman Hotfiks bezwen fizyone nan sa branch lage, olye devlope. Rantre nan Bougfiks nan branch lage pral lakoz Bougfiks fizyone nan la devlope Tou, kile branch lage konplete. (Si travay la nan devlope imedyatman egzije sa Bougfiks epi yo pa kapab tann jiskaske branch lage konplete, ou met san danje Bougfiks Pou devlope Tou.)

A la fen, deplase branch Tanpore:

$ branch an gita -d hotfix-1.2.1
# Efase hotfix branch-1.2.1 (te abbe5d6).

Rezime

Malgre ke pa gen anyen reyelman ekstraodine nan model sa a branch, figi a nan komansman Post la kapab tre itil nan pwoje nou yo. Li montre yon fasil-a-konprann model mantal ak pemet manm ekip yo devlope yon konpreyansyon komen nan pwosesis yo nan branch ak Divilge.

Yon-wo kalite PDF vesyon an figi a bay sou blog la nan pos orijinal la: http://nvie.com/posts/a-successful-git-branching-model/ [oswa nan lyen an Download anba a]. Ale pi devan epi mete li sou miray la jwenn yon referans rapid nan nenpot ki le.

Anvayisman total de: 9847

Yon komante sou “Yon siksè modèl fèy palmis nan Git

  1. Fèt Deivson te di:

    Bonswa, Mwen konnen ke Git te okòmansman devlope sistèm Linux la men lè tap pale nan portabilite, Mwen sezi anpil si Git la kouri nan fennèt ak POSIX MSIS??

kite yon repons

A kouryèll adrès ou a pa ka ki te pibliye. Mande l jaden ki te make ak *