Mundarija (39)
- Bu darsda
- 1. Nega bu kerak?
- 2. Issue yaratish
- 2.1 Brauzerda
- 2.2 Yaxshi issue qanday bo'ladi
- 2.3 Natija
- 3. Label, assignee, milestone
- 3.1 Label — belgi
- 3.2 Assignee — mas'ul
- 3.3 Milestone — bosqich
- 4. Issue'ni yopish
- 4.1 PR bilan — Closes #8
- 4.2 Qo'lda yopish va sabab
- 4.3 Bog'lash: # va @
- 5. Projects — doska va jadval
- 5.1 Nima uchun
- 5.2 Yaratish
- 5.3 Maydonlar va avtomatlar
- 6. Shablonlar
- 6.1 Nega shablon
- 6.2 Issue form — 01-xato.yml
- 6.3 Markdown shablon — 02-taklif.md
- 6.4 config.yml — ro'yxatni sozlash
- 6.5 PR shabloni
- 6.6 GitHub nimani tanidi
- 7. Discussions — savol-javob uchun
- 8. Ko'p uchraydigan xatolar
- 8.1 Shablon chiqmaydi
- 8.2 Closes issue izohida
- 8.3 Bitta issue — uchta muammo
- 8.4 Label tartibsizligi
- 9. Mashqlar
- 1-mashq (oson): Qayerga yoziladi?
- 2-mashq (o'rta): Bo'sh joylarni to'ldiring
- 3-mashq (qiyin): Yomon issue'ni qayta yozing
- 4-mashq: Portfolio qadami — portfolio'ning ish daftari
- 10. Real ishda
- Xulosa
- Manbalar
Issues, Projects va shablonlar
Qisqacha: Issue — repodagi vazifa, xato yoki taklif yoziladigan "kartochka". Unga label (belgi), assignee (mas'ul) va milestone (bosqich) qo'shiladi, PR esa
Closes #8bilan uni yopadi. Ko'p issue'larni Projects jadval yoki doska ko'rinishida rejalaydi. Yaxshi issue yozishni osonlashtirish uchun.github/ISSUE_TEMPLATE/da shablonlar va formalar,.github/pull_request_template.mdda PR shabloni turadi. Savol-javob uchun esa Discussions.
Bu darsda
- Yaxshi issue yozasiz va uni label, assignee, milestone bilan tartiblaysiz.
- Issue'ni PR bilan avtomatik yopasiz va yopish sabablarini farqlaysiz.
- Milestone foizi qanday hisoblanishini ko'rasiz.
- Issue formasi, Markdown shablon,
config.ymlva PR shablonini yozasiz. - Projects (doska va jadval) va Discussions nima uchun kerakligini bilib olasiz.
Oldin bilishingiz kerak: GitHub asoslari: repo, README, LICENSE, sozlamalar, Pull Request: yaratish, muhokama va merge.
1. Nega bu kerak?
Oldingi darsda CONTRIBUTING.md da "katta o'zgarishdan oldin issue oching" degan qoida yozdik. Pull Request darsida esa Closes #1 bilan issue'ni yopdik. Issue'ni o'zi esa hali chuqur ko'rmadik.
«Bahor» sayti ishlamoqda va xabarlar kela boshladi. Jasur aka Telegram'da yozadi: "menyuda narx ko'rinmayapti". Malika og'zaki aytadi: "bron formasiga tasdiq kerak". Mehmon telefon qiladi. Bir haftadan keyin hech kim eslay olmaydi: nima kelgan edi, kim tuzatyapti, nima tugadi?
Hamma vazifa bitta joyda, kod yonida turishi kerak. GitHub'da bu joy — Issues.
Issue (masala, muammo) — repodagi vazifa kartochkasi. GitHub hujjatiga ko'ra, issue'da xato hisobotlari, yangi imkoniyatlar, g'oyalar va jamoa bilan muhokama qilinadigan har qanday ish yuritiladi. Har issue'ning raqami, sarlavhasi, tavsifi va izohlari bor.
Hayotiy o'xshatish: ustaxonadagi buyurtma daftari. Har buyurtma — alohida varaq: nima qilish kerak, kim oldi, qachongacha. Usta ishni tugatsa, varaqqa "bajarildi" deb yozadi. Daftar yo'q ustaxonada buyurtmalar unutiladi.
Bu darsda hamma narsani GitHub'dagi sinov reposida haqiqatan yaratdik — repo nomi chiqishlarda login/bahor. Issue raqamlari (#8, #9) oldingi darslardagi PR'lardan keyin davom etadi.
2. Issue yaratish
2.1 Brauzerda
GitHub hujjatidagi tartib:
- Repo sahifasida Issues tabini oching.
- New issue ni bosing.
- Shablonlar bo'lsa, ro'yxatdan birini tanlang (shablonlarni dars oxirida yozamiz).
- Sarlavha va tavsif yozing. Tavsif — Markdown.
- Submit new issue ni bosing.
O'ng ustunda issue'ni tartiblash uchun maydonlar bor: Assignees, Labels, Projects, Milestone. Ularni keyingi bo'limlarda ko'ramiz.
2.2 Yaxshi issue qanday bo'ladi
Jasur akaning xabari: "menyuda narx ko'rinmayapti". Qaysi qurilmada? Qaysi narx? Butunlay yo'qmi yoki kesilganmi? Bunday xabar bilan dasturchi avval savol berishga majbur. Yaxshi xato hisoboti savolga o'rin qoldirmaydi:
**Nima bo'ldi:** telefonda menyu sahifasida narxlar ekrandan
chiqib ketadi.
**Qadamlar:**
1. Telefonda `menyu/` ni oching.
2. O'ngga qarang — narx ko'rinmaydi.
**Kutilgan:** narx qator ichida ko'rinsin.
**Qurilma:** Android, ChromeTo'rt qism: nima bo'ldi, qanday takrorlash, nima kutilgan edi, qayerda. "Qadamlar" eng muhimi: dasturchi xatoni o'z ko'zi bilan ko'rmaguncha tuzata olmaydi.
Sarlavha esa qisqa va aniq: Menyu: telefonda narxlar ko'rinmaydi. Commit xabariga o'xshash Soha: boshlanishi — issue ro'yxatida qaysi qismga tegishli ekani darhol ko'rinadi.
2.3 Natija
Shu issue'ni yaratdik — #8. Terminalda ko'rinishi (gh buyrug'i bilan, uni GitHub CLI darsida o'rganamiz):
title: Menyu: telefonda narxlar ko'rinmaydi
state: OPEN
author: login (Aziz Karimov)
labels: bug, menyu
comments: 0
assignees: login (Aziz Karimov)
projects:
milestone: Ochilish
number: 8
--
**Nima bo'ldi:** telefonda menyu sahifasida narxlar ekrandan chiqib ketadi.
...labels, assignees, milestone — issue'ni tartiblaydigan uch maydon. Har birini ko'ramiz.
3. Label, assignee, milestone
3.1 Label — belgi
Label (yorliq) — issue yoki PR'ga yopishtiriladigan rangli belgi: "bu xato", "bu taklif", "menyuga tegishli". Yangi repoda GitHub tayyor label'lar to'plamini beradi. Sinov reposida ro'yxat shunday chiqdi:
accessibility Barrier affecting people with disabilities #f143ab
bug Something isn't working #d73a4a
documentation Improvements or additions to documentation #0075ca
duplicate This issue or pull request already exists #cfd3d7
enhancement New feature or request #a2eeef
good first issue Good for newcomers #7057ff
help wanted Extra attention is needed #008672
invalid This doesn't seem right #e4e669
question Further information is requested #d876e3
wontfix This will not be worked on #ffffffUch ustun: nomi, tavsifi, rangi. Eng ko'p ishlatiladiganlari:
| Label | Ma'nosi |
|---|---|
bug |
Xato — nimadir ishlamayapti |
enhancement |
Yangi imkoniyat yoki taklif |
good first issue |
Yangi kelganlar uchun mos vazifa |
help wanted |
Maintainer yordam so'rayapti |
good first issue — Fork darsida aytgan "kichik boshlang" maslahatining kaliti. Ochiq kodli loyihalarda yangi hissa qo'shuvchilar aynan shu label bilan vazifa qidiradi.
O'z label'laringizni ham yaratasiz — loyihaning qismlari bo'yicha. «Bahor» uchun menyu va bron qo'shdik. GitHub hujjatiga ko'ra, brauzerda: issue'lar ro'yxati ustidagi Labels → New label → nom, tavsif, rang → Create label. GitHub hujjatiga ko'ra, repoga yozish huquqi bor har kim label yarata oladi.
3.2 Assignee — mas'ul
Assignee — issue ustida kim ishlayapti. #8 ni Aziz o'ziga oldi. Bu boshqalarga "buni olmang, men qilyapman" degan signal. Ikki odam bir xatoni bir vaqtda tuzatmaydi.
3.3 Milestone — bosqich
Milestone (marra, bosqich) — bir maqsad sari issue va PR'lar guruhi, ko'pincha muddat bilan. Choyxona ochilishigacha sayt tayyor bo'lishi kerak. Milestone issue'lar ro'yxati ustidagi Milestones → New milestone orqali ochiladi. Ochilish milestone'ini ochdik va unga ikki issue qo'shdik: #8 (menyu xatosi) va #9 (bron tasdig'i).
GitHub hujjatiga ko'ra, milestone sahifasi bajarilish foizini va ochiq hamda yopiq elementlar sonini ko'rsatadi. Biz uni kuzatib bordik — keyingi bo'limda.
Tekshirib ko'ring: "Sayt ingliz tilida ham bo'lsin" degan issue'ga qaysi label mos:
bugyokienhancement?
Javob
enhancement. Hozirgi sayt buzilmagan — u shunchaki bu imkoniyatga ega emas. bug — mavjud narsa noto'g'ri ishlaganda.
4. Issue'ni yopish
4.1 PR bilan — Closes #8
Pull Request darsidagi usul. Aziz fix/menyu-telefon branch'ida tuzatish qildi va PR ochdi — uning raqami #12. Tavsifiga Closes #8 yozdi. PR'ga bug label'i va Ochilish milestone'ini ham qo'shdi.
Merge'dan oldin milestone holati:
ochiq: 2, yopiq: 0PR squash qilingach, #8 holati:
CLOSED / COMPLETEDCOMPLETED — "bajarildi". Milestone esa:
ochiq: 1, yopiq: 2Kutilmagan raqam! Ikkita issue edi, bittasi yopildi — "1 ochiq, 1 yopiq" bo'lishi kerak emasmi? Sabab: milestone faqat issue'larni emas, PR'larni ham sanaydi. PR #12 ham Ochilish da edi va u merge bo'ldi. Yopiqlar: #8 va #12. Ochiq: #9. Foiz: 3 tadan 2 tasi, ya'ni 67%.
4.2 Qo'lda yopish va sabab
Ba'zi issue'lar bajarilmaydi. "Sayt ingliz tilida ham bo'lsin" (#10) — hozircha rejada yo'q. Uni yopamiz, lekin "bajarildi" deb emas. GitHub hujjatiga ko'ra, Close issue tugmasi yonidagi ro'yxatda yopish sababini tanlash mumkin. Sinovda shunday yopdik va izoh qoldirdik:
✓ Closed issue login/bahor#10 (Sayt ingliz tilida ham bo'lsin)Holati:
CLOSED / NOT_PLANNEDNOT_PLANNED — "rejada yo'q". Ro'yxatda yana biri bor: duplicate — "takror", bunday issue allaqachon bor. Sabab muhim: bir yildan keyin "nega ingliz tili yo'q?" deb so'ralsa, issue va izoh javob beradi. Hech kim uni unutilgan deb o'ylamaydi.
Maslahat: Issue'ni izohsiz yopmang. Bir gap yetarli: "Hozircha rejada yo'q: mehmonlarning deyarli hammasi mahalliy." Muallif e'tiborsiz qolmaganini biladi.
4.3 Bog'lash: # va @
GitHub hujjatiga ko'ra, issue matnida:
#yozib, boshqa issue sarlavhasining bir qismini yozsangiz, ro'yxatdan tanlab havola qo'yasiz.#8— sakkizinchi issue'ga havola.@malika— hamkasbni chaqirish, u bildirishnoma oladi.
Katta ishni bo'lish uchun sub-issue (ichki issue) ham bor: "Bron tizimi" degan issue ichida "forma", "tasdiq sahifasi", "Telegram xabar" kabi kichik issue'lar.
5. Projects — doska va jadval
5.1 Nima uchun
Issue'lar ro'yxati — oddiy ro'yxat. Lekin "hozir nima ustida ishlanyapti, nima navbatda, nima tugadi" degan savolga u yaxshi javob bermaydi. Buning uchun Projects bor.
GitHub hujjatiga ko'ra, project — issue va PR'lar bilan bog'langan moslashuvchan jadval, doska va yo'l xaritasi. U foydalanuvchi yoki tashkilot darajasida yaratiladi. Shuning uchun bitta project bir nechta repodagi issue'larni birga ko'rsata oladi.
Uch ko'rinish:
| Ko'rinish | Nima |
|---|---|
| Table | Jadval: har qator — issue, ustunlar — maydonlar |
| Board | Doska: ustunlar holat bo'yicha, kartochkalar suriladi |
| Roadmap | Vaqt chizig'i: sana va bosqichlar bo'yicha |
Board — eng tanish ko'rinish. Standart Status maydonining uch qiymati — Todo, In Progress, Done — uch ustunga aylanadi. Kartochkani bir ustundan boshqasiga surasiz. Bu usul Kanban deb ataladi. Uni Kanban va vazifa trekerlari darsida batafsil o'rganasiz.
flowchart LR
subgraph T["Todo"]
A["#9 Bron tasdig'i"]
end
subgraph P["In Progress"]
B["Rasmlar galereyasi<br/>(draft)"]
end
subgraph D["Done"]
C["#8 Menyu narxlari"]
end
T --> P --> DNimaga qarang: kartochka chapdan o'ngga yuradi. "Rasmlar galereyasi" — hali issue emas, project'ning o'zidagi qoralama (draft issue). Fikr tug'ildi — darhol yozib qo'yiladi, keyin haqiqiy issue'ga aylantiriladi.
5.2 Yaratish
GitHub hujjatidagi tartib:
- Profilingizda Projects tabini oching.
- New project ni bosing va ko'rinishni tanlang: Table, Board yoki Roadmap (yoki tayyor shablon).
- Nom yozing va Create project ni bosing.
- Pastki qatordagi maydonga issue yoki PR havolasini qo'yib
Enterbosing — u project'ga qo'shiladi. Oddiy matn yozsangiz, draft issue bo'ladi.
Biz sinov reposida project yaratmadik — bu sinov qoidalaridan tashqarida edi. Bo'lim to'liq GitHub hujjatiga asoslangan.
5.3 Maydonlar va avtomatlar
GitHub hujjatiga ko'ra:
- O'z maydonlaringizni qo'shasiz: matn, raqam, sana, bir tanlovli ro'yxat (masalan "Muhimlik: Yuqori / O'rta / Past") va iteration — takrorlanuvchi vaqt oralig'i (masalan ikki haftalik bosqich).
- Issue va project ikki tomonlama bog'langan: issue o'zgarsa, project'da ham o'zgaradi, va aksincha.
- Ichki avtomatlar (built-in workflows) maydonlarni o'zi o'rnatadi. Masalan, project'ga qo'shilgan element Status'i avtomatik
Todobo'ladi. Ma'lum label'li issue'larni avtomatik qo'shish ham mumkin.
Yolg'iz loyiha uchun Projects ortiqcha tuyulishi mumkin. Lekin 20 ta issue'dan keyin doska "nima qilaman?" degan savolga eng tez javob beradi.
6. Shablonlar
6.1 Nega shablon
Mehmon xato topdi va issue yozdi: "ishlamayapti!!!" Qayerda, nima — noma'lum. Har safar savol berib o'tirmaslik uchun repo egasi issue shablonini yaratadi: issue ochilganda tayyor bo'limlar chiqadi, odam ularni to'ldiradi.
Shablonlar .github/ISSUE_TEMPLATE/ papkasida turadi. GitHub hujjatiga ko'ra, ular faqat reponing standart branch'iga (main) qo'shilgandan keyin ishlaydi. Biz to'rt fayl yaratdik va PR orqali main ga qo'shdik:
git switch -c feature/shablonlar
mkdir -p .github/ISSUE_TEMPLATE
# 01-xato.yml, 02-taklif.md, config.yml, pull_request_template.md
git status -s?? .github/ISSUE_TEMPLATE/
?? .github/pull_request_template.mdHar faylni ko'rib chiqamiz.
6.2 Issue form — 01-xato.yml
Issue form (issue formasi) — bo'sh matn o'rniga maydonlari bor forma: bir qatorli maydon, matn maydoni, ro'yxat, belgilash katakchalari. Majburiy maydon to'ldirilmasa, issue yuborilmaydi. GitHub hujjatiga ko'ra, issue form hozircha public preview — ommaviy sinov holatida, keyinchalik o'zgarishi mumkin.
Fayl YAML formatida. YAML — sozlama fayllari formati: kalit: qiymat, ichma-ichlik esa bo'sh joylar bilan. Uni GitHub Actions darsida ko'proq ishlatasiz. Hozir faylni namuna sifatida o'qing:
name: Xato haqida xabar
description: Saytda nimadir noto'g'ri ishlayapti
title: "[Xato]: "
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Rahmat! Xatoni tez topishimiz uchun maydonlarni to'ldiring.
- type: input
id: sahifa
attributes:
label: Qaysi sahifa?
placeholder: masalan, menyu/
validations:
required: true
- type: textarea
id: qadamlar
attributes:
label: Xatoni qanday takrorlash mumkin?
description: Qadamma-qadam yozing.
value: |
1.
2.
3.
validations:
required: true
- type: dropdown
id: qurilma
attributes:
label: Qurilma
options:
- Telefon
- Planshet
- Kompyuter
validations:
required: true
- type: checkboxes
id: tekshiruv
attributes:
label: Tekshiruv
options:
- label: Shunga o'xshash ochiq issue yo'qligini tekshirdim
required: trueTepadagi to'rt kalit — shablonning o'zi haqida:
| Kalit | Nima |
|---|---|
name |
Shablonlar ro'yxatidagi nomi (majburiy) |
description |
Ro'yxatdagi qisqa tavsif (majburiy) |
title |
Sarlavhaning boshlanishi |
labels |
Issue'ga avtomatik qo'shiladigan label'lar |
body — maydonlar ro'yxati (majburiy). Har biri - type: bilan boshlanadi. GitHub hujjatidagi turlar: markdown (shunchaki matn), input (bir qator), textarea (ko'p qator), dropdown (ro'yxat), checkboxes (katakchalar), upload (fayl yuklash). id — maydonning ichki nomi. validations: required: true — majburiy.
YAML'da bo'sh joy xatosi butun faylni buzadi. Shuning uchun faylni tekshiruvchi bilan sinadik:
npx --yes yaml-lint .github/ISSUE_TEMPLATE/01-xato.yml√ YAML Lint successful.(npx — paketni o'rnatmasdan bir martalik ishga tushirish, buni portfolio sozlamalarida ko'rgansiz.) yaml-lint faqat YAML sintaksisini tekshiradi. GitHub'ning o'z qoidalarini — masalan, labels dagi label repoda mavjudmi — tekshirmaydi. GitHub hujjatiga ko'ra, label repoda bo'lishi kerak. bug standart to'plamda bor.
6.3 Markdown shablon — 02-taklif.md
Oddiyroq variant — Markdown fayl. Tepasida --- orasida sozlamalar (YAML), pastda tayyor matn:
---
name: Yangi taklif
about: Saytga yangi imkoniyat taklif qilish
title: "[Taklif]: "
labels: enhancement
assignees: ''
---
## Muammo
Qanday ehtiyoj bor? Kim uchun?
## Taklif
Qanday yechim ko'ryapsiz?
## Muqobillar
Boshqa qanday yo'llarni o'yladingiz?Form'dan farqi: majburiy maydon yo'q, odam matnni xohlagancha o'zgartiradi. Bu yerda about — form'dagi description ning o'rnida.
Fayl nomidagi 01-, 02- — tasodif emas. GitHub hujjatiga ko'ra, raqamli prefiks shablonlar ro'yxatidagi tartibni belgilaydi.
6.4 config.yml — ro'yxatni sozlash
blank_issues_enabled: false
contact_links:
- name: Stol band qilish
url: https://t.me/sizning_kanal
about: Bron uchun Telegram'da yozing — bu yer sayt xatolari uchun.blank_issues_enabled: false— shablonsiz bo'sh issue'ni o'chiradi. GitHub hujjatiga ko'ra, bunda bo'sh issue faqat maintainer'larga qoladi, qolganlar faqat shablonlarni ko'radi.contact_links— ro'yxatga tashqi havolalar. Mehmonlar "stol band qilmoqchiman" deb issue ochmasin — ularni Telegram'ga yo'naltiramiz.
6.5 PR shabloni
PR shabloni bitta fayl: .github/pull_request_template.md. GitHub hujjatiga ko'ra, u repo ildizida yoki docs/ da ham tursa bo'ladi. Bir nechta PR shabloni kerak bo'lsa — .github/PULL_REQUEST_TEMPLATE/ papkasi.
## Nima
## Nega
Closes #
## Qanday tekshirish
1.
## Tekshiruv ro'yxati
- [ ] Brauzerda ochib ko'rdim (telefon o'lchamida ham)
- [ ] Commit xabarlari `Soha: fe'l` shaklidaPull Request darsidagi tavsif tuzilmasi endi har PR'da o'zi chiqadi. - [ ] — Markdown'dagi belgilash katakchasi. PR sahifasida uni sichqoncha bilan belgilasa bo'ladi.
Menyu tuzatishi PR'i (#12) tavsifi shu shablondan to'ldirildi:
## Nima
Narx qatori telefonda bo'linmaydi.
## Nega
Closes #8
## Qanday tekshirish
1.
## Tekshiruv ro'yxati
- [ ] Brauzerda ochib ko'rdim (telefon o'lchamida ham)
- [ ] Commit xabarlari `Soha: fe'l` shaklidaKo'rib turibsiz: "Nega" va "Qanday tekshirish" bo'sh qoldi. Shablon to'ldirishni eslatadi, lekin majburlamaydi. To'liq yozish — muallifning odati, review'da esa reviewer'ning talabi.
6.6 GitHub nimani tanidi
Shablonlar PR orqali main ga qo'shilgach, GitHub'dan repo shablonlari haqida so'radik. U Markdown shablonni (Yangi taklif), config.yml dagi havolani va PR shablonini (pull_request_template.md) qaytardi. Issue form esa bu javobda yo'q edi — so'rov faqat Markdown shablonlarni sanaydi. Formaning brauzerda qanday chiqishini sinovda ko'ra olmadik. Fayl sintaksisi — GitHub hujjatidagi namuna bo'yicha.
Tekshirib ko'ring: Aziz
feature/shablonlarbranch'ida shablonlarni yaratdi va push qildi, lekin PR'ni hali merge qilmadi. New issue bosilganda shablonlar chiqadimi?
Javob
Yo'q. Shablonlar faqat standart branch'da (main) bo'lsa ishlaydi. Branch'dagi fayllarni GitHub shablon sifatida o'qimaydi. Merge'dan keyin chiqadi.
7. Discussions — savol-javob uchun
Issue — bajariladigan ish: xato, vazifa, aniq taklif. Lekin "qaysi rang yaxshiroq?", "saytga yangi bo'lim kerakmi?" kabi ochiq savollar ham bo'ladi. Ular issue ro'yxatini to'ldirib yuboradi.
Buning uchun Discussions (muhokamalar) bor. GitHub hujjatiga ko'ra:
- Discussions — savol berish va javob olish, e'lonlar va loyiha kelajagi haqida erkin suhbat uchun.
- Muhokamalar kategoriyalarga bo'linadi (masalan "Savollar", "E'lonlar", "G'oyalar").
- Savol-javob kategoriyasida eng yaxshi javobni javob deb belgilash mumkin — keyin kelganlar uni darhol topadi.
- Ochiq savolga aylangan issue'ni muhokamaga ko'chirish mumkin.
- Uni repo administratori yoqishi kerak — standart holatda o'chiq.
Qoida: aniq ish bo'lsa — issue, fikr almashish bo'lsa — discussion.
8. Ko'p uchraydigan xatolar
8.1 Shablon chiqmaydi
Sabablari: fayl hali main da emas; papka nomi xato (.github/issue_template/ yoki ISSUE_TEMPLATES); YAML'da bo'sh joy xatosi. Tuzatish: papka aynan .github/ISSUE_TEMPLATE/, fayl main da va yaml-lint toza.
8.2 Closes issue izohida
Aziz issue'ga izoh yozdi: "Closes #8 — tuzatdim". Issue ochiq qoldi. Kalit so'zlar issue izohida emas, PR tavsifida (yoki commit xabarida) ishlaydi. Va faqat standart branch'ga PR'da (Pull Request darsidan).
8.3 Bitta issue — uchta muammo
"Menyu ko'rinmaydi, bron ishlamaydi va logotip katta". Uchalasini bitta PR tuzatmaydi. Biri tuzatilsa, issue yopiladimi? Tuzatish: har muammo — alohida issue. Bir-biriga # bilan havola qiling.
8.4 Label tartibsizligi
bug, Bug, xato, BUG — to'rtta label bitta ma'noda. Qidiruv ishlamay qoladi. Tuzatish: label'lar ro'yxatini bir marta kelishib oling va CONTRIBUTING.md ga yozing.
9. Mashqlar
1-mashq (oson): Qayerga yoziladi?
Har holat uchun tanlang: issue, discussion yoki PR:
- "Bron formasi yuborilganda sahifa oq bo'lib qoladi."
- "Kelgusi oyda saytga onlayn buyurtma qo'shsak, qanday bo'ladi?"
- Aziz menyu narxlari xatosini tuzatdi va kodni
mainga qo'shmoqchi. - "Choyxona ochilish sanasi o'zgardi — 15-noyabr."
Yechim
- Issue (
buglabel bilan) — aniq xato, tuzatish kerak. - Discussion — ochiq g'oya. Kelishilgach, aniq issue'larga bo'linadi.
- PR — kod o'zgarishi. Tavsifida tegishli issue:
Closes #.... - Discussion — e'lon. Agar saytda sanani o'zgartirish kerak bo'lsa — buning uchun alohida issue.
2-mashq (o'rta): Bo'sh joylarni to'ldiring
Markdown shablon .github/ISSUE_TEMPLATE/03-savol.md:
---
[___:name]: Sayt haqida savol
[___:about]: Sayt ishlashi haqida savol berish
title: "[Savol]: "
[___:labels]: question
---
## SavolingizIshora: «Markdown shablon» bo'limidagi faylning yuqori qismi.
Yechim
---
name: Sayt haqida savol
about: Sayt ishlashi haqida savol berish
title: "[Savol]: "
labels: question
---name — ro'yxatdagi nomi, about — qisqa tavsifi, labels — avtomatik label. question standart to'plamda bor. Fayl main ga tushgach, ro'yxatda uchinchi bo'lib chiqadi — nomi 03- bilan boshlanadi.
3-mashq (qiyin): Yomon issue'ni qayta yozing
Mehmon shunday issue qoldirdi:
Sarlavha: YORDAM!!!
Tavsif: sayt ishlamayapti telefonda hech narsa bosilmaydi tez tuzating- Yaxshi sarlavha yozing.
- Tavsifni «Yaxshi issue qanday bo'ladi» bo'limidagi to'rt qism bo'yicha qayta yozing. Bilmagan ma'lumot o'rniga mehmondan so'raladigan savolni yozing.
- Qaysi label'lar mos?
Yechim
Sayt: telefonda tugmalar bosilmaydi. Qaysi sahifa ekanini bilsak —Bron: telefonda Yuborish tugmasi bosilmaydiancha yaxshi.Taxminiy tavsif:
**Nima bo'ldi:** telefonda tugmalar bosilmaydi.
(Savol: qaysi sahifada? Hamma tugmami yoki bittasimi?)
**Qadamlar:**
1. Telefonda saytni oching.
2. (Savol: qaysi tugmani bosdingiz?)
**Kutilgan:** tugma bosilganda sahifa ochilishi kerak.
**Qurilma:** (Savol: telefon modeli va brauzer?)bug— nimadir ishlamayapti. Ma'lumot yetishmasa, javob kelgunchaquestionham qo'yiladi. Muallifga muloyim izoh: "Xabar uchun rahmat! Qaysi sahifada bo'ldi?"
Ko'rinib turibdiki, yomon issue'ni yaxshisiga aylantirish uchun uchta savol kerak bo'ldi. Issue formasi aynan shu savollarni oldindan so'raydi.
4-mashq: Portfolio qadami — portfolio'ning ish daftari
Portfolio'ingizda keyingi qismlarda ko'p ish bor: JavaScript bilan menyu, tema almashtirish, forma tekshiruvi. Ularni bugundan issue'larda rejalaymiz.
login.github.ioreposida ikki label yarating:dizayn,js.08-09 qismlarnomli milestone oching.- Uch issue yarating: "Menyu: telefonda ochiladigan menyu", "Tema: qorong'i rejim tugmasi", "Aloqa: forma maydonlarini tekshirish". Hammasiga
enhancementvajslabel'ini qo'shing, milestone'ga ulang, o'zingizni assignee qiling. Hozir JavaScript'ni bilmaysiz — bu shunchaki reja. - PR shablonini qo'shing («PR shabloni» bo'limidagi fayl) — PR orqali,
chore/pr-shablonbranch'ida (chore/— sozlama kabi xizmat ishlari uchun). - Profilingizda Board ko'rinishidagi project oching va uch issue'ni unga qo'shing.
- Hozir tuzatsa bo'ladigan kichik narsani topib, issue oching (masalan, "Haqimda: matnda imlo xatosi"). Uni PR'da
Closes #Nbilan yoping.
Yechim
Label, milestone va issue'lar brauzerda yaratiladi — darsdagi yo'llar bilan. PR shabloni — terminalda:
cd ~/kurs/portfolio
git switch main
git pull
git switch -c chore/pr-shablon
mkdir -p .github
# .github/pull_request_template.md — darsdagi mazmun
git add .github
git commit -m "Sozlama: PR shablonini qo'sh"
git push -u origin chore/pr-shablonPR ochilganda tavsif maydoni hali bo'sh bo'ladi — shablon main da emas. Merge'dan keyingi PR'larda u o'zi chiqadi. 6-qadamdagi PR — shablon ishlayotganini ko'radigan birinchi PR.
Milestone sahifasida 6-qadamdan keyin foizga qarang: imlo issue'si milestone'ga ulanmagan bo'lsa, foiz o'zgarmaydi. Uch js issue'si esa 09-qismgacha ochiq turadi — o'sha qismlarda ularni birma-bir PR bilan yopasiz.
10. Real ishda
- Issue — ishning boshlanishi. Jamoalarda "issue'siz PR yo'q" degan qoida ko'p uchraydi: har o'zgarishning sababi issue'da yozilgan bo'ladi, PR esa unga havola qiladi.
- Jira, Linear, GitHub Projects. Kompaniyalar ko'pincha alohida vazifa trekerlaridan foydalanadi, lekin g'oya bir xil: kartochka, holat, mas'ul, muddat. GitHub Projects'ni bilsangiz, ularning har birini bir kunda o'rganasiz (Kanban darsida taqqoslaymiz).
- Ochiq kodda shablon — majburiy. Katta loyihalar issue formasi bilan versiya, operatsion tizim va takrorlash qadamlarini majburan so'raydi. Busiz ming-minglab issue'ni ko'rib chiqib bo'lmaydi.
- Intervyuda so'raladi: "Yaxshi bug report qanday yoziladi?", "Vazifalarni qanday rejalashtirasiz?" Bu dars ikkalasiga ham javob.
Xulosa
- Issue — vazifa kartochkasi; yaxshi xato hisoboti: nima bo'ldi, qadamlar, nima kutilgan, qurilma.
- Label — tur va soha; assignee — mas'ul; milestone — muddatli bosqich, issue va PR'larni birga sanaydi.
- PR tavsifidagi
Closes #8merge'da issue'niCOMPLETEDholatida yopadi; qo'lda yopishda sabab tanlanadi (not planned,duplicate). - Projects — issue va PR'lar ustidagi jadval, doska va yo'l xaritasi; Status, maydonlar, avtomatlar.
- Shablonlar
.github/ISSUE_TEMPLATE/:.yml— issue formasi,.md— Markdown shablon,config.yml— ro'yxat sozlamasi. PR shabloni —.github/pull_request_template.md. Hammasi faqatmainda ishlaydi. - Discussions — ochiq savol va e'lonlar uchun; aniq ish — issue.
Keyingi dars: Branch himoyasi va rulesets — main ni tasodifiy push va review'siz merge'dan himoyalashni o'rganamiz.
Manbalar
- GitHub Docs: "About issues", "Creating an issue", "Closing an issue" — docs.github.com
- GitHub Docs: "Managing labels", "About milestones" — docs.github.com
- GitHub Docs: "About Projects", "Quickstart for Projects" — docs.github.com
- GitHub Docs: "Configuring issue templates for your repository", "Syntax for issue forms", "Creating a pull request template for your repository" — docs.github.com
- GitHub Docs: "About discussions" — docs.github.com
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!