Imodeli ngempumelelo amasebe git

Funda ukusebenzisa git kubalulekile, kwaye oku kuquka nokugcina uphuhliso bume kubanjiswene software esilawulekayo.

iikhredithi

Le posi uguqulelo Portuguese wokuqala, e IsiNgesi, “Imodeli ngempumelelo eyayizalwa git“, agunyaziswe umbhali, Vincent Driessen. Enkosi indoda!

Malunga neengxaki technical, amanye amagama abantu ngenjongo zigcinwe IsiNgesi. Ndazama ukuqinisekisa ngokuphuma kwesicatshulwa, kodwa Mandivume ukuba kwafuneka ndenze utshintsho ukuze kube lula ukuqonda ngolwimi lwethu (PT-BR). Ukulungisa okanye siphakamiso sokunyusela in translation wamkelekile.

isingeniso

Esi sithuba efundisa git ukusetyenziswa. Ukuba le nto kufuneka, I bacebisa ukuba uthatha look at Manual ukwenza git. Yaye ngaba usukelo lwethu ukuze abonise ukuba indlela lwewebhu software, kule meko, khangela lwewebhu kwisemantiki.

Apha isindululo kukulawula intsebenziswano weqela software lwewebhu. Uyazi xa une badwelisi benkqubo multiple “eshukumisa” ngendlela efanayo ikhowudi yemvelaphi? Oku kubalulekile ukuze kukhawuleziswe uphuhliso, kodwa ungakwazi ukwenza nentloko enkulu (ukulahlekelwa kunye kwakhona) ukuba akukho ulawulo. Ukuthintela umqambi ukuba ukubhalwa emsebenzini kwenye kwaye nokuqinisekisa uphuhliso eqhubekayo kunye nemibutho, ukunciphisa ungquzulwano kunye nokulawula zikhululwa software, ngaba sisebenzisa git and model amasebe ukuba ukulandela.

amasebe model

Kule post ngethula ukuba indlela yophuhliso ndandizisebenzi- ezinye iiprojekthi zam (kokubini emsebenzini abucala) eduze 1 kwiminyaka eyadlulayo, kwaye iye yaba nempumelelo kakhulu. Abanye ixesha kudala ndifuna ukubhala ngayo, kodwa akazange afumane ixesha ekhoyo, kangaka kude. Andiyi kuthetha iinkcukacha zeprojekthi, nje izicwangciso amasebe kunye nolawulo zikhululwa.

Oku kuphela itywina imodeli git njengesixhobo ngeWeb zonke ikhowudi yethu yomthombo. (Kwenzeka, ukuba unomdla git, inkampani yethu gitpri ukuba inikeza, -Time real, uhlalutyo ethile data emangalisayo ukuya software engineering noun)

Kungani git?

Ukuze ufumane inkcazelo olunzulu iingenelo neengozi git kuthelekiswa nendlela yolawulo umthombo eyodwa, khangela a web. Kukho elinzima “impi” emhlabeni leyo. njenge developer, Ndikhetha git ngokunxulumene nazo zonke ezinye izixhobo ezikhoyo namhlanje. Ngokungathandabuzekiyo git wayitshintsha indlela ababhekisi acinge ngokwenza uhlanganise okanye udale yesebe. I zivela ihlabathi classical CVS / Subversion, apho nokuvela / eyayizalwa Yinto oyenzayo kanye nje okomzuzwana ibonakala kuyoyikisa kancinci (“Lumkela kongquzulwano uhlanganise, ke anilume!”).

Ngoku git ezi zenzo [nokuvela / eyayizalwa] Bona ilula kakhulu yaye bamele ukuba inxalenye enkulu yesiqhelo umsebenzi wethu, bakholelwa. umzekelo, hayi incwadi CSV / Subversion, eyayizalwa e ukuhlanganisa ulwazi aba bahamba okokuqala kuphela kwizahluko ezilandelayo (kubasebenzisi abaphambili), kanti nayiphi na incwadi ku git, oku kubonakala kwisahluko 3 (esisiseko).

Ngenxa elula yayo nohlobo phindo, eyayizalwa e ukuhlanganisa ulwazi Bathi akukho into elide ukuba woyike. ngempela, izixhobo yolawulo yoguqulelo kufuneka kwenzauhlanganise kwaye udale yesebe ngaphezu kwayo nayiphi na enye into.

intetho Enough, ke imodeli yophuhliso. Indlela ukuthi Ndiya apha ngokuyimfuneko into ngaphezu kokuba iseti iinkqubo ilungu ngalinye iqela kufuneka balandele ukuze ukuya inkqubo yophuhliso software ezilawulwa.

ezoba, kodwa zangaphakathi

Kucwangciso yogcino ukuba sisebenzise kwaye isebenza kakuhle kakhulu nale modeli eyayizalwa Le nto ndiyibhalayo yokugcina central. Qaphela ukuba lo yogcino nje “ingqalelo” central (ngokuba git iyi DVCS [Kusasazwa Version Control Systems], ngamanye amazwi, akukho nto nje yokugcina esembindini hlobo kwinqanaba lobuchule). Siza kuthetha kule yogcino njengoko imvelaphi, kuba eli gama kakuhle ngabo bonke abasebenzisi git.

umbhekisi phambili ngalunye encothula e kunyusa on imvelaphi. Kodwa ngaphaya ubudlelwane push-tsala for zangaphakathi [imvelaphi], umbhekisi phambili ngalinye nako ukubamba [Tsala] utshintsho kwezinye oontanga ukwenza Subteams. umzekelo, oku kunokuba luncedo ukusebenza nabaphuhlisi ezimbini okanye ngaphezulu kwi entsha functionality enkulu, ngokuthumela ngaphambili [eliqhubela] umsebenzi oqhubekayo ngenxa imvelaphi. Kulo ngasentla, kukho sub-amaqela ka-Alice ne Bob, Alice e uDavide, e Clair noDavide.

ngobuchwepheshe, oku kuthetha nto ngaphezu Alice iye uchaze git ekude uBob, ngokwalatha yogcino Bob xa, and vice versa.

The main amasebe

emhlane, Le modeli nophuhliso gqitha ophefumlelwe imifuziselo phandle ezikhoyo apho. Yogcino central iye kwamasebe amabini [amasebe] ekhokelela kubomi obungunaphakade:

  • master
  • ukuphuhlisa

the master yesebe e imvelaphi kufuneka bawuqhele kumsebenzisi ngamnye git. zifana kuya master yesebe, kukho enye yesebe ebizwa ukuphuhlisa.

siqwalasela imvelaphi / inkosi njengoko isebe engundoqo apho umthombo BAKWANDLUNKULU kusoloko ibonisa isimo production-ukulungele [ilungele production].

siqwalasela imvelaphi / ukuphuhlisa njengoko yesebe apho umthombo oyinhloko BAKWANDLUNKULU kusoloko ibonisa isimo kunye notshintsho yophuhliso zamva kunikelwa kukhupho elilandelayo. Abanye basenokuthi “yesebe ukuhlanganiswa”. Kulapho zenzeke izakhiwo kakhulu semfene.

Xa ikhowudi yemvelaphi kwi yesebe ukuphuhlisa ufikelela kwindawo oluzinzileyo yaye ukulungele ukuba akhululwe [akhululwe], Zonke iinguqu kufuneka zidityaniswe [buhlanganiswe] ukuze ubuyise master yesebe waza ziphawulwe ngenombolo yenguqulo [ukukhululwa]. Njani oku kwenziwa ngokwenkcukacha, kuxoxwe ngakumbi.

ke, ixesha ngalinye zifakwe utshintsho [buhlanganiswe] emva master, Oku kwenziwe inguqulelo entsha [akhululwe], silinganisa. Sizama ukuba ngqongqo gqitha ngawo, ngelo xesha, kusale, Mhlawumbi usebenzise script hook Git ukudala ngokuzenzekelayo kwaye uthumele isicelo sethu kumncedisi yemveliso nanini na kukho enze hayi master.

amasebe abangabancedani

ecaleni kwe amasebe main, master e ukuphuhlisa, model yethu yophuhliso usebenzisa iintlobo amasebe inkxaso ukunceda uphuhliso ngaxeshanye phakathi kwamalungu eqela, into 1) lula Tracking izinto ezintsha [Iimbonakalo], 2) ilungiselela ukunikezelwa kwe inguqulelo entsha [ukukhululwa] e 3) Kuyanceda ukuba ukulungisa ngokukhawuleza ziphene kwimveliso [hotfix]. Ngokungafaniyo amasebe main, Estes amasebe Kuye baphila ubomi obufutshane, ekubeni ekugqibeleni baya kususwa.

Iintlobo ezahlukeneyo amasebe [abangabancedani] singakwazi ukusebenzisa, they are:

  • amasebe Faka
  • amasebe Release
  • amasebe Hotfix

Ngalinye kula amasebe Kuye injongo ethile ubotshiwe imithetho engqongqo, ukuze, amasebe bekwazi ukuthenga yesebe yaye amasebe Baya zifanele zidityaniswe [buhlanganiswe] iithagethi zazo. Siza kubona ngalinye [amasebe] awhile.

Ngendlela yobugcisa, labo amasebe Bona azithathwa “ezizodwa”. uhlobo ngalunye yesebe It ubalwa ngendlela esisebenzisa. ekugcineni, Bathi nje elula amasebe for Old git.

amasebe Faka

[Iimpawu = iimpawu / ukusebenza]

– Ungakwazi lwamasebe [yesebe] ukusuka:
ukuphuhlisa
– it ihlangane [uhlanganise] kwakhona:
ukuphuhlisa
Convenção de nomeação do yesebe:
Qualquer coisa, exceto master, ukuphuhlisa, release-*, or hotfix-*

Os feature branches (ou às vezes chamados de topic branches) são usados para desenvolver novos recursos/funcionalidades para uma versão próxima ou futura. Ao iniciar o desenvolvimento de uma feature, a versão alvo em que esse recurso será incorporado pode muito bem ser desconhecida nesse ponto.

A essência de um feature branches é que ele existe enquanto a feature estiver em desenvolvimento, mas eventualmente será incorporado [buhlanganiswe] emva ukuphuhlisa (para adicionar definitivamente a nova feature ao próximo ukukhululwa) ou descartado (no caso de uma experiência mal sucedida).

amasebe Faka tipicamente existem apenas no repositório ukuphuhlisa, não em imvelaphi.

Criando uma feature branches

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

Incorporando uma feature finalizada no develop

Features finalizadas podem ser mescladas[buhlanganiswe] com a yesebe ukuphuhlisa para adicioná-las definitivamente ao próximo ukukhululwa.

$ git checkout develop
# Switched to branch 'develop'
$ git merge --hayi-ff myfeature
# Updating ea1b82a..05e9557
# (Summary of changes)
# $ git branch -d myfeature
# Deleted branch myfeature (was 05e9557).
$ git push origin develop

A flag no-ff faz com que a mesclagem [uhlanganise] sempre crie um novo objeto de enze, ainda que a mesclagem pudesse ser executada com um fast-forward [ff]. Isso evita que se perca informações sobre o histórico da existência de uma feature branch, agrupando todos os commits que foram adicionados à feature. Compare:

No último caso [da figura acima], é impossível ver a partir do histórico do Git quais dos commits foram implementados dentro de uma feature; você teria que ler manualmente todas as mensagens de log. Reverter uma feature inteira (ngamanye amazwi, um grupo de commits), é uma verdadeira dor de cabeça na última situação, enquanto que é facilmente feito se a flag no-ff tiver sido usada.

Sim, isso criará mais alguns objetos de commits (vazios), mas o ganho é muito maior do que o custo.

amasebe Release

[Release = lançamento/entrega/versão]

– Ungakwazi lwamasebe [yesebe] ukusuka:
ukuphuhlisa
– it ihlangane [uhlanganise] kwakhona:
ukuphuhlisa e master
Convenção de nomeação do yesebe:
release-*

Os releases branches ajudam na preparação de uma nova versão de produção [production release]. Eles permitem colocar os pingos nos i’s de última hora. Além disso, eles permitem pequenas correções de bugs e definição de meta-dados para uma ukukhululwa (número de versão, datas de compilação, etc). Ao fazer todo esse trabalho em um release branch, i develop branch fica limpo para receber Iimbonakalo da próxima grande ukukhululwa [version].

O momento chave para se criar uma nova release branch ramificando de ukuphuhlisa é quando o ukuphuhlisa já está (quase) refletindo o estado desejado da nova ukukhululwa [version]. Todas as Iimbonakalo candidatas ao ukukhululwa a ser construído devem ser incorporados [uhlanganise] ao ukuphuhlisa neste momento. Já os Iimbonakalo voltados para zikhululwa futuros devem esperar uma próxima ukukhululwa [version].

É exatamente no início de um release branch que o próximo ukukhululwa recebe um número de versãonão antes. Até esse momento, i develop branch refletiu alterações para onext release” [próxima versão], mas não está claro se essapróxima versãoacabará por ser 0.3 okanye 1.0, até que o release branch seja iniciado. Essa decisão é tomada no início do release branch e é realizada pelas regras do projeto sobre versionamento [sugiro ver sobrelwewebhu kwisemantiki“].

Criando um release branch

Os releases branches são criados a partir do develop branch. umzekelo, digamos que a versão 1.1.5 é a atual versão de produção e temos uma grande ukukhululwa chegando. O estado de ukuphuhlisa está pronto para apróxima versão” [next release] e decidimos que isso se tornaria a versão 1.2 (em vez de 1.1.6 okanye 2.0). ke, nós nos ramificamos e damos ao release branch um nome refletindo o novo número de versão:

$ git checkout -b release-1.2 ukuphuhlisa
# Switched to a new branch "release-1.2"
$ ./bump-version.sh 1.2
# Files modified successfully, version bumped to 1.2.
$ git commit -a -m "Bumped version number to 1.2"
# [release-1.2 74d9424] Bumped version number to 1.2
# 1 files changed, 1 insertions(+), 1 deletions(-)

Depois de criar um novo yesebe e acessá-lo, nos esbarramos no número da versão. Aqui, bump-version.sh é um script shell que altera alguns arquivos da cópia de trabalho para refletir a nova versão. (Isso pode, kucace, ser uma mudança manualo ponto é que alguns arquivos mudam.) ke, é feito o enze do número da versão modificada.

Este novo yesebe pode existir lá por um tempo, até que a ukukhululwa seja lançada definitivamente. Durante esse período, correções de erros podem ser aplicadas neste yesebe (em vez do develop branch). A adição de novos e grandes Iimbonakalo aqui é estritamente proibida. Eles devem ser mesclados [buhlanganiswe] e ukuphuhlisa e, njalo, aguardar o próximo grande ukukhululwa.

Finalizando um release branch

Quando o release branch está pronto para se tornar uma versão real, algumas ações precisam ser realizadas. Primeiro, i release branch é mesclado em master (uma vez que cada enze hayi master é uma nova versão por definição, khumbula). ke, esse enze hayi master deve ser marcado para facilitar uma futura referência a este histórico de versões. ekugqibeleni, as mudanças feitas no release branch precisam ser mescladas [buhlanganiswe] novamente para ukuphuhlisa, de modo que os zikhululwa futuros também contenham essas correções de bugs.

As duas primeiras etapas no Git:

$ git checkout master
# Switched to branch 'master'
$ git merge --hayi-ff release-1.2
# Merge made by recursive.
# (Summary of changes)
$ git tag -a 1.2

the ukukhululwa agora está concluído e marcado para futura referência.

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

Para manter as mudanças feitas no release branch, precisamos juntá-las de volta ao ukuphuhlisa. No Git:

$ git checkout develop
# Switched to branch 'develop'
$ git merge --hayi-ff release-1.2
# Merge made by recursive.
# (Summary of changes)

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 enze.

ngoku, que realmente terminamos, i release branch pode ser removido, já que não precisaremos mais dele:

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

amasebe Hotfix

– Ungakwazi lwamasebe [yesebe] ukusuka:
master
– it ihlangane [uhlanganise] kwakhona:
ukuphuhlisa e master
Convenção de nomeação do yesebe:
hotfix-*

Os amasebe 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 [ekusebenziseni]. 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 (hayi develop branch) pode continuar, enquanto outra pessoa está preparando uma rápida correção da falha em produção.

Criando o hotfix branch

Os hotfix branches são criados a partir do master branch. umzekelo, 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 ukuphuhlisa 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 master
# Switched to a new branch "hotfix-1.2.1"
$ ./bump-version.sh 1.2.1
# Files modified successfully, version bumped to 1.2.1.
$ git commit -a -m "Bumped version number to 1.2.1"
# [hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1
# 1 files changed, 1 insertions(+), 1 deletions(-)

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

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

$ git commit -m "Fixed severe production problem"
# [hotfix-1.2.1 abbe5d6] Fixed severe production problem
# 5 files changed, 32 insertions(+), 17 deletions(-)

Finalizando um hotfix branch

Quando terminado, i bugfix precisa ser mesclado de volta ao master, mas também precisa ser incorporado novamente para ukuphuhlisa, 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 master e tag a ukukhululwa [marque a verão]:

$ git checkout master
# Switched to branch 'master'
$ git merge --hayi-ff hotfix-1.2.1
# Merge made by recursive.
# (Summary of changes)
$ git tag -a 1.2.1

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

ke, inclua o bugfix hayi ukuphuhlisa nayo:

$ git checkout develop
# Switched to branch 'develop'
$ git merge --hayi-ff hotfix-1.2.1
# Merge made by recursive.
# (Summary of changes)

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

ekugqibeleni, remova a yesebe 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 eyayizalwa 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.

Lonke Ufumaniso: 7507

A ukubuyekeza ku “Imodeli ngempumelelo amasebe git

  1. Deivson Nascimento wathi:

    mholo, 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??

Shiya Phendula

Idilesi yakho ye email abayi kupapashwa. amasimi ezifunekayo ziyaphawulwa ngokuzibhala *