15-bo‘lim
Teglar va relizlar
Yengil va annotatsiyali teglar, semantik versiyalash, GitHub Releases va o'zgarishlar jurnali.
Ushbu bo‘lim mundarijasi
Loyihaning ma'lum bir holatini "1.0 versiyasi" deb belgilash kerak bo'ladi. Buning uchun teglar ishlatiladi.
Teg nima? #
Teg - ma'lum kommitga qo'yilgan doimiy nom. Tarmoqdan farqi: tarmoq oldinga siljiydi, teg esa bir joyda qotib qoladi.
git tag
v1.0.0
v1.1.0
v1.1.1
v2.0.0
Ikki xil teg #
# Yengil teg - shunchaki nom
git tag v1.0.0
# Annotatsiyali teg - to'liq obyekt
git tag -a v1.0.0 -m "Birinchi barqaror reliz"
| Yengil | Annotatsiyali | |
|---|---|---|
| Nima saqlaydi | Faqat kommit xeshi | Muallif, sana, xabar, imzo |
| Git obyekti | Yo'q | Ha, alohida obyekt |
| Qachon | Vaqtinchalik belgi | Relizlar uchun |
-aAnnotatsiyali tegda kim va qachon reliz chiqarganini ko'rish mumkin:
git show v1.0.0
Yengil tegda bu ma'lumot yo'q.
git show v1.0.0
tag v1.0.0
Tagger: Husanboy Qodirov <[email protected]>
Date: Mon Jun 15 10:30:00 2026 +0500
Birinchi barqaror reliz
commit c9d2e71a4f8b2c5d9e0f3a6b1c4d7e0f2a5b8c31
Author: Husanboy Qodirov <[email protected]>
Date: Mon Jun 15 09:12:44 2026 +0500
Yakuniy tuzatishlar
Eski kommitga teg qo'yish #
git log --oneline
c9d2e71 Yakuniy tuzatishlar
8f3a1d0 Savat mantiqi
5a8b3f0 Bosh sahifa
git tag -a v0.9.0 5a8b3f0 -m "Beta versiya"
Teglarni yuborish #
git push teglarni yubormaydiBu ko'p uchraydigan chalkashlik. Teglarni alohida yuborish kerak:
# Bitta teg
git push origin v1.0.0
# Barcha teglar
git push origin --tags
# Faqat annotatsiyalilar (tavsiya etiladi)
git push origin --follow-tags
# Doimiy sozlash
git config --global push.followTags true
Teglarni o'chirish #
# Lokal
git tag -d v1.0.0
# Serverdan
git push origin --delete v1.0.0
Agar kimdir v1.0.0 ni yuklab olib, undan foydalanayotgan bo'lsa,
tegni boshqa kommitga ko'chirish ularning tizimini buzadi.
Xato bo'lsa - yangi teg chiqaring: v1.0.1.
Semantik versiyalash #
Eng keng tarqalgan versiya raqamlash standarti - SemVer.
| O'zgarish | Misol | Yangi versiya |
|---|---|---|
| Xato tuzatildi | Narx yaxlitlash | 1.2.3 → 1.2.4 |
| Yangi imkoniyat | Hisobot sahifasi | 1.2.4 → 1.3.0 |
| Eski kod ishlamay qoladi | API o'zgardi | 1.3.0 → 2.0.0 |
1.0.0-alpha tajriba versiyasi
1.0.0-beta.2 sinov versiyasi
1.0.0-rc.1 relizga nomzod
1.0.0 barqaror reliz
0.x.y nimani anglatadi?Birinchi raqam 0 bo'lsa - loyiha hali barqaror emas. Har qanday
versiyada moslik buzilishi mumkin.
1.0.0 chiqarish - "endi bu API barqaror, unga tayanishingiz mumkin"
degan va'da.
Teg bilan ishlash #
# Filtrlash
git tag -l "v1.*"
# Sanasi bilan
git tag -l --format='%(refname:short) %(creatordate:short)'
# Tegga o'tish
git switch --detach v1.0.0
# Tegdan tarmoq yaratish
git switch -c hotfix/1.0.1 v1.0.0
# Ikki teg orasidagi o'zgarishlar
git log v1.0.0..v1.1.0 --oneline
git diff v1.0.0 v1.1.0 --stat
# Joriy holat qaysi tegdan keyin
git describe --tags
v1.1.0-14-g8f3a1d0
Bu "v1.1.0 dan keyin 14 ta kommit, oxirgisi 8f3a1d0" degani.
git describe avtomatlashtirish uchunBu buyruq CI/CD skriptlarida versiya raqamini avtomatik aniqlash uchun juda qulay:
VERSIYA=$(git describe --tags --always)
echo "Yig'ilmoqda: $VERSIYA"
Hotfix ish oqimi #
# 1.0.0 chiqarilgan, main allaqachon oldinga ketgan
git switch -c hotfix/1.0.1 v1.0.0
# ... xatoni tuzatish ...
git commit -am "Kritik xavfsizlik xatosi tuzatildi"
git tag -a v1.0.1 -m "Xavfsizlik yangilanishi"
git push origin hotfix/1.0.1 v1.0.1
# Tuzatishni main ga ham qo'llash
git switch main
git cherry-pick -x <hotfix-kommit-xeshi>
GitHub Releases #
Teg - Git imkoniyati. Release - GitHub qo'shimchasi: tegga tavsif, fayl va o'zgarishlar ro'yxatini qo'shadi.
Releases → Draft a new release
| Maydon | Nima yoziladi |
|---|---|
| Tag | v1.1.0 (mavjudini tanlang yoki yangi yarating) |
| Title | v1.1.0 - Hisobotlar moduli |
| Description | O'zgarishlar ro'yxati |
| Assets | Yig'ilgan fayllar (.zip, .exe) |
| Pre-release | Beta bo'lsa belgilang |
# CLI orqali
gh release create v1.1.0 --title "v1.1.0 - Hisobotlar" --notes "Yangi hisobot moduli"
# Fayl bilan
gh release create v1.1.0 dist/loyiha.zip --generate-notes
# Ro'yxat
gh release list
--generate-notesGitHub kommitlar va PR lardan avtomatik o'zgarishlar ro'yxatini tuzadi. Qo'lda yozishga vaqt sarflamang - keyin uni tahrirlash mumkin.
CHANGELOG.md #
Loyiha ildizida o'zgarishlar jurnali:
# O'zgarishlar jurnali
Ushbu fayl [Keep a Changelog](https://keepachangelog.com) formatiga amal qiladi.
## [Chiqarilmagan]
### Qo'shildi
- Mahsulotlarni Excel ga eksport qilish
## [1.1.0] - 2026-06-15
### Qo'shildi
- Oylik savdo hisoboti sahifasi
- Mahsulotlarni kategoriya bo'yicha filtrlash
- Buyurtma holati tarixi
### O'zgartirildi
- Savat sahifasi dizayni yangilandi
- Qidiruv tezligi 3 barobar oshirildi
### Tuzatildi
- Narx yaxlitlashda tiyin yo'qolishi (#42)
- Bo'sh savatda xatolik (#47)
### Xavfsizlik
- SQL inyeksiya zaifligi yopildi
## [1.0.0] - 2026-05-01
### Qo'shildi
- Birinchi barqaror reliz
| Bo'lim | Qachon |
|---|---|
| Qo'shildi (Added) | Yangi imkoniyatlar |
| O'zgartirildi (Changed) | Mavjud xatti-harakat o'zgardi |
| Eskirdi (Deprecated) | Kelajakda o'chiriladi |
| O'chirildi (Removed) | Endi mavjud emas |
| Tuzatildi (Fixed) | Xato tuzatishlari |
| Xavfsizlik (Security) | Zaifliklar |
Konvensional kommitlar #
Kommit xabariga standart format qo'llasangiz, CHANGELOG avtomatik yaratiladi:
feat(savat): mahsulot sonini o'zgartirish qo'shildi
fix(narx): tiyin yaxlitlash xatosi tuzatildi
docs(readme): o'rnatish qo'llanmasi yangilandi
refactor(baza): so'rovlar repozitoriyga ko'chirildi
test(buyurtma): tranzaksiya testlari qo'shildi
chore(deps): kutubxonalar yangilandi
perf(qidiruv): indeks qo'shildi, 3x tezlashdi
| Turi | Ma'nosi | Versiyaga ta'siri |
|---|---|---|
feat | Yangi imkoniyat | MINOR |
fix | Xato tuzatish | PATCH |
docs | Hujjatlar | Yo'q |
style | Formatlash | Yo'q |
refactor | Qayta yozish | Yo'q |
perf | Tezlik | PATCH |
test | Testlar | Yo'q |
chore | Texnik ishlar | Yo'q |
Moslik buziladigan o'zgarish:
feat(api)!: javob formati JSON ga o'zgartirildi
BREAKING CHANGE: endi XML qo'llab-quvvatlanmaydi.
Mijozlar Accept sarlavhasini yangilashi kerak.
! va BREAKING CHANGE - MAJOR versiyani oshiradi.
Konvensional kommitlar - foydali standart, lekin har bir loyihaga kerak emas.
Kichik loyihada oddiy tushunarli xabar yetarli. Katta jamoada esa avtomatlashtirish uchun juda qulay.
Imzolangan teglar #
# GPG kalit bilan
git tag -s v1.0.0 -m "Imzolangan reliz"
# Tekshirish
git tag -v v1.0.0
Ochiq loyihalarda foydalanuvchilar relizni haqiqatan siz chiqarganingizni tekshirishi mumkin bo'ladi.
Ichki loyihalarda odatda kerak emas.
Reliz tekshiruv ro'yxati #
| Qadam | Bajarildi |
|---|---|
| Barcha testlar o'tdi | |
| CHANGELOG yangilandi | |
| Versiya raqami fayllarda yangilandi | |
| Hujjatlar yangilandi | |
| Migratsiyalar test bazasida sinaldi | |
| Zaxira nusxa olindi | |
| Teg yaratildi va push qilindi | |
| GitHub Release chiqarildi | |
| Jamoa xabardor qilindi |
- Loyihangizda
git tag -a v1.0.0 -m "Birinchi reliz"qiling. git show v1.0.0bilan teg ma'lumotini ko'ring.- Yengil teg ham yarating va farqni solishtiring.
- Ikkita kommit qiling va
v1.1.0tegini qo'ying. git log v1.0.0..v1.1.0 --onelinebilan farqni ko'ring.git push origin --tagsbilan teglarni yuboring.- GitHub da Release yarating va tavsif yozing.
CHANGELOG.mdfayl yarating va ikkala versiyani yozing.git describe --tagsni ishga tushiring va natijani tushuntiring.v1.0.0dan hotfix tarmog'ini yarating.
Xulosa #
- Teg - kommitga qo'yilgan doimiy nom, tarmoqdan farqli o'laroq siljimaydi.
- Relizlar uchun har doim annotatsiyali teg (
-a) ishlating. git pushteglarni yubormaydi ---tagsyoki--follow-tagskerak.- SemVer:
MAJOR.MINOR.PATCH- moslik, imkoniyat, tuzatish. 0.x.y- loyiha hali barqaror emas degani.git describe --tagsjoriy holatni oxirgi tegga nisbatan ko'rsatadi.- GitHub Releases tegga tavsif va yuklab olinadigan fayl qo'shadi.
- CHANGELOG.md - foydalanuvchi uchun o'zgarishlar jurnali.
- Konvensional kommitlar CHANGELOG ni avtomatlashtirish imkonini beradi.
- Chop etilgan tegni hech qachon boshqa kommitga ko'chirmang.
Keyingi bo'limda ish oqimi modellarini ko'rib chiqamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.