Go yilda filiallari muvaffaqiyatli modeli

qanday foydalanish bilguvchi Git muhimdir, va bu hamkorlikdagi rivojlantirish muhiti boshqarishi dasturini saqlab o'z ichiga oladi.

kreditlar

Bu xabar asl bir portugal versiyasi, ingliz tilida, “Muvaffaqiyatli Git shoxlangan model“, tegishlicha muallif tomonidan vakolatli, Vincent DRIESSEN. sizga odam rahmat!

texnik masalalar bo'yicha, ba'zi kalit so'zlar ataylab ingliz saqlanayotgan edi. Men matni o'ziga xosligini ta'minlash uchun harakat, lekin men bizning tilda tushunishni engillashtirish o'zgarishlar qilish kerak edi, deb tan (PT-BR). tarjima takomillashtirish uchun har qanday tuzatish yoki taklif xush kelibsiz.

kirish

Bu foydalanish API o'rgatib bir post emas. Bu muhtoj nima bo'lsa, Men, bir ko'z tavsiya Manual API qilish. Nor u bizning maqsadimiz bir dasturiy ta'minot sürümlendirmesi qilish qanday ko'rsatish uchun, Bu holatda, nazar semantik Versiya.

Bu yerda taqdim dasturiy ta'minot versiya jamoa hamkorlikni boshqarish uchun emas. Siz necha dasturchilarni bo'lsa bilaman “aralashtirish,” Shu kodida? Bu rivojlanish tezligi muhim ahamiyatga ega, lekin katta bosh og'rig'i mumkin (zarar va Rework) hech nazorat qilish mavjud bo'lsa. boshqa ishini qayta yozilishiga bir Ishlab oldini olish va izchil rivojlantirishni ta'minlashga qaratilgan va tashkil qilish, dasturiy ta'minot versiyalari nizolarni kamaytirish va boshqarish, Biz API va modelini foydalanasiz filiallari rioya qilish.

Model filiallari

bu xabarga men loyihalarni ba'zi ishlatiladigan rivojlantirish modelini taqdim (Har ikki ish va xususiy da) yaqin 1 yil oldin, va juda muvaffaqiyatli bo'ldi. Ba'zi vaqt oldin Men bu haqda yozish uchun so'radim, lekin mavjud vaqt topildi hech qachon, hozirgacha. Men loyiha ma'lumotlarni haqida gapirish emas, faqat strategiyasi haqida filiallari va boshqaruv relizlar.

Bu model nafaqat muhr Git barcha manba kodini versiya vositasi sifatida. (tasodifan, Agar Go manfaatdormiz, agar, bizning kompaniya uchun gitpri beradi, real vaqt, dasturiy ta'minot muhandisligi optimallashtirish uchun, ba'zi ajoyib, ma'lumotlarni tahlil qilish)

Bu git?

markazlashgan manba nazorat qilish tizimlari nisbatan ijobiy va Go nordon atroflicha muhokama uchun, nazar a veb-. ulkan mavjud “urush” deb atrofida. bir shaxslar sifatida, Men bugun boshqa barcha mavjud vositalari bilan bog'liq API afzal. Git shubhasiz Dasturchilar bir qilish haqida o'ylab yo'l o'zgardi yushmoq yoki yaratish filial. Men mumtoz dunyo kelgan CVS / Subversion, qayerda birlashma / tarmoqlantirish Bu faqat bir muncha vaqt nima, bir narsa va har doim bir oz qo'rqinchli ko'rinadi (“mojarolarga ehtiyot bo'ling yushmoq, Ular sizni tishlab!”).

Endi bu harakatlarni git [birlashma / tarmoqlantirish] Ular juda oddiy va biz ish kundalik muhim bir qismini ifodalaydi, iymon. Misol uchun, yo'q kitob CSV / Subversion, shoxlangan e birlashtirish Ular faqat keyinchalik boblarida birinchi marta qoplangan (ilg'or foydalanuvchilar uchun), har qanday vaqt Go kitob, Ushbu bobda ko'rilgan 3 (asosiy).

uning oddiyligi va zerikarli tabiat natijasida, shoxlangan e birlashtirish Ular qo'rqib bo'lishi endi bir narsa bor. haqiqatdan, versiya nazorat qilish vositalari qilishga yordam kerakyushmoq va yaratish filial boshqa narsadan ko'proq.

etarli munozarasi, rivojlantirish modelini qilaylik. Men bu erda taqdim etadi model aslida har bir jamoa a'zosi boshqariladigan dasturiy ta'minot ishlab chiqish jarayoni olish uchun amal qilish kerak muolajalarni Klaster ko'proq narsa emas.

markazlashmagan, lekin markazlashtirilgan

omborxona o'rnatish, biz foydalanish va ushbu model bilan juda yaxshi ishlaydi, deb shoxlangan Bu markaziy jihozi iborat. Bu omborxona faqat ekanligini unutmang “ko'rib” markaziy (Git bir DVCS, chunki [Tarqalgan versiya nazorat tizimlari], Boshqa so'zlar bilan aytganda, bir texnik darajada markaziy jihozi kabi hech narsa yo'q). Biz bu hovuz sifatida murojaat qiladi kelib chiqish, Bu nom barcha foydalanuvchilar Git tanish bo'lgani.

Har bir dasturchi bo'lib tortadi e bo'lyapti haqida kelib chiqish. Lekin munosabatlar tashqarida surish-torting markazlashtirilgan uchun [kelib chiqish], Har bir dasturchi ham qo'lga olish mumkin [Torting] Boshqa tengdoshlari uchun o'zgarishlar Subteams shakllantirish. Misol uchun, Bu katta yangi funktsional ikki yoki undan ortiq ishlab chiquvchilar bilan ishlash uchun foydali bo'lishi mumkin, ilgari yuborish [itarib] amalga ish uchun kelib chiqish. yuqorida, Elis va Bob sub-jamoalar bor, Alice e David, e Clair va David.

texnik, Bu Bob ismli uzoq API belgilab berdi Elis ortiq hech narsa anglatadi, Bobning jihozi ishora, va aksincha.

Asosiy filiallari

orqa, Bu taraqqiyot modeli juda erda modellari amalga mavjud ilhomlanib qilingan. Markaziy omborxona ikki filiallarini bor [filiallari] cheksiz hayotga etakchi:

  • usta
  • rivojlantirish

The filiali master yilda kelib chiqish har bir foydalanuvchi Git tanish bo'lishi kerak. parallel filiali master, boshqa yo'q filial deb nomlangan rivojlantirish.

biz ko'rib kelib chiqishi / master qaerda manbai asosiy tarmog'i sifatida HEAD har doim bir davlatni aks ettiradi ishlab chiqarish-tayyor [ishlab chiqarish uchun tayyor].

biz ko'rib kelib chiqishi / rivojlantirish sifatida filial qaerda asosiy manbai HEAD har doim keyingi ozod berilishi uchun so'nggi rivojlanish o'zgarishlar bilan bir davlatni aks ettiradi. Ba'zi chaqiradi “filial integratsiya”. Eng dahshatli inshootlar sodir qaerda o'sha.

Qachon manba kod filiali rivojlantirish barqaror yetganda va ozod qilinishi uchun tayyor [ozod], Barcha o'zgarishlar birlashtirildi kerak [birlashtirildi] zaxira filiali master va keyin bir versiya raqami bilan belgilangan [ozod qilish]. Bu batafsil amalga oshiriladi qanday, muhokama qilinadi.

shu sababli, o'zgarishlar, shu jumladan qilingan har safar [birlashtirildi] orqaga usta, Bu yangi versiyasini hosil bo'ladi [ozod], belgilash bilan. Biz bu haqda juda qattiq bo'lishi uchun harakat, so'ng, nazariy, Hatto bir skriptni foydalanishingiz mumkin qayrilma qoziq bir bor qachon avtomatik ravishda yaratish va ishlab chiqarish serverga bizning buyurtma yuborish git sodir yo'q usta.

yordamchi filiallari

bilan bir qatorda filiallari asosiy, usta e rivojlantirish, Bizning rivojlantirish modeli turli xil foydalanadi filiallari qo'llab-quvvatlash jamoasi a'zolari o'rtasida bir vaqtning o'zida ishlab chiqish yordam berish, yoki 1) yangi xususiyatlar kuzatish osonlashtiradi [Xususiyatlari], 2) yangi versiyasi yetkazib berish uchun tayyorlaydi [ozod qilish] e 3) Bu tez ishlab chiqarish kamchiliklarini bartaraf qilish uchun yordam beradi [Tahrir,]. farqli o'laroq filiallari asosiy, Istis filiallari Bu qisqa umri bor, Bu oxir-oqibat olib tashlanadi, chunki.

turli turlari filiallari [yordamchi] Biz foydalanishingiz mumkin, ular:

  • xususiyati filiallari
  • relizlar filiallari
  • Tahrir filiallari

Bu har bir filiallari Bu ma'lum bir maqsadi bor va qat'iy qoidalar bilan bog'langan bo'ladi, shunday qilib,, filiallari borolmaydi filial va filiallari Ular birlashib lozim [birlashtirildi] ularning maqsadlari. Biz har bir ko'rasiz [filiallari] ozgina yilda.

Texnik jihatdan, ular filiallari Ular hisoblanmaydi “maxsus”. Har bir turi filial Biz foydalanish yo'li bilan tasniflanadi. oxir-oqibatda, Ular faqat oddiy filiallari Old Go uchun.

xususiyati filiallari

[Xususiyatlar = xususiyatlari / funktsional]

– Shohni mumkin [filial] dan:
rivojlantirish
– Bu aralashmaydi [yushmoq] yana:
rivojlantirish
– ning o'zgartiring qoidani filial:
biror narsa, tashqari usta, rivojlantirish, chiqishga *, yoki hotfix- *

The xususiyati filiallari (yoki ba'zan chaqirdi Mavzu filiallari) Ular kelajakda ozod yoki keyingi uchun yangi xususiyatlar / funksiyalarini rivojlantirish uchun ishlatiladi. a rivojlantirish boshlab qachon xususiyati, bu xususiyat, jumladan, qaysi maqsad qilib chiqish, shuningdek, bu nuqtada noma'lum bo'lishi mumkin.

a mohiyati xususiyati filiallari u vaqt bor xususiyati rivojlanmoqda, lekin u oxir-oqibat, jumladan qilinadi [birlashtirildi] orqaga rivojlantirish (doimiy, yangi qo'shishni xususiyati keyingi ozod qilish) yoki bekor (Muvaffaqiyatsiz tajriba holda).

xususiyati filiallari odatda hovuzida faqat mavjud rivojlantirish, emas kelib chiqish.

bir xususiyati filiallari yaratish

$ git Checkout -b rivojlantirish myfeature
# Switched to a new branch "myfeature"

Ishlab bo'yicha to'liq xususiyati, shu jumladan

Xususiyatlari birlashtirilishi mumkin olingunga[birlashtirildi] bilan filiali rivojlantirish Keyingi uchun doimiy ravishda ularni qo'shish ozod qilish.

$ git Checkout rivojlantirish
# bo'limi yoqilgan "ishlab"
$ O'tish --yo'q-ff myfeature
# ea1b82a..05e9557 yangilash
# (o'zgarishlar Xulosa)
# $ git Filialning -d myfeature
# O'chirilgan filiali myfeature (05e9557 edi).
$ git surish kelib chiqishi rivojlantirish

bir bayroq –no-ff Bu birlashma sabab [yushmoq] har doim yangi ob'ekt yaratish sodir, Birlashtirish bilan amalga mumkin bo'lsa ham, tezda oldinga [ff]. Bu mavjudligi tarixi haqida ma'lumot yo'qotib oldini oladi, xususiyati filiali, guruhlash barcha qilgan Ular uchun qo'shildi xususiyati. solishtiring:

Yo'q, ikkinchisi ishi [yuqorida tushunishga], Bu Git tarixidan ko'rish uchun imkonsiz bo'lgan qilgan Ular doirasida amalga oshirildi xususiyati; qo'lda barcha log xabarlarni o'qish kerak edi. orqaga qaytarish bir xususiyati butun (Boshqa so'zlar bilan aytganda, bir guruh qilgan), Bu ikkinchi vaziyatda haqiqiy bosh og'rig'i bo'ladi, Bu oson bayrog'i bo'lsa amalga oshiriladi esa –no-ff Bu ishlatilgan.

sim, Bu bir necha ob'ektlarni yaratadi qilgan (bo'sh), lekin daromad qiymati ancha katta.

relizlar filiallari

[Relizlar = relizlar / etkazib berish / relizlar]

– Shohni mumkin [filial] dan:
rivojlantirish
– Bu aralashmaydi [yushmoq] yana:
rivojlantirish e usta
– ning o'zgartiring qoidani filial:
chiqishga *

The relizlar filiallari yangi ishlab chiqarish versiyasini tayyorlash yordam [ishlab chiqarish relizlar]. Ular siz ham men so'nggi daqiqada nuqta joylashtirish imkonini beradi. Bundan tashqari, Ular kichik tuzatishlar imkon bugs va ta'rifi meta-ma'lumot a uchun ozod qilish (versiya raqami, To'plamda sanalari, etc). Agar barcha bu ishni qilib relizlar filiali, The filialini rivojlantirish qabul qilish uchun tozalanadi Xususiyatlari Keyingi katta ozod qilish [versiya].

asosiy on yangi yaratish relizlar filiali dallanma rivojlantirish bo'lsa rivojlantirish u allaqachon (deyarli) Yangi istalgan holatini aks ettiruvchi ozod qilish [versiya]. hamma Xususiyatlari uchun nomzodlar ozod qilish birlashgan kerak quriladi [yushmoq] uchun rivojlantirish hozir. allaqachon Xususiyatlari qaragan relizlar kelajakda keyingi kutish kerak ozod qilish [versiya].

Bu faqat boshlanishi relizlar filiali keyingi ozod qilish versiya raqami qabul – emas, balki oldin. Ungacha, The filialini rivojlantirish uchun aks o'zgarishlar “Keyingi relizlar” [Keyingi versiyasi], lekin bu aniq emas “Keyingi versiyasi” oxir-oqibat bo'ladi 0.3 yoki 1.0, gacha relizlar filiali boshlanadi. Ushbu qaror boshida olinadi relizlar filiali va versiyonlama loyihasini qoidalar bilan o'tkaziladi [Men ko'rishni taklif “semantik Versiya“].

a relizlar filiali yaratish

The relizlar filiallari Ular tomonidan yaratilgan filialini rivojlantirish. Misol uchun, versiyasi, deb aytish 1.1.5 Bu joriy ishlab chiqarish versiyasi va katta bo'lishi ozod qilish kelayotgan. Davlat rivojlantirish tayyor “Keyingi versiyasi” [Keyingi relizlar] va biz bu versiyasi bo'lib, degan qaror 1.2 (o'rniga 1.1.6 yoki 2.0). so'ng, Bizni ramificamos va biz olib relizlar filiali Yangi versiya raqamini aks ettiruvchi bir ismi:

$ git Checkout -b relizlar-1.2 rivojlantirish
# Switched to a new branch "release-1.2"
$ ./to'qnashmoq-versiya.sh 1.2
# Fayllar muvaffaqiyatli tahrirlangan, versiya uchun urdi 1.2.
$ git sodir -a -m "Bumped version number to 1.2"
# [ozod-1,2 74d9424] uchun urdi versiya raqami 1.2
# 1 fayllar o'zgardi, 1 šœshimchalari(+), 1 yo'q(-)

Yangi yaratish so'ng filial va uni kirish, Biz versiya raqamini urdi. shu yerda, bump-version.sh Bu yangi versiyasini aks ettirish uchun, ba'zi ishchi nusxasini fayllarni o'zgartiradi bir qobiq buyruq fayli. (bu mumkin, aniq, bir qo'lda o'zgarishi bo'lishi – nuqta, ba'zi fayllar o'zgartirish, deb.) so'ng, Bu qilingan sodir tahrirlangan versiya raqami.

ushbu yangi filial Bir muncha vaqt uchun bo'lishi mumkin, gacha ozod qilish nihoyat ozod etiladi. Bu davrda, xato o'zgarishlar, bu qo'llanilishi mumkin filial (o'rniga filialini rivojlantirish). katta Yangi Kiritilgan Xususiyatlari Bu yerda qat'iyan taqiqlanadi. Ular birlashib lozim [birlashtirildi] yilda rivojlantirish e, shunday, Keyingi katta kutish ozod qilish.

a relizlar filiali bezash

qachon relizlar filiali Bu haqiqiy versiyasi bo'lishga tayyor, ba'zi harakatlar amalga kerak. birinchi, The relizlar filiali Bu birlashtiriladi bo'ladi usta (har bir yildan beri sodir yo'q usta Bu ta'rifga ko'ra, yangi versiyasi, eslayman). so'ng, ekan sodir yo'q usta Bu versiya tarixi oson kelajakda murojaat qilish uchun belgilangan bo'lishi kerak. nihoyat, qilingan o'zgarishlar relizlar filiali Ular birlashib kerak [birlashtirildi] yana uchun rivojlantirish, shunday qilib, relizlar kelajakda ham bu xato o'zgarishlar o'z ichiga oladi.

Go birinchi ikki qadam:

$ git Checkout master
# "Master" Bo'limiga yoqilgan
$ O'tish --yo'q-ff relizlar-1.2
# recursive tomonidan amalga Birlashtirilmadi.
# (o'zgarishlar Xulosa)
$ git tegi -a 1.2

The ozod qilish Endi to'liq va keyinchalik murojaat qilish uchun rejalashtirilgan.

kuzatish: Siz ham bayroqlarni foydalanishingiz mumkin -S yoki -u kriptografik Teg imzo.

amalga o'zgarishlarni saqlab qolish uchun relizlar filiali, Biz qaytib, ularni ketmoq kerak rivojlantirish. Hech Git:

$ git Checkout rivojlantirish
# bo'limi yoqilgan "ishlab"
$ O'tish --yo'q-ff relizlar-1.2
# recursive tomonidan amalga Birlashtirilmadi.
# (o'zgarishlar Xulosa)

Ushbu qadam birlashma mojaro sabab bo'lishi mumkin (ehtimol, borib, Biz versiya raqamini o'zgartirish marta). Agar shunday, ta'mirlash va qilish sodir.

hozir, albatta, biz tugadi, The relizlar filiali Bu olib tashlangan bo'lishi mumkin, Biz endi bu kerak, chunki:

$ git filiali -d relizlar-1.2
# O'chirilgan filiali reliz-1,2 (edi ff452fe).

Tahrir filiallari

– Shohni mumkin [filial] dan:
usta
– Bu aralashmaydi [yushmoq] yana:
rivojlantirish e usta
– ning o'zgartiring qoidani filial:
hotfix- *

The Tahrir filiallari Ular juda o'xshash relizlar filiallari, Ular, shuningdek, yangi ishlab chiqarish versiyasini tayyorlash mo'ljallangan, rejasiz da. Ular ishlab chiqarish versiyasi kiruvchi davlat keyin darhol harakat qilish zarurati paydo [foydalanish]. tanqidiy xato bir ishlab chiqarish versiyada iborat bo'lsa, Bu darhol hal qilinishi lozim, keyin bir tuzatish va filiali Bu mavjud ishlab chiqarish versiyasini to'ldi teg olingan bo'lishi mumkin master filiali.

mohiyati, deb jamoasi a'zolari ish (yo'q filialini rivojlantirish) davom ettirishingiz mumkin, yana kimdir ishlab chiqarish qobiliyatsiz tez tuzatish tayyorlash paytida.

Tuzatish, filialini yaratish

The tuzatish va filiallari Ular tomonidan yaratilgan master filiali. Misol uchun, versiyasiga deb faraz 1.2 Bu ishlab chiqarish yugurish ozod joriy versiyasi bo'lib, katta xato tufayli muammolar taqdim etadi. o'zgarishlar rivojlantirish hali beqaror tark. Biz keyin bir dal mumkin tuzatish va filiali va muammoni hal qilish boshlanadi:

$ git Checkout -b, tuzatish-1.2.1 usta
# Switched to a new branch "hotfix-1.2.1"
$ ./to'qnashmoq-versiya.sh 1.2.1
# Fayllar muvaffaqiyatli tahrirlangan, versiya uchun urdi 1.2.1.
$ git sodir -a -m "Bumped version number to 1.2.1"
# [Tuzatish,-1.2.1 41e61bb] uchun urdi versiya raqami 1.2.1
# 1 fayllar o'zgardi, 1 šœshimchalari(+), 1 yo'q(-)

shoxlangan keyin versiya raqamini o'zgartirish unutmang!

so'ng, xato tuzatish va hosil sodir bir yoki undan ko'p tuzatish sodir ajratilgan.

$ git sodir -m "Fixed severe production problem"
# [Tuzatish,-1.2.1 abbe5d6] Statsionar qattiq ishlab chiqarish muammosi
# 5 fayllar o'zgardi, 32 šœshimchalari(+), 17 yo'q(-)

bir tuzatish filiali tugallanmoqda

tugaganiga, The bugfix Siz qaytib birlashtiriladi kerak usta, balki qaytib birlashgan kerak rivojlantirish, ta'minlash uchun, bu bugfix Bu, shuningdek, keyingi ozod, jumladan,. Bu yo'l juda o'xshaydi relizlar filiallari Ular olingunga.

birinchi, yangilash usta e tegi ozod qilish [Yozgi tekshirish]:

$ git Checkout master
# "Master" Bo'limiga yoqilgan
$ O'tish --yo'q-ff, tuzatish-1.2.1
# recursive tomonidan amalga Birlashtirilmadi.
# (o'zgarishlar Xulosa)
$ git tegi -a 1.2.1

kuzatish: Siz ham bayroqlarni foydalanishingiz mumkin -S yoki -u kriptografik Teg imzo.

so'ng, o'z ichiga oladi bugfix yo'q rivojlantirish ham:

$ git Checkout rivojlantirish
# bo'limi yoqilgan "ishlab"
$ O'tish --yo'q-ff, tuzatish-1.2.1
# recursive tomonidan amalga Birlashtirilmadi.
# (o'zgarishlar Xulosa)

Bu yerda qoida faqat istisno deb, bor bo'lsa, relizlar filiali olib borilmoqda, o'zgarishlar Tahrir, Ular bu uchun birlashib kerak relizlar filiali, o'rniga rivojlantirish. yushmoq bugfix yo'q relizlar filiali sabab bo'ladi bugfix yilda birlashtiriladi rivojlantirish ham, qachon relizlar filiali tugadi. (ish bo'lsa rivojlantirish darhol bu talab bugfix va qadar kutish mumkin emas relizlar filiali yakunlandi, Agar xavfsiz birlashtirish mumkin bugfix uchun deveolp ham.)

nihoyat, olib tashlash filial vaqtincha:

$ git filiali -d, tuzatish-1.2.1
# O'chirilgan filiali, tuzatish-1.2.1 (abbe5d6 edi).

xulosa

Bu bo'lim modeli g'aroyib hech narsa yo'q bo'lsa-da, Post boshida ko'rsatkich bizning loyihalar juda foydali bo'lishi mumkin. Bu jarayonlarning umumiy tushuncha rivojlantirish jamoasi a'zolari tushunish oddiy ruhiy modelini ko'rsatadi va imkon beradi shoxlangan e ozod.

yuqori sifatli arbobi bir PDF versiyasi original blog post taqdim etiladi: http://nvie.com/posts/a-successful-git-branching-model/ [yoki quyidagi Download Link haqida]. Davom eting va har qanday vaqtda tez mos yozuvlar uchun devorga qo'ydi.

umumiy kirish: 7114

bo'yicha fikr “Go yilda filiallari muvaffaqiyatli modeli

  1. Deivson Tug'ilgan dedi:

    xayrli kun, taşınabilirliği haqida gapirganda, men Git dastlab Linux uchun ishlab chiqilgan, deb bilaman, lekin, Git POSIX MSIS va Derazalardagi ishlaydi, agar men hayron??

Leave a Reply

Sizning email manzilingiz chop qilinmaydi. Kerakli joylar belgilangan *