Ib tug muaj kev vam meej qauv ntawm ceg nyob rau hauv Git

Paub li cas los siv Git yog ib qho tseem ceeb, thiab qhov no muaj xws li muaj kev sib koom tes txoj kev loj hlob cheeb tsam forms software.

Khab nias

Cov Hauv Paus Xa Lus no yog cov Portuguese tsab ntawm daim tseem, ua lus Askiv, “Ib qho ua tiav Git branching qauv“, raug cai los ntawm tus sau, Vincent Driessen. Ua tsaug txiv neej!

Rau cov laj thawj txuj ci, qee cov ntsiab lus tseem ceeb txhob muab sau ua lus Askiv. Kuv sim lav qhov originality ntawm cov ntawv nyeem, tab sis kuv lees txim tias kuv yuav tsum tau hloov kho kom thiaj li nkag siab qhov kev nkag siab hauv peb hom lus (PT-BR). Ib qho kev kho los yog lus pom zoo rau kev txhim kho hauv cov lus txhais tau txais tos.

kev taw qhia

Nov tsis yog qhov Post qhia yuav siv Git li cas. Yog tias qhov no yog qhov koj xav tau, Kuv xav kom muab los saib Los ntawm txhais tes ua Git. Tsis yog nws peb lub hom phiaj los qhia koj yuav ua li cas thiaj ua software version, qhov no, saib Kev Tshawb Txog Hnyav.

Ntawm no thov yog los tswj hwm pab pawg kev sib koom tes hauv cov software software. Paub thaum koj muaj ntau cov programmer “tsiv tsev” nyob rau hauv tib qhov chaws? Qhov no yog qhov tseem ceeb ntawm kev ua kom ceev nrawm, tab sis nws tuaj yeem tsim qhov mob taub hau ntau (poob thiab rov ua haujlwm) yog tias tsis muaj tus tswj. Txhawm rau tiv thaiv ib tus neeg tsim khoom los ntawm kev sau dua lwm qhov kev ua haujlwm thiab ua kom muaj kev vam meej thiab muaj kev txhim kho, tsis txhob muaj kev tsis sib haum xeeb thiab kev tswj hwm software software, yog tias peb siv Git thiab tus ceg pem hauv ntej.

Ceg qauv

Hauv cov ncej no kuv nthuav tawm cov qauv kev txhim kho uas kuv tau siv hauv qee qhov ntawm kuv cov haujlwm (ob qho tib si tom haujlwm thiab ntiag tug) ze 1 xyoo dhau los, thiab qhov ntawd tau muaj kev vam meej heev. Kuv xav sau txog nws ntev, tab sis kuv yeej tsis pom muaj lub sijhawm nyob, kom deb li deb. Kuv yuav tsis tham txog cov ntsiab lus ntawm qhov project, tsuas yog hais txog cov tswv yim rau ceg thiab kev tswj hwm tso tawm.

Qhov no tus qauv foob tshwj tsis yog Git raws li cov cuab yeej siv rau kev hloov tshiab txhua yam ntawm peb cov cai. (Los ntawm txoj kev, yog koj xav siv Git, peb lub tuam txhab GoPrime muab, tiag tiag-lub sij hawm, qee qhov tsis txaus ntseeg cov ntaub ntawv ntsuas rau software engineering kom zoo dua)

Vim li cas git?

Txog kev sib tham tag nrho ntawm qhov zoo thiab kev pom zoo ntawm Git piv rau kev tswj hwm qhov nruab nrab hauv nruab nrab, saib ib tug lub vas sab. Muaj zoo kawg li “tsov rog” nyob ib puag ncig ntawd. Raws li kev tsim tawm, Kuv nyiam Git tshaj tag nrho lwm cov cuab yeej uas muaj nyob niaj hnub no. Git tsis tau xav pauv qhov uas cov neeg tsim khoom xav txog kev ua a hauj lwm ua ke lossis tsim ib qho ceg. Kuv tuaj ntawm lub ntiaj teb classic ntawm CVS / Cwj Pwm, Qhov twg sib koom / ceg nws yog ib yam koj tsuas yog ua ib zaug nyob hauv ib pliag thiab nws yeej zoo li txaus ntshai me ntsis (“Ceev faj txog kev tsis sib haum xeeb ntawm kev txaus siab hauj lwm ua ke, lawv tom koj!”).

Nrog Git, cov haujlwm no [sib koom / ceg] yog qhov yooj yim heev thiab sawv cev rau ib qho ntawm lub ntsiab ntawm peb kev ua haujlwm, ntseeg. Piv txwv, tsis muaj phau ntawv CSV / Hloov Chaw, nkaug e sib koom ua ke Cov no tsuas yog them rau thawj zaug hauv cov ntawv tom qab los tau (rau cov neeg siv khoom siab), thaum nyob hauv ib phau ntawv ntawm Git, qhov no yog pom hauv tshooj 3 (yooj yim).

Raws li qhov tsim nyog tau txais ntawm nws qhov yooj yim thiab qhov rov ua dua, nkaug e sib koom ua ke yog tsis ib yam dab tsi yuav tsum ntshai. Qhov tseeb tiag, cov cuab yeej tawm tswj hwm yuav tsum pab uahauj lwm ua ke thiab tsim ceg ntau tshaj ib yam dab tsi.

Tham txaus, wb mus rau txoj kev loj hlob qauv. Tus qauv uas kuv yuav nthuav qhia ntawm no tsis tseem ceeb dab tsi ntau tshaj li txheej txheej txheej txheem uas txhua tus tswv cuab yuav tsum ua raws txhawm rau txhawm rau kom tuaj txog ntawm txoj kev tswj hwm kev txhim kho software..

Kev Txom Nyem, tab sis nruab nrab

Kev teeb tsa ntawm lub chaw cia khoom uas peb siv thiab ua haujlwm zoo heev nrog cov qauv ntawm nkaug muaj ib lub hauv paus chaw cia khoom. Nco ntsoov tias lub chaw cia khoom no nkaus xwb “coj li” nruab nrab (vim tias Git yog DVCS [Faib Cov Hluav Taws Xob Uas Tswj Cov Tshuab], nyob rau hauv lwm yam lus, tsis muaj ib yam dab tsi zoo li lub chaw nruab nrab ntawm qib ntsuas ntawm theem kev). Peb yuav xa mus rau lub chaw cia khoom no keeb kwm, vim tias lub npe no paub zoo rau txhua tus neeg siv Git.

Txhua tus tsim tawm puas yog rub tawm e laub rau keeb kwm. Tab sis dhau ntawm kev sib raug zoo laub-rub rau qhov nruab nrab [keeb kwm], txhua tus neeg tsim khoom kuj tuaj yeem tuaj tos [rub] hloov los ntawm lwm khub los ua subteams. Piv txwv, qhov no tuaj yeem siv tau rau kev ua haujlwm nrog ob lossis ntau tus neeg tsim tawm ntawm cov yam ntxwv zoo tshiab, yav tas los xa [thawb] ua hauj lwm hauv kev kawm rau lub keeb kwm. Hauv daim duab saum toj no, muaj Alice thiab Bob subteams, Alice e David, e Clair thiab David.

Technically, qhov no txhais tau tias tsis muaj dab tsi ntau tshaj li Alice sau tseg ib qho chaw taws teeb Git hu ua Bob, taw tes rau Bob lub chaw cia khoom, thiab liam.

Cov ceg tseem ceeb

Hauv keeb kwm yav dhau, cov qauv kev txhim kho no yog qhia tseeb los ntawm cov qauv uas twb muaj lawm nws txoj sia?. Lub chaw nruab nrab muaj ob ceg [ceg] tus thawj xibfwb nrog rau lub neej tsis kawg:

  • tswv
  • tsim

LUB ceg tswv hauv keeb kwm yuav tsum paub txhua tus neeg siv Git. Pa Hauv ceg tswv, muaj lwm qhov ceg hu ua tsim.

Peb txiav txim siab keeb kwm / tus tswv raws li lub hauv paus loj nyob qhov twg cov hauv paus ntawm LUB TAUB HAU ib txwm cuam tshuam ib lub xeev npaj ntau lawm [npaj rau ntau lawm].

Peb txiav txim siab keeb kwm / loj hlob li yog tus ceg qhov tseem ceeb qhov twg hauv qhov chaws ntawm LUB TAUB HAU yeej ib txwm cuam tshuam lub xeev nrog cov kev hloov kho tshiab tshaj plaws kom xa tawm hauv cov tom ntej. Ib txhia yuav hu xov tooj rau qhov no “ceg ntawm kev sib koom ua ke”. Nov yog qhov chaw uas cov kev tsim vaj tsev feem ntau siv.

Thaum lub hauv paus chiv keeb hauv ceg tsim mus txog qhov chaw ruaj khov thiab npaj tua tawm [tso tawm], txhua qhov kev hloov yuav tsum sib koom ua ke [sib koom ua ke] rov qab mus rau ceg tswv thiab tom qab ntawd khij nrog tus lej version [tso tawm]. Qhov no ua tiav li cas hauv kev nthuav dav, yuav tau sib tham tom qab.

yog li ntawd, txhua lub sijhawm hloov pauv [sib koom ua ke] rov mus tswv, ib cov tshiab version yog tsim tawm [tso tawm], los ntawm txhais. Peb sim ua kom nruj heev txog nws, Yog li, theoretically, peb tuaj yeem siv tus ntawv sau nuv los ntawm Git los tsim thiab upload peb daim ntawv thov rau cov servers tsim khoom thaum twg muaj cog lus tsis muaj tswv.

Ntu ceg

Ntawm ib sab ceg lub ntsiab, tswv e tsim, peb tus qauv txhim kho siv ntau yam ntawm ceg pab txhawb kom pab txhawb nqa ua ke nrog txhua tus tswv cuab hauv pab pawg, dab tsi 1) tswj kev taug qab ntawm cov yam ntxwv tshiab [nta], 2) npaj kev xa tawm tshiab [tso tawm] e 3) pab kom sai yog ntau lawm qhov ua tsis tiav [hotfix]. Tsis zoo li cov ceg lub ntsiab, estes ceg muaj lub neej luv luv, raws li lawv yuav kawg muab tshem tawm.

Qhov sib txawv ntawm ceg [cov koom tes pabcuam] yam peb siv tau, yog:

  • Cov ceg ntsej muag zoo
  • Tso ceg
  • Hotfix ceg

Txhua ntawm cov no ceg muaj lub hom phiaj tshwj xeeb thiab raug ua txhua yam raws li cov cai nruj, li ntawd, ceg tuaj yeem muab sawv los ceg puas yog ceg yuav tsum muab tso ua ke [sib koom ua ke] rau koj lub hom phiaj. Peb yuav pom lawv txhua tus [ceg] hauv qhov tseem muaj.

Los ntawm cov tswv yim kev xav, Cov ceg tsis tau txiav txim siab “tshwj xeeb”. Txhua hom ceg raug cais raws li qhov peb siv. thaum kawg, yog yooj yim xwb ceg ntawm qhov zoo qub Git.

Cov ceg ntsej muag zoo

[Nta = nta / kev ua haujlwm]

– Tau ceg [ceg] los ntawm:
tsim
– Nws yuav tsum muab zoo [hauj lwm ua ke] dua cov:
tsim
– Npe hu ua Cov Lus Cog Tseg ceg:
Tsis muaj dab tsi, tshwj tsis yog tswv, tsim, tso- *, lossis kubfix- *

Tus feature ceg ntoo (lossis qee zaum hu ua npe ceg) siv los txhim kho cov haujlwm tshiab / kev ua haujlwm rau kev nthuav tawm yav tom ntej lossis tom ntej. Thaum pib txoj kev loj hlob ntawm a nta, lub hom phiaj version nyob rau hauv uas cov yam ntxwv no yuav suav nrog kuj tuaj yeem paub tsis tau ntawm lub sijhawm no.

Lub ntsiab lus ntawm a feature ceg ntoo yog tias nws tshwm sim thaum lub nta yog nyob rau hauv txoj kev loj hlob, tab sis thaum kawg nws yuav koom ua ke [sib koom ua ke] rov mus tsim (kom paub meej ntxiv cov tshiab nta Rau qhov txuas mus tso tawm) lossis muab pov tseg (Cov kev sim ua tsis tau zoo).

Cov ceg ntsej muag zoo feem ntau muaj nyob hauv lub chaw cia khoom nkaus xwb tsim, tsis nyob hauv keeb kwm.

Tsim kom muaj cov ceg ntoo tshwj xeeb

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

Teeb kev ua tiav qhov kev ua tiav rau hauv kev tsim tawm

Nta ua tiav tuaj yeem nkag ua ke[sib koom ua ke] raws li a ceg tsim kom twv yuav raug hu ntxiv rau lwm tus tso tawm.

$ git checkout tsim
# Hloov mus rau ceg 'txhim kho'
$ mus kev sib tshuam uake --tsis muaj-ff myfeature
# Qhia xov ea1b82a..05e9557
# (Cov ntsiab lus ntawm kev hloov pauv)
# $ git ceg -d myfeature
# Ncau ceg myfeature (yog 05e9557).
$ git laub keeb kwm kev loj hlob

Ib tug chij –tsis-ff ua rau kev sib koom ua ke [hauj lwm ua ke] ib txwm tsim dua tus tshiab cog lus, txawm hais tias kev sib koom ua ke tuaj yeem ua nrog a ceev ceev rau pem hauv ntej [ff]. Qhov no zam tsis poob cov ntaub ntawv hais txog keeb kwm ntawm lub hav zoov a feature ceg, grouping tag nrho cai uas tau tau ntxiv rau nta. Piv:

Tsis yog zaum kawg [ntawm daim duab saum toj no], nws tsis yooj yim sua kom pom los ntawm keeb kwm Git uas qhov cai tau ua nyob rau hauv a nta; koj yuav tsum tau nyeem tag nrho cov lus cav. Rov qab a nta tag nrho (nyob rau hauv lwm yam lus, ib pawg cai), nws yog mob taub hau tiag hauv cov xwm txheej kawg, thaum nws yooj yim ua yog tias tus chij –tsis-ff tau siv lawm.

Sim, qhov no yuav tsim dua ob peb yam khoom ntawm cai (khoob), tab sis qhov nce yog ntau dua li tus nqi.

Tso ceg

[Tso = tso / xa tawm / version]

– Tau ceg [ceg] los ntawm:
tsim
– Nws yuav tsum muab zoo [hauj lwm ua ke] dua cov:
tsim e tswv
– Npe hu ua Cov Lus Cog Tseg ceg:
tso- *

Tus tso ceg pab hauv kev npaj ntau lawm tshiab [ntau lawm tso tawm]. Lawv tso cai rau koj tso cov tshuaj rau ob feeb kawg. Ntxiv, lawv tso cai me me kho ntawm yoov thiab cov lus txhais ntawm cov ntaub ntawv meta rau tso tawm (version tooj, muab tso ua ke hnub, lwm yam). Los ntawm kev ua txhua txoj haujlwm no hauv ib qho tso ceg, lub txhim kho ceg huv si kom tau txais nta tom ntej loj tso tawm [version].

Lub sijhawm tseem ceeb los tsim tshiab tso ceg nkhaus los ntawm tsim yog thaum tus tsim nws twb yog (yuav luag) xav txog lub xeev xav tau ntawm cov tshiab tso tawm [version]. Txhua nta sib tw rau tso tawm yuav tsum tau ua tiav [hauj lwm ua ke] rau tsim lub sijhawm no. Tus nta txojkev tso tawm yav tom ntej yuav tsum cia siab tom ntej tso tawm [version].

Nws yog qhov tseeb thaum pib ntawm a tso ceg uas txuas ntxiv mus tso tawm tau txais tus lej hloov tshiab – tsis tau ua ntej. Txog tam sim no, lub txhim kho ceg reflected hloov mus rau “kev tso tawm tom ntej” [lwm version], tab sis nws tsis paub meej tias qhov no “lwm version” nws yuav mus rau qhov kawg 0.3 los yog 1.0, kom txog rau thaum tso ceg tau pib. Qhov kev txiav txim siab no yog ua thaum pib ntawm lub tso ceg thiab yog ua los ntawm txoj haujlwm cov cai ntawm kev hloov kho [qhia rau kom pom txog “Kev Tshawb Txog Hnyav“].

Tsim kom muaj kev tso tawm ceg

Tus tso ceg yog tsim los ntawm cov txhim kho ceg. Piv txwv, wb hais version 1.1.5 yog cov version tam sim no ntau lawm thiab peb muaj qhov zoo tso tawm tuaj txog. Los yog xeev ntawm tsim nws npaj rau ib “lwm version” [kev tso tawm tom ntej] thiab peb tau txiav txim siab tias qhov no yuav dhau los ua qhov version 1.2 (es 1.1.6 los yog 2.0). ces, peb ceg tawm thiab muab cov tso ceg ib lub npe siv tsim ntawm tus lej tshiab:

$ git checkout -b tso tawm-1.2 tsim
# Switched to a new branch "release-1.2"
$ ./tsoo-version.sh 1.2
# Ntaub ntawv hloov kho tau zoo, version tsoo rau 1.2.
$ git ua phem -ib tug -m "Bumped version number to 1.2"
# [tso-1.2 74d9424] Ib pliag version tus xov tooj rau 1.2
# 1 cov ntaub ntawv hloov, 1 ntxig rau(+), 1 tshem tawm(-)

Tom qab tsim tus tshiab ceg thiab nkag nws, peb thawv rau hauv tus lej naj npawb. Ntawm no, tsoo ib pliag-version.sh yog lub plhaub ntawv sau uas hloov qee cov ntawv luam tawm ua haujlwm los cuam tshuam cov tshiab. (Qhov no tau, ntshiab, yog qhov kev hloov pauv – Lub ntsiab lus yog tias qee cov ntaub ntawv hloov.) ces, ua tiav lub cog lus hloov version tus naj npawb.

Tus tshiab no ceg yuav nyob ntawd ib pliag, kom txog rau thaum tso tawm raug tso tawm qhov tseeb. Nyob rau lub sijhawm no, kev txhim kho kev ua yuam kev tuaj yeem thov hauv qhov no ceg (hloov txhim kho ceg). Ntxiv ntawm tshiab thiab loj nta ntawm no raug txwv nruj me ntsis. Lawv yuav tsum muab tso ua ke [sib koom ua ke] hauv tsim e, li ntawd,, tos tus ntxiv loj tso tawm.

Ua kom tiav ceg tawm

Thaum cov tso ceg está pronto para se tornar uma versão real, algumas ações precisam ser realizadas. Primeiro, lub tso ceg é mesclado em tswv (uma vez que cada cog lus tsis muaj tswv é uma nova versão por definição, nco ntsoov yog). Em seguida, esse cog lus tsis muaj tswv deve ser marcado para facilitar uma futura referência a este histórico de versões. Finalmente, as mudanças feitas no tso ceg precisam ser mescladas [sib koom ua ke] novamente para tsim, de modo que os tso tawm futuros também contenham essas correções de bugs.

As duas primeiras etapas no Git:

$ git checkout master
# Switched to branch 'master'
$ mus kev sib tshuam uake --tsis muaj-ff release-1.2
# Merge made by recursive.
# (Cov ntsiab lus ntawm kev hloov pauv)
$ git tag -ib tug 1.2

LUB tso tawm agora está concluído e marcado para futura referência.

hais: você também pode usar as flags -s ou -u para assinar sua tag criptograficamente.

Para manter as mudanças feitas no tso ceg, precisamos juntá-las de volta ao tsim. No Git:

$ git checkout tsim
# Hloov mus rau ceg 'txhim kho'
$ mus kev sib tshuam uake --tsis muaj-ff release-1.2
# Merge made by recursive.
# (Cov ntsiab lus ntawm kev hloov pauv)

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 cog lus.

tam sim no, que realmente terminamos, lub tso ceg pode ser removido, já que não precisaremos mais dele:

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

Hotfix ceg

– Tau ceg [ceg] los ntawm:
tswv
– Nws yuav tsum muab zoo [hauj lwm ua ke] dua cov:
tsim e tswv
– Npe hu ua Cov Lus Cog Tseg ceg:
kubfix- *

Tus Hotfix ceg 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 [em uso]. 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 (tsis muaj txhim kho ceg) pode continuar, enquanto outra pessoa está preparando uma rápida correção da falha em produção.

Criando o hotfix branch

Tus hotfix branches yog tsim los ntawm cov master branch. Piv txwv, 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 tsim 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 tswv
# Switched to a new branch "hotfix-1.2.1"
$ ./tsoo-version.sh 1.2.1
# Ntaub ntawv hloov kho tau zoo, version tsoo rau 1.2.1.
$ git ua phem -ib tug -m "Bumped version number to 1.2.1"
# [hotfix-1.2.1 41e61bb] Ib pliag version tus xov tooj rau 1.2.1
# 1 cov ntaub ntawv hloov, 1 ntxig rau(+), 1 tshem tawm(-)

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

Em seguida, corrija o erro e faça o cog lus da correção em um ou mais cog lus separados.

$ git ua phem -m "Fixed severe production problem"
# [hotfix-1.2.1 abbe5d6] Fixed severe production problem
# 5 cov ntaub ntawv hloov, 32 ntxig rau(+), 17 tshem tawm(-)

Finalizando um hotfix branch

Quando terminado, lub bugfix precisa ser mesclado de volta ao tswv, mas também precisa ser incorporado novamente para tsim, 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.

Primeiro, atualize o tswv e tag a tso tawm [marque a verão]:

$ git checkout master
# Switched to branch 'master'
$ mus kev sib tshuam uake --tsis muaj-ff hotfix-1.2.1
# Merge made by recursive.
# (Cov ntsiab lus ntawm kev hloov pauv)
$ git tag -ib tug 1.2.1

hais: você também pode usar as flags -s ou -u para assinar sua tag criptograficamente.

Em seguida, inclua o bugfix tsis muaj tsim também:

$ git checkout tsim
# Hloov mus rau ceg 'txhim kho'
$ mus kev sib tshuam uake --tsis muaj-ff hotfix-1.2.1
# Merge made by recursive.
# (Cov ntsiab lus ntawm kev hloov pauv)

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

Finalmente, remova a ceg 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 nkaug 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.

Tag nrho cov accesses: 8810

Um comentário sobreIb tug muaj kev vam meej qauv ntawm ceg nyob rau hauv Git

  1. Deivson Nascimento hais tias:

    zoo yav tav su, 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??

Sau ntawv cia Ncua

Koj email chaw nyob yuav tsis tsum luam tawm. Yuav tsum tau teb cov cim nrog *