15-bo‘lim

Teglar va relizlar

Yengil va annotatsiyali teglar, semantik versiyalash, GitHub Releases va o'zgarishlar jurnali.

🕑 15 daqiqa o‘qish 📄 853 so‘z 👁 5 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Teg nima?
  2. Ikki xil teg
  3. Eski kommitga teg qo'yish
  4. Teglarni yuborish
  5. Teglarni o'chirish
  6. Semantik versiyalash
  7. Teg bilan ishlash
  8. Hotfix ish oqimi
  9. GitHub Releases
  10. CHANGELOG.md
  11. Konvensional kommitlar
  12. Imzolangan teglar
  13. Reliz tekshiruv ro'yxati
  14. Xulosa

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.

Terminal
git tag
Natija
v1.0.0
v1.1.0
v1.1.1
v2.0.0

Ikki xil teg #

Terminal
# Yengil teg - shunchaki nom
git tag v1.0.0

# Annotatsiyali teg - to'liq obyekt
git tag -a v1.0.0 -m "Birinchi barqaror reliz"
YengilAnnotatsiyali
Nima saqlaydiFaqat kommit xeshiMuallif, sana, xabar, imzo
Git obyektiYo'qHa, alohida obyekt
QachonVaqtinchalik belgiRelizlar uchun
Relizlar uchun har doim -a

Annotatsiyali tegda kim va qachon reliz chiqarganini ko'rish mumkin:

Terminal
git show v1.0.0

Yengil tegda bu ma'lumot yo'q.

Terminal
git show v1.0.0
Natija
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 #

Terminal
git log --oneline
Natija
c9d2e71 Yakuniy tuzatishlar
8f3a1d0 Savat mantiqi
5a8b3f0 Bosh sahifa
Terminal
git tag -a v0.9.0 5a8b3f0 -m "Beta versiya"

Teglarni yuborish #

git push teglarni yubormaydi

Bu ko'p uchraydigan chalkashlik. Teglarni alohida yuborish kerak:

Terminal
# Bitta teg
git push origin v1.0.0

# Barcha teglar
git push origin --tags

# Faqat annotatsiyalilar (tavsiya etiladi)
git push origin --follow-tags
Terminal
# Doimiy sozlash
git config --global push.followTags true

Teglarni o'chirish #

Terminal
# Lokal
git tag -d v1.0.0

# Serverdan
git push origin --delete v1.0.0
Chop etilgan tegni o'zgartirmang

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.

2 . 4 . 1 MAJOR - moslik buzildi MINOR - yangi imkoniyat qo'shildi PATCH - xato tuzatildi Yuqori daraja oshsa, quyidagilari nolga qaytadi: 2.4.1 → 3.0.0
Versiya raqami foydalanuvchiga yangilanish xavfini aytadi
O'zgarishMisolYangi versiya
Xato tuzatildiNarx yaxlitlash1.2.31.2.4
Yangi imkoniyatHisobot sahifasi1.2.41.3.0
Eski kod ishlamay qoladiAPI o'zgardi1.3.02.0.0
Natija
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 #

Terminal
# 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
Natija
v1.1.0-14-g8f3a1d0

Bu "v1.1.0 dan keyin 14 ta kommit, oxirgisi 8f3a1d0" degani.

git describe avtomatlashtirish uchun

Bu buyruq CI/CD skriptlarida versiya raqamini avtomatik aniqlash uchun juda qulay:

Terminal
VERSIYA=$(git describe --tags --always)
echo "Yig'ilmoqda: $VERSIYA"

Hotfix ish oqimi #

Terminal
# 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

MaydonNima yoziladi
Tagv1.1.0 (mavjudini tanlang yoki yangi yarating)
Titlev1.1.0 - Hisobotlar moduli
DescriptionO'zgarishlar ro'yxati
AssetsYig'ilgan fayllar (.zip, .exe)
Pre-releaseBeta bo'lsa belgilang
Terminal
# 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-notes

GitHub 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:

MARKDOWN
# 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'limlar
Bo'limQachon
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:

Natija
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
TuriMa'nosiVersiyaga ta'siri
featYangi imkoniyatMINOR
fixXato tuzatishPATCH
docsHujjatlarYo'q
styleFormatlashYo'q
refactorQayta yozishYo'q
perfTezlikPATCH
testTestlarYo'q
choreTexnik ishlarYo'q

Moslik buziladigan o'zgarish:

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

Bu majburiy emas

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 #

Terminal
# GPG kalit bilan
git tag -s v1.0.0 -m "Imzolangan reliz"

# Tekshirish
git tag -v v1.0.0
Qachon kerak?

Ochiq loyihalarda foydalanuvchilar relizni haqiqatan siz chiqarganingizni tekshirishi mumkin bo'ladi.

Ichki loyihalarda odatda kerak emas.

Reliz tekshiruv ro'yxati #

Chiqarishdan oldin
QadamBajarildi
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
Amaliy topshiriq
  1. Loyihangizda git tag -a v1.0.0 -m "Birinchi reliz" qiling.
  2. git show v1.0.0 bilan teg ma'lumotini ko'ring.
  3. Yengil teg ham yarating va farqni solishtiring.
  4. Ikkita kommit qiling va v1.1.0 tegini qo'ying.
  5. git log v1.0.0..v1.1.0 --oneline bilan farqni ko'ring.
  6. git push origin --tags bilan teglarni yuboring.
  7. GitHub da Release yarating va tavsif yozing.
  8. CHANGELOG.md fayl yarating va ikkala versiyani yozing.
  9. git describe --tags ni ishga tushiring va natijani tushuntiring.
  10. v1.0.0 dan 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 push teglarni yubormaydi - --tags yoki --follow-tags kerak.
  • SemVer: MAJOR.MINOR.PATCH - moslik, imkoniyat, tuzatish.
  • 0.x.y - loyiha hali barqaror emas degani.
  • git describe --tags joriy 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.

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.