Asosiy kontentga o‘tish

Maqolalar 4 daqiqa 46 ko‘rish

Git ish jarayonlari: branch va integratsiya tartibi

Git loyihasining o‘zida qo‘llanadigan ish tartibi: o‘zgarishlarni alohida commitlarga ajratish, uzoq yashovchi integratsiya branchlari (maint, main, next, seen) va qisqa yashovchi topic branchlar, patch hamda pull orqali hissa qo‘shish.

git devops

Mundarija

Bir kishi ishlaganda branch tartibi muhim emas. Jamoa bo‘lganda esa “qaysi branch nima uchun” degan savol darhol chiqadi. Bu bo‘lim Git loyihasining o‘zi qanday ishlashini ko‘rsatadi: barqaror branchlar, sinov branchlari va ular o‘rtasidagi qoidalar.

Bu ma’lumotnoma, dars emas

Bu qism Git'ning rasmiy qo‘llanmasi (git help workflows, Git 2.50.1) asosida o‘zbekchaga o‘girilgan. Ketma-ket bajariladigan dars emas: kerak bo‘lganda ochib, kerakli joyini o‘qiysiz. Git'ni noldan o‘rganmoqchi bo‘lsangiz, avval Git va GitHub darslarini bajaring.

Nomi#

gitworkflows — Git bilan tavsiya etilgan ish jarayonlari sharhi.

Qisqacha ishlatilishi#

Terminal
git *

Tavsif#

Bu hujjat Git loyihasining o‘zida qo‘llanadigan ish jarayonlari asosida umumiy tavsiyalar beradi. Har bir loyiha o‘z ehtiyojiga moslashtirishi mumkin.

O‘zgarishlarni ajratish#

Har bir mantiqiy o‘zgarishni alohida commit qiling. Commit:

  • bitta tushunarli maqsadga ega bo‘lsin;
  • kompilyatsiya va testdan o‘tsin;
  • bog‘liq bo‘lmagan formatlash yoki refaktorlarni aralashtirmasin;
  • mazmunli sarlavha va kerak bo‘lsa batafsil sababni tushuntirsin.

Ishchi daraxtdagi ayrim bo‘laklarni tanlab staging qilish:

Terminal
git add -p
git diff --cached
git commit

So‘nggi commitni public bo‘lmasidan oldin tuzatish:

Terminal
git commit --amend

Bir nechta mahalliy commitni tartiblash, birlashtirish yoki tahrirlash:

Terminal
git rebase -i <upstream>

Boshqalar foydalanayotgan public tarixni rebase qilib qayta yozmang. Public xatoni odatda git revert bilan yangi commit orqali bekor qiling.

Patch yuborishdan oldin:

Terminal
git diff --check
git log --check
git format-patch --cover-letter <upstream>

Branchlarni boshqarish#

Uzoq yashovchi integratsiya branchlari va qisqa yashovchi topic branchlar ajratiladi.

Odatdagi rollar:

  • maint — chiqarilgan versiyalarga muhim tuzatishlar;
  • master yoki main — keyingi reliz uchun barqaror asos;
  • next — keyingi siklga nomzod topic branchlar integratsiyasi;
  • seen — tajribaviy, hali tayyor bo‘lmagan mavzular sinovi;
  • topic/* — bitta xususiyat yoki tuzatish uchun alohida branchlar.

Topic branch yaratish:

Terminal
git switch -c topic/my-change master

Upstream yangilanganda, topic hali e’lon qilinmagan bo‘lsa:

Terminal
git fetch origin
git rebase origin/master

Tayyor topicni merge qilish:

Terminal
git switch master
git merge --no-ff topic/my-change

--no-ff alohida topic tarixini ko‘rsatadigan merge commit yaratadi; loyiha siyosatiga qarab fast-forward yoki squash merge ham tanlanishi mumkin.

Branchdagi ishlarni taqqoslash:

Terminal
git log master..topic/my-change
git diff master...topic/my-change
git range-diff old-base..old-tip new-base..new-tip

seen kabi tashlab qayta yaratiladigan integratsiya branchlari public barqaror API hisoblanmaydi. Barqaror branchlar esa odatda orqaga qaytarilmasligi kerak.

Taqsimlangan ish jarayonlari#

Git’da har bir dasturchi to‘liq repozitoriyga ega. O‘zgarishlar ikki asosiy yo‘l bilan uzatiladi:

Patch orqali#

Terminal
git format-patch origin/master
git send-email 000*.patch

Integrator:

Terminal
git am -3 000*.patch

Bu model email review, commit muallifligini saqlash va patchlarni arxivlash uchun qulay.

Pull orqali#

Contributor branchini public joyga push qiladi:

Terminal
git push public topic/my-change
git request-pull origin/master public-url topic/my-change

Integrator o‘zgarishni oladi va tekshiradi:

Terminal
git fetch contributor topic/my-change
git log --show-signature HEAD..FETCH_HEAD
git diff HEAD...FETCH_HEAD
git merge FETCH_HEAD

Integratsiya pog‘onali bo‘lishi mumkin: contributor → subsystem maintainer → project maintainer. Har bir bosqich o‘zgarishni review va test qiladi.

Yaxshi taqsimlangan jarayon quyidagilarni aniq belgilaydi:

  • qaysi branch nima uchun ishlatilishi;
  • patch yoki pull request formati;
  • test va review talablari;
  • kim qaysi branchga push/merge qila olishi;
  • imzo, sign-off va release teg siyosati;
  • public tarixni qayta yozish qoidalari.

Shuningdek qarang#

giteveryday(7), gitglossary(7), gitworktree(1), git-rebase(1), git-merge(1), gitworkflows(7).

Git to‘plami#

git(1) buyruqlar to‘plamining bir qismi.

4 daqiqa 46 marta o‘qildi