Usa ka malampuson nga modelo sa mga sanga sa git

Kay nahibalo kon sa unsang paagi sa paggamit sa git importante, ug kini naglakip sa pagmintinar sa usa ka hiniusang development palibot manageable software.

credits

Kini nga Post usa ka bersyon sa Portuges sa orihinal, sa English, “Usa ka malampuson nga modelo sa pagsanga sa Git“, tinuud nga gitugutan sa tagsulat, Vincent Driessen. Salamat tawo!

Alang sa mga teknikal nga hinungdan, ang pipila nga mga keyword tinuyo nga gitago sa ingles. Gisulayan nako nga garantiyahan ang pagka-orihinal sa teksto, apan gikumpisal ko nga kinahanglan kong maghimo og mga pag-adjust aron mas dali masabtan sa among sinultian. (Ang PT-BR). Ang bisan unsang pagtul-id o sugyot aron mapaayo ang paghubad mahinangpon..

pasiuna

Dili kini usa ka Post nga nagtudlo kung giunsa gamiton ang Git. kung kini ang imong kinahanglan, Gisugyot nako ang pagtan-aw sa Manwal buhaton Git. Dili usab namo katuyoan ang pagpakita kanimo kung giunsa ang paghimo sa usa ka bersyon sa software, sa niini nga kaso, tan-awa Pagbag-o sa Semantiko.

Dinhi ang sugyot mao ang pagdumala sa pagtinabangay sa tem sa pag-bersyon sa software. Sabe quando você tem vários programadoresmexendoem um mesmo código-fonte? Isto é importante para agilizar o desenvolvimento, mas pode gerar imensa dor de cabeça (prejuízo e retrabalho) se não houver um controle. Para evitar que um desenvolvedor sobrescreva o trabalho de outro e garantir um desenvolvimento progressivo e organizado, minimizando os conflitos e gerenciando versões do software, é que utilizamos o Git e o modelo de branches a seguir.

Modelo de branches

Neste post apresento o modelo de desenvolvimento que utilizei em alguns dos meus projetos (tanto no trabalho quanto particular) cerca de 1 anos atrás, e que tem sido muito bem-sucedido. Faz tempo eu queria escrever sobre isso, mas nunca encontrava um horário disponível, até agora. Dili ko hisgutan ang mga detalye sa proyekto, lang bahin sa mga estratehiya sa branches ug pagdumala sa nagpagawas.

Kini nga modelo sa selyo eksklusibo dili Git ingon usa ka himan alang sa pag-bersyon sa tanan namong source code. (By the way, kung interesado ka sa Git, among kompanya GitPrime naghatag, Sa tinuud nga oras, pipila nga katingad-an nga analytics sa datos alang sa pag-optimize sa software engineering)

Ngano git?

Alang sa usa ka bug-os nga paghisgot sa mga kaayohan ug disbentaha sa Git kumpara sa mga sentralisadong sistema sa pagkontrol sa source code, tan-awa sa usa ka web. adunay usa ka grabe “gubat” palibot niana. Ingon usa ka developer, Mas gusto nako ang Git kaysa tanan nga uban pa nga mga gamit nga magamit karon. Wala’y duhaduha nga gibag-o ni Git ang paagi sa paghunahuna sa mga developer bahin sa paghimo og a iusa o paghimo a sanga. Gikan ko sa klasiko nga kalibutan sa CVS / Pagkabalhin, Asa paghiusa / pagsanga kini usa ka butang nga us aka kausa ra nimo buhaton ug kanunay kini ingon usa ka makahadlok (“Pagbantay sa mga panagsumpaki sa iusa, gipaak ka nila!”).

Uban sa Git kini nga mga aksyon [paghiusa / pagsanga] labi ka yano ug nagrepresentar sa usa sa mga punoan nga bahin sa among naandan nga trabaho., nagtuo. alang sa panig-ingnan, dili libro CSV / Pagkabalhin, nagkasanga e paghiusa gitabonan sa unang higayon sa mga ulahi nga kapitulo. (alang sa mga advanced nga tiggamit), samtang sa bisan unsa libro bahin sa Git, makita kini sa kapitulo 3 (sukaranan).

Ingon usa ka sangputanan sa kayano ug balikbalik nga kinaiya niini, nagkasanga e paghiusa dili na usa ka butang nga gikahadlokan. Sa tinuud, Ang mga himan sa pagkontrol sa bersyon kinahanglan makatabang aron mahimoiusa ug paghimo sanga labaw sa tanan.

Igo na nga pakigpulong, moadto kita sa modelo sa pag-uswag. Ang modelo nga akong ipresentar dinhi mao ang hinungdan dili labaw pa sa usa ka hugpong sa mga pamaagi nga kinahanglan sundon sa matag miyembro sa koponan aron makaabut sa usa ka pagdumala nga proseso sa paglambo sa software..

Desentralisado, apan sentralisado

Ang pag-configure sa repository nga gigamit namon ug nga maayo kaayo sa kini nga modelo sa nagkasanga naglangkob sa usa ka sentral nga tipiganan. Hinumdomi nga kini nga tipiganan husto ra “gikuha ingon” sentral (tungod kay ang Git usa ka DVCS [Giapod-apod nga Mga Sistema sa Pagkontrol sa Bersyon], sa lain nga mga pulong, wala’y sama sa usa ka sentral nga tipiganan sa lebel sa teknikal). Mag-refer kami sa kini nga tipiganan ingon gigikanan, tungod kay pamilyar kini nga ngalan sa tanan nga ninggamit sa Git.

Ang matag developer naghimo nagbira e nagduso sa gigikanan. Apan sa unahan sa relasyon pagduso sa sentralisado [gigikanan], mahimo usab kuhaon ang matag developer [pagbira] ang mga pagbag-o sa uban pang pares aron maporma ang mga subteam. alang sa panig-ingnan, mahimo kini nga magamit alang sa pagtinabangay sa duha o daghan pa nga mga taghimo sa us aka maayo nga bag-ong dagway., kaniadto nga nagpadala [pagduso] ang buluhaton nga nagpadayon alang sa gigikanan. Sa numero sa taas, adunay mga subteam nga Alice ug Bob, Alice e David, e Clair ug David.

Teknikal, wala’y gipasabut kini apan gihubit ni Alice ang usa ka hilit nga Git nga ginganlag Bob, nagtudlo sa tipiganan ni Bob, ug vice versa.

Ang punoan nga mga sanga

sa likud, kini nga modelo sa pag-uswag madasig kaayo sa mga adunay na mga modelo didto.. Ang sentral nga tipiganan adunay duha ka mga sanga [branches] nag-una nga adunay usa ka walay katapusan nga kinabuhi:

  • agalon
  • sa pagpalambo og

ang agalon sa sanga sa gigikanan kinahanglan pamilyar sa matag ninggamit sa Git.. Parehas sa agalon sa sanga, naa pay lain sanga gitawag sa pagpalambo og.

Gikonsiderar namon gigikanan / agalon ingon ang punoan nga sanga diin ang source code sa Ulo kanunay nagpakita sa usa ka estado andam na sa produksyon [andam na alang sa produksyon].

Gikonsiderar namon gigikanan / molambo ingon nga ang sanga punoan diin ang gigikanan nga code sa Ulo kanunay nagpakita sa usa ka estado nga adunay labing bag-ong mga pagbag-o nga pag-uswag nga ihatud sa sunod nga pagpagawas. Ang uban motawag niini “sanga sa paghiusa”. Dinhi mahitabo ang labi ka ngil-ad nga mga konstruksyon.

Kung kanus-a ang source code sa sanga molambo miabut sa usa ka lig-on nga punto ug andam na nga buhian [gibuhian], tanan nga mga pagbag-o kinahanglan paghiusa [naghiusa] balik sa agalon sa sanga ug dayon gimarkahan sa numero sa bersyon [pagpagawas]. Giunsa kini gihimo sa detalye, pagahisgutan sa ulahi..

Busa, sa matag higayon nga ang mga pagbag-o gilakip [naghiusa] balik sa agalon, usa ka bag-ong bersyon ang namugna [gibuhian], pinaagi sa kahulugan. Gisulayan namon nga mahigpit kaayo bahin niini., unya, teoretikal, mahimo pa namon gamiton ang usa ka iskrip kaw-it gikan sa Git aron awtomatikong tukuron ug iduso ang among aplikasyon sa mga server sa produksyon bisan kanus-a adunay pagbuhat dili agalon.

Mga sangay nga katabang

tapad sa branches punoan, agalon e sa pagpalambo og, ang among modelo sa pagpauswag naggamit lainlain nga branches suporta aron matabangan ang dungan nga pag-uswag taliwala sa mga miyembro sa pangkat, Unsa 1) gipasayon ​​ang pagsubay sa mga bag-ong dagway [mga dagway], 2) nag-andam alang sa paghatud sa usa ka bag-ong bersyon [pagpagawas] e 3) makatabang kanimo nga dali nga ayuhon ang mga kapakyasan sa produksyon [hotfix]. Dili sama sa branches punoan, mga este branches adunay usa ka mubu nga kinabuhi, ingon nga sila sa katapusan tangtangon.

Ang lainlaing mga lahi sa branches [mga katabang] unsa ang magamit naton, sila mao ang:

  • Mga sanga sa dagway
  • Ipagawas ang mga sanga
  • Mga sanga sa hotfix

matag usa niini branches adunay piho nga katuyoan ug gigapos sa higpit nga mga balaod., mao na, branches makahatag tungatunga sa sanga kana ba branches kinahanglan nga paghiusa [naghiusa] sa imong mga target. makita namon ang matag usa kanila [branches] sa usa ka pagpamilok.

Gikan sa usa ka teknikal nga panan-aw, Mga branches wala gikonsiderar “espesyal”. Ang matag lahi sa sanga giklasipikar sa kung giunsa namon kini gigamit.. sa katapusan, yano ra branches sa maayong tigulang nga Git.

Mga sanga sa dagway

[Mga bahin = dagway / pagpaandar]

– mahimo sanga [sanga] gikan sa:
sa pagpalambo og
– kinahanglan nga maghiusa [iusa] pag-usab ang:
sa pagpalambo og
– pagtawag sa kombensiyon sa sanga:
Bisan unsa, gawas agalon, sa pagpalambo og, buhian- *, o hotfix- *

Ikaw adunay mga sanga (o usahay gitawag mga sanga sa hilisgutan) gigamit aron maugmad ang mga bag-ong dagway / pagpaandar alang sa umaabot o umaabot nga pagpagawas. Kung nagsugod ang pag-uswag sa a bahin, ang target nga bersyon nga kini nga bahin iapil sa mahimo nga wala mahibal-an sa kini nga punto..

ang diwa sa a adunay mga sanga nga kini anaa samtang ang bahin naa sa pag-uswag, apan sa katapusan kini iupod [naghiusa] balik sa sa pagpalambo og (aron gyud madugangan ang bag-o bahin Sa sunod pagpagawas) o gilabay (sa kaso sa usa ka wala molampos nga eksperimento).

Mga sanga sa dagway kasagaran anaa ra sa tipiganan sa pagpalambo og, dili sa gigikanan.

Paghimo mga sanga sa dagway

$ git checkout -b myfeature molambo
# Switched to a new branch "myfeature"

Naghiusa usa ka nahuman nga bahin sa pag-uswag

Mga dagway nahuman mahimong iusa[naghiusa] ingon a sanga molambo aron madugangan gyud sila sa sunod pagpagawas.

$ git checkout molambo
# Gibalhin sa sanga 'naugmad'
$ gitahi --dili-ff myfeature
# Pag-update sa ea1b82a..05e9557
# (Sumaryo sa mga pagbag-o)
# $ git branch -d myfeature
# Gitangtang ang myfeature sa sanga (kaniadtong 05e9557).
$ git push gigikanan pagpalambo

Usa ka bandila –wala-ff hinungdan sa paghiusa [iusa] kanunay paghimo usa ka bag-ong butang gikan pagbuhat, bisan pa ang paghiusa mahimo nga ipatuman sa a dali-dali [ff]. Gipugngan ka gikan sa pagkawala sa kasayuran bahin sa kasaysayan sa paglungtad sa usa ka bahin sa sanga, pagpundok tanan naghimo nga gidugang sa bahin. Itandi:

Dili katapusan nga kaso [gikan sa litrato sa taas], imposible nga makita gikan sa kaagi ni Git kung kinsa sa naghimo gipatuman sa sulud sa a bahin; kinahanglan nimo nga basahon sa kamut ang tanan nga mga mensahe sa log. balihon ang usa bahin tibuuk (sa lain nga mga pulong, usa ka grupo sa naghimo), sakit gyud sa ulo sa ulahi nga sitwasyon, samtang dali kini mahimo kung ang bandila –wala-ff gigamit na.

Sim, maghimo kini pipila pa nga mga butang gikan naghimo (walay sulod), apan ang kita labi ka daghan kaysa gasto.

Ipagawas ang mga sanga

[Pagpagawas = pagpagawas / paghatud / bersyon]

– mahimo sanga [sanga] gikan sa:
sa pagpalambo og
– kinahanglan nga maghiusa [iusa] pag-usab ang:
sa pagpalambo og e agalon
– pagtawag sa kombensiyon sa sanga:
buhian- *

Ikaw nagpagawas mga sanga tabang sa pag-andam usa ka bag-ong bersyon sa produksyon [pagpagawas sa produksyon]. Gitugotan ka nila nga ibutang ang mga tuldok sa katapusang minuto nga ako. Gawas niana, gitugotan nila ang gagmay nga mga pagtul-id sa mga bugok ug kahulugan sa metadata kay pagpagawas (numero sa bersyon, pagtukod mga petsa, etc). Pinaagi sa paghimo niining tanan nga buluhaton sa usa buhian nga sanga, O pagpalambo sa sanga magpabilin nga limpyo aron makadawat mga dagway sa sunod dako pagpagawas [nga bersyon].

Ang hinungdanon nga higayon aron makahimo usa ka bag-o buhian nga sanga nagsanga gikan sa sa pagpalambo og kung kanus-a ang sa pagpalambo og naa na (hapit) nagpakita sa gitinguha nga kahimtang sa bag-o pagpagawas [nga bersyon]. Tanan mga dagway mga kandidato alang sa pagpagawas nga matukod kinahanglan iupod [iusa] sa mga sa pagpalambo og karon dayon. na ang mga dagway nag-atubang nagpagawas ang kaugmaon kinahanglan maghulat alang sa sunod pagpagawas [nga bersyon].

Sakto kini sa pagsugod sa a buhian nga sanga nga sa sunod pagpagawas makadawat numero sa bersyon – dili kaniadto. Hangtod karon nga orasa, O pagpalambo sa sanga gipakita ang mga pagbag-o sa “sunod nga pagpagawas” [sunod nga bersyon], apan dili kini tin-aw kung kini “sunod nga bersyon” kini matapos na nga 0.3 o 1.0, hangtod sa buhian nga sanga magsugod. Ang kini nga paghukum gihimo sa pagsugod sa buhian nga sanga ug gihimo sa mga lagda sa proyekto bahin sa pag-bersyon [Gisugyot nako nga makita ang bahin sa “Pagbag-o sa Semantiko“].

Naghimo usa ka sanga sa pagpagawas

Ikaw nagpagawas mga sanga gihimo gikan sa pagpalambo sa sanga. alang sa panig-ingnan, isulti naton ang bersyon 1.1.5 karon nga bersyon sa produksyon ug adunay kami dako pagpagawas umaabot. O kahimtang sa sa pagpalambo og andam na kini alang sa a “sunod nga bersyon” [sunod nga pagpagawas] ug nakadesisyon kami nga kini ang mahimong bersyon 1.2 (kaysa 1.1.6 o 2.0). unya, kita sa sanga ug ihatag sa buhian nga sanga usa ka ngalan nga nagpakita sa bag-ong numero sa bersyon:

$ git checkout -b buhian-1.2 sa pagpalambo og
# Switched to a new branch "release-1.2"
$ ./bukol-bersyon.sh 1.2
# Malampuson nga nabag-o ang mga file, bersyon nabunggo sa 1.2.
$ git pagbuhat -sa usa ka -m "Bumped version number to 1.2"
# [buhian-1.2 74d9424] Bumped nga numero sa bersyon sa 1.2
# 1 nagbag-o ang mga file, 1 pagsal-ot(+), 1 pagtangtang(-)

Pagkahuman paghimo usa ka bag-o sanga ug pag-access niini, nabanggaan namon ang numero sa bersyon. Dinhi, pagkabungkag.sh usa ka shell script nga nagbag-o sa pipila ka mga file sa nagtrabaho nga kopya aron maipakita ang bag-ong bersyon. (Mahimo kini, tin-aw, mahimong usa ka pagbag-o sa manwal – ang punto mao nga ang pila ka mga file nagbag-o.) unya, nahuman ang pagbuhat sa giusab nga numero sa bersyon.

kini nga bag-o sanga mahimong adunay didto sa makadiyot, hangtod sa pagpagawas ipagawas gyud. Sa niini nga panahon, ang mga pag-ayo sa bug mahimo’g mailapat dinhi sanga (sa baylo nga ang pagpalambo sa sanga). Nagdugang bag-o ug maayo mga dagway dinhi higpit nga gidili. kinahanglan sila paghiusa [naghiusa] sa sa pagpalambo og e, sa ingon, paghulat sa sunod nga dako pagpagawas.

Paghuman sa usa ka sanga sa pagpagawas

Sa diha nga ang buhian nga sanga andam na nga mahimong usa ka tinuud nga bersyon, pipila ka mga aksyon kinahanglan nga buhaton. Una, O buhian nga sanga gihiusa sa agalon (kausa matag usa pagbuhat dili agalon usa ka bag-ong bersyon pinaagi sa kahulugan, hinumdomi kung). Unya, kana pagbuhat dili agalon kinahanglan gimarkahan aron mapadali ang umaabot nga paghisgot sa kini nga kasaysayan sa bersyon. sa katapusan, ang mga pagbag-o nga gihimo sa buhian nga sanga kinahanglan nga iusa [naghiusa] pag-usab sa sa pagpalambo og, aron ang nagpagawas Ang mga kaugmaon usab adunay sulud nga kini nga mga pag-ayo sa bug..

Ang una nga duha nga lakang sa Git:

$ git checkout master
# Gibalhin sa branch 'master'
$ gitahi --dili-pagpagawas sa ff-1.2
# Paghiusa nga gihimo pinaagi sa recursive.
# (Sumaryo sa mga pagbag-o)
$ git tag -sa usa ka 1.2

ang pagpagawas kompleto na ug gimarkahan alang sa reperensya sa umaabot..

sulti: mahimo usab nimo gamiton ang mga flag nga -s o -u sa cryptographically pagpirma sa imong tag.

Aron mapadayon ang mga pagbag-o nga gihimo sa buhian nga sanga, precisamos juntá-las de volta ao sa pagpalambo og. No Git:

$ git checkout molambo
# Gibalhin sa sanga 'naugmad'
$ gitahi --dili-pagpagawas sa ff-1.2
# Paghiusa nga gihimo pinaagi sa recursive.
# (Sumaryo sa mga pagbag-o)

Este passo pode levar a um conflito de mesclagem (provavelmente vá, uma vez que mudamos o número da versão). Em caso afirmativo, conserte e faça o pagbuhat.

karon, que realmente terminamos, O buhian nga sanga pode ser removido, já que não precisaremos mais dele:

$ git branch -d release-1.2
# Deleted branch release-1.2 (was ff452fe).

Mga sanga sa hotfix

– mahimo sanga [sanga] gikan sa:
agalon
– kinahanglan nga maghiusa [iusa] pag-usab ang:
sa pagpalambo og e agalon
– pagtawag sa kombensiyon sa sanga:
hotfix- *

Ikaw Mga sanga sa hotfix são muito parecidos com os release branches, pois eles também se destinam a preparar uma nova versão de produção, embora não planejada. Eles surgem da necessidade de agir imediatamente após um estado não desejado de uma versão de produção [sa paggamit]. Quando ocorre um erro crítico em uma versão de produção, deve ser resolvido imediatamente, então um hotfix branch pode ser derivado da tag que marca a versão de produção existente no master branch.

A essência é que o trabalho dos membros da equipe (dili pagpalambo sa sanga) pode continuar, enquanto outra pessoa está preparando uma rápida correção da falha em produção.

Criando o hotfix branch

Ikaw hotfix branches gihimo gikan sa master branch. alang sa panig-ingnan, supondo que a versão 1.2 é a versão atual da release de produção rodando e apresenta problemas devido a um erro grave. Mudanças no sa pagpalambo og deixam o ainda instável. Nós podemos então ramificar um hotfix branch e começar a solucionar o problema:

$ git checkout -b hotfix-1.2.1 agalon
# Switched to a new branch "hotfix-1.2.1"
$ ./bukol-bersyon.sh 1.2.1
# Malampuson nga nabag-o ang mga file, bersyon nabunggo sa 1.2.1.
$ git pagbuhat -sa usa ka -m "Bumped version number to 1.2.1"
# [hotfix-1.2.1 41e61bb] Bumped nga numero sa bersyon sa 1.2.1
# 1 nagbag-o ang mga file, 1 pagsal-ot(+), 1 pagtangtang(-)

Não esqueça de trocar o número da versão após a ramificação!

Unya, corrija o erro e faça o pagbuhat da correção em um ou mais pagbuhat separados.

$ git pagbuhat -m "Fixed severe production problem"
# [hotfix-1.2.1 abbe5d6] Fixed severe production problem
# 5 nagbag-o ang mga file, 32 pagsal-ot(+), 17 pagtangtang(-)

Finalizando um hotfix branch

Quando terminado, O bugfix precisa ser mesclado de volta ao agalon, mas também precisa ser incorporado novamente para sa pagpalambo og, a fim de garantir que o bugfix também esteja incluído na próxima versão. Isso é bastante semelhante ao modo como as release branches são finalizadas.

Una, atualize o agalon e tag a pagpagawas [marque a verão]:

$ git checkout master
# Gibalhin sa branch 'master'
$ gitahi --dili-ff hotfix-1.2.1
# Paghiusa nga gihimo pinaagi sa recursive.
# (Sumaryo sa mga pagbag-o)
$ git tag -sa usa ka 1.2.1

sulti: mahimo usab nimo gamiton ang mga flag nga -s o -u sa cryptographically pagpirma sa imong tag.

Unya, inclua o bugfix dili sa pagpalambo og usab:

$ git checkout molambo
# Gibalhin sa sanga 'naugmad'
$ gitahi --dili-ff hotfix-1.2.1
# Paghiusa nga gihimo pinaagi sa recursive.
# (Sumaryo sa mga pagbag-o)

A única exceção à regra aqui é que, quando existir um buhian nga sanga em andamento, as mudanças de hotfix precisam ser mescladas para esse buhian nga sanga, ao invés de sa pagpalambo og. Mesclar o bugfix dili buhian nga sanga irá fazer com que o bugfix seja mesclado no sa pagpalambo og usab, quando o buhian nga sanga for concluído. (Se o trabalho no sa pagpalambo og requer imediatamente esse bugfix e não puder esperar até que o buhian nga sanga seja concluído, você pode seguramente mesclar o bugfix alang sa deveolp também.)

sa katapusan, remova a sanga temporária:

$ git branch -d hotfix-1.2.1
# Deleted branch hotfix-1.2.1 (was abbe5d6).

Resumo

Embora não haja nada realmente extraordinário neste modelo de ramificação, a figura no início do Post pode ser muito útil em nossos projetos. Ela mostra um modelo mental fácil de compreender e permite aos membros da equipe desenvolver um entendimento comum dos processos de nagkasanga e releasing.

Uma versão em PDF de alta qualidade da figura é fornecida no blog do post original: http://nvie.com/posts/a-successful-git-branching-model/ [ou no link de Download abaixo]. Vá em frente e coloque-o na parede para obter uma rápida referência a qualquer momento.

total accesses: 10960

Usa ka review sa “Usa ka malampuson nga modelo sa mga sanga sa git

  1. Deivson Nascimento miingon:

    maayong hapon, sei que o Git foi desenvolvido inicialmente pelo sistema Linux mas ao se falar em portabilidade, gostaria de saber se o Git roda no windows MSIS e POSIX??

Leave sa usa ka Reply

Ang imong email address dili nga gipatik. Gikinahanglan kaumahan mga gimarkahan sa *