Tag — Git tarixidagi ma’lum commitga berilgan nomlangan reference bo‘lib, odatda release, milestone yoki muhim holatni belgilaydi. Branch yangi commitlar bilan oldinga ko‘chadi, tag esa yaratilgach o‘sha commitda qolishi kutiladi. v1.4.0 kabi nomlar dastur versiyasini aniq source snapshot bilan bog‘laydi.
Lightweight va annotated tag
Lightweight tag commitga oddiy pointerdir:
git tag v1.4.0
Annotated tag alohida Git obyekt yaratadi va tagger, sana, xabar hamda ixtiyoriy raqamli imzoni saqlaydi:
git tag -a v1.4.0 -m "Release 1.4.0"
Release uchun annotated tag ko‘proq kontekst beradi. Tag commitdan tashqari boshqa Git obyektini ham ko‘rsatishi mumkin, ammo odatiy foydalanish commitga bog‘lashdir.
Tagni yuborish
Lokal yaratilgan tag remote’ga barcha push bilan avtomatik ketmasligi mumkin. Muayyan tag:
git push origin v1.4.0
--tags barcha lokal taglarni yuboradi, --follow-tags esa push qilinayotgan commitlarga bog‘liq annotated taglarni qo‘shishi mumkin. Keraksiz eski taglarni ommaviy yuborishdan oldin ro‘yxat tekshiriladi.
Remote tagni o‘chirish reference’ni olib tashlaydi, boshqa clone’lardagi lokal tag avtomatik yo‘qolmaydi. Fetch sozlamasi o‘chirilgan taglarni prune qilishda branchlardan farqli xatti-harakatga ega bo‘lishi mumkin.
Imzolangan tag
Tag GPG yoki SSH kabi qo‘llab-quvvatlangan kalit bilan imzolanishi mumkin. Verify amali tag obyektining imzodan keyin o‘zgarmaganini va kalitga mosligini tekshiradi. Ishonch faqat kriptografik moslik emas; kalit aynan kerakli maintainerga tegishli ekanini ishonch zanjiri belgilaydi.
Imzolangan tag source autentikligini kuchaytiradi, lekin build artefakti aynan shu source’dan va xavfsiz pipeline’da yaratilganini o‘zi isbotlamaydi. Artefakt provenance va checksum alohida qatlamdir.
Versiyalash
Semantic Versioning ishlatilsa major, minor va patch raqamlari compatibility ma’nosini bildiradi. Git esa tag nomini semantik tekshirmaydi; release-final-new ham texnik jihatdan tag bo‘la oladi. Versiya siyosati loyiha tomonidan belgilanadi.
Tag nomini keyin boshqa commitga majburan ko‘chirish foydalanuvchida bir xil versiya nomi uchun turli source paydo qiladi. Release taglari immutable sifatida himoyalanadi. Xato release uchun yangi patch tag chiqarish aniqroq tarix saqlaydi.
CI/CD bilan bog‘lanish
Tag push release workflowini ishga tushirishi mumkin. Workflow tag formatini tekshiradi, test va build bajaradi, artefaktga ayni commit IDni qo‘shadi. Ishonchsiz foydalanuvchining tag yaratish huquqi release credentialiga bevosita yo‘l bermasligi kerak; protected tag va environment approval ishlatiladi.
Tagning o‘zgarmasligi
Git texnik jihatdan mavjud tag nomini boshqa commitga ko‘chirishga to‘sqinlik qilmaydi, ammo ommaga chiqarilgan tagni qayta belgilash versiya ishonchliligini buzadi. Foydalanuvchining lokal repositorysida eski tag qolishi mumkin va oddiy fetch uni kutilmaganda almashtirmaydi. Shu sababli xato release uchun avvalgi tagni ko‘chirish o‘rniga yangi patch versiya chiqariladi. Release artefakti tagdan build qilinsa, build muhiti, dependency lock fayli va toolchain versiyasi ham qayta tiklanadigan bo‘lishi kerak. Tag imzosi commit kim tomonidan tasdiqlanganini tekshiradi, lekin undagi kod xavfsiz ekanini o‘zi kafolatlamaydi.
Tag nomlash qoidasi avtomatlashtirish uchun barqaror bo‘lishi kerak. Masalan, v2.4.1 shakli release pipeline tomonidan semantik versiya sifatida tekshiriladi. Tasodifiy yoki sinov taglari production chiqarishini boshlamasligi uchun trigger filtri va himoyalangan muhit tasdig‘i ishlatiladi.
Bog‘liq tushunchalar
Git, release, semantic versioning, annotated tag, digital signature, commit, CI/CD