Main Branch (oldingi Master) — bu barqaror ishlab chiqarish kodini o'z ichiga olgan asosiy Git filiali bo'lib, joylashtirishga tayyor. Maindagi har bir commit loyihaning reliz versiyasiga mos keladi va filialning o'zi to'g'ridan-to'g'ri o'zgarishlardan himoyalangan va butun jamoa uchun yagona haqiqat manbai bo'lib xizmat qiladi. GitHub, 2020 ma'lumotlariga ko'ra, 2020 yil oktyabridan boshlab standart filial master o'rniga main deb nomlanadi.
Asosiy fikrlar
Main Branch (yoki Master — repozitoriy sozlamalariga qarab) — har qanday Git repozitoriyini ishga tushirishda yaratiladigan standart filialdir. Bu loyihaning asosiy filiali bo'lib, ishlab chiqarishga joylashtirishga tayyor kodni o'z ichiga oladi.
Kundalik ish yangi funksiyalar bilan qaynaydigan developdan farqli o'laroq, main loyihaning oynasidir. Maindagi kodning har bir versiyasi to'liq sikldan o'tgan: feature filialida ishlab chiqish, developda integratsiya, release filialida relizga tayyorgarlik va yakuniy testlash. Shundan keyingina o'zgarishlar mainga kiradi.
Asosiy prinsip: main har doim barqaror bo'lishi kerak. Agar mainda xato topsa, bu navbatdan tashqari hotfixni talab qiladi. Shuning uchun professional loyihalarda main branch protection rules bilan tasodifiy o'zgarishlardan himoyalangan.
Git Bookga ko'ra, main maxsus xususiyatlarga ega filial emas, balki konvensiyaga ko'ra asosiy hisoblanadigan oddiy commit havolasidir. Git tizim darajasida main va boshqa har qanday filial o'rtasida farq qilmaydi.
Tarixiy jihatdan, Gitdagi standart filial master deb nomlangan. 2020 yil iyun oyida Black Lives Matter harakati IT sanoatida master va slave atamalariga e'tibor qaratdi. GitHub standart filial uchun main atamasiga o'tishni e'lon qildi.
2020 yil oktyabridan boshlab GitHubdagi barcha yangi repozitoriyalar main filiali bilan yaratiladi. GitLab va Bitbucket ham mainni standart nom sifatida qo'llab-quvvatlashni joriy qildi. Git 2.28 (iyul 2020) standart filial nomini sozlash uchun init.defaultBranch variantini qo'shdi.
Texnik jihatdan, mavjud filialni masterdan mainga qayta nomlash oddiy operatsiyadir. Asosiy qiyinchilik — CI/CD konfiguratsiyalari, hujjatlar va dasturchilarning mahalliy repozitoriyalaridagi barcha havolalarni yangilash.
Mavjud repozitoriyada filial nomini o'zgartirish uchun bajaring:
# Masterni mahalliy mainga qayta nomlash
git branch -m master main
# Uzoqdagi repozitoriyani yangilash
git push -u origin main
# Serverdagi eski masterni o'chirish
git push origin --delete master
# Serverda HEADni yangilash
# (GitHub veb interfeysi orqali: Settings → Branches → Default branch)
Git Flow va GitHub Flow main filialining rolini turlicha belgilaydi. Modelni tanlash jamoa hajmi, reliz chastotasi va kod barqarorligi talablariga bog'liq.
| Xususiyat | Git Flow | GitHub Flow |
|---|---|---|
| Mainning roli | Faqat reliz versiyalari | Markaziy rivojlanish filiali |
| Qo'shimcha filiallar | Develop, Release, Hotfix | Faqat feature filiallari |
| Reliz chastotasi | 1-4 haftada bir marta | Kuniga bir necha marta |
| Murakkablik | Yuqori | Past |
| Qachon tanlash | Reliz siklli mobil ilovalar | Uzluksiz joylashtirish bilan veb xizmatlar |
Mobil ilova ishlab chiqish uchun standart Git Flow hisoblanadi, chunki App Store va Google Play'da ilovalarni nashr qilish qat'iy reliz sikllariga ega. GitHub Flow kuniga bir necha marta joylashtirish imkoniyatiga ega veb loyihalar uchun ko'proq mos keladi.
GitHub Flowda develop filiali mavjud emas. Barcha feature filiallari to'g'ridan-to'g'ri maindan yaratiladi va tugatilgandan so'ng Pull Request orqali qayta birlashtiriladi. Mainga har bir birlashish avtomatik ravishda ishlab chiqarishga joylashtirishni ishga tushiradi. Bu model yuqori test avtomatlashtirish va jamoa intizomini talab qiladi.
GitHub Flowda develop filiali mavjud emas. Barcha feature filiallari to'g'ridan-to'g'ri maindan yaratiladi va tugatilgandan so'ng Pull Request orqali qayta birlashtiriladi. Mainga har bir birlashish avtomatik ravishda ishlab chiqarishga joylashtirishni ishga tushiradi. Bu model yuqori test avtomatlashtirish va jamoa intizomini talab qiladi.
Branch protection main uchun — har qanday tijorat loyihasida majburiy sozlamadir. Busiz tasodifiy push tugallanmagan kodni ishlab chiqarishga yuborishi yoki barcha foydalanuvchilar uchun ishlayotgan ilovani buzishi mumkin.
Barcha olti qoidani sozlash — 10 000+ foydalanuvchiga ega mobil loyihalar uchun standartdir. Kichik loyihalar uchun birinchi uchta qoida yetarli.
Main himoyasi darajasi loyiha miqyosiga bog'liq. Startap minimal himoya bilan ishlashi mumkin, enterprise ilova esa maksimal cheklovlarni talab qiladi.
Teglash (tagging) — maindagi aniq commitlarga nomlangan havolalar yaratish amaliyotidir. Har bir teg ishlab chiqarishga chiqarilgan ilova versiyasiga mos keladi. Bu disk raskadrovka yoki patch uchun istalgan oldingi relizga tez o'tish imkonini beradi.
Mobil ilova ishlab chiqishda teg nomlash standarti — SemVer (Semantic Versioning): v1.2.3, bu yerda birinchi raqam — asosiy versiya (breaking changes), ikkinchi — kichik (yangi funksiyalar), uchinchi — patch (tuzatishlar).
Teg release filialining mainga birlashishidan so'ng yaratiladi. Bu commit keyin CI/CDda quriladi, imzolanadi va ilova do'koniga yuboriladi. Agar tegda xato topilsa, shu tegdan hotfix filiali yaratiladi.
# Annotatsiyalangan reliz tegini yaratish
git tag -a v2.4.1 -m "Release version 2.4.1"
# Tegni serverga jo'natish
git push origin v2.4.1
# Repozitoriyadagi barcha teglarni ko'rish
git tag -l "v2.*"
# Muayyan tegdan hotfix filialini yaratish
git checkout -b hotfix/crash-fix v2.4.1
Git Flowda filial iyerarxiyasini tushunish — birgalikdagi ishlanmani to'g'ri tashkil qilish asosidir. Har bir filial turi o'z manbasiga, maqsadiga va birlashtirish qoidalariga ega.
Muhim qoida: feature hech qachon to'g'ridan-to'g'ri mainga birlashtirilmaydi. feature → develop → release → main — to'g'ri birlashish zanjiri. Bu qoidani buzish butun Git Flow modelini ma'nosiz qiladi.
Stsenariyni ko'rib chiqaylik: jamoa v2.5.0 relizini tayyorlashni tugatdi. Release filiali tekshirildi va mainga birlashishga tayyor. Birlashishdan so'ng teg yaratiladi va reliz nashr etiladi.
# Mainga o'tish va yangilash
git checkout main
git pull origin main
# Tekshirilgan release filialini birlashtirish
git merge --no-ff release/2.5.0
# Reliz tegini yaratish
git tag -a v2.5.0 -m "Release 2.5.0 - Payment integration"
# Main va tegni serverga jo'natish
git push origin main --tags
--no-ff (no fast-forward) bayrog'i, birlashish ko'rsatkichni oddiy siljitish orqali amalga oshirilishi mumkin bo'lsa ham, birlashish commitini yaratishni kafolatlaydi. Bu o'zgarishlar release filialidan kelganligi haqidagi ma'lumotni saqlaydi, bu esa tarix tahlilini osonlashtiradi.
Ishlab chiqarishda kritik xato topilsa, jarayon oddiy relizdan farq qiladi. Hotfix maindan yaratiladi va tuzatilgandan so'ng ham mainga, ham developga birlashtiriladi.
Ishlab chiqarishda kritik xato topilsa, jarayon oddiy relizdan farq qiladi. Hotfix maindan yaratiladi va tuzatilgandan so'ng ham mainga, ham developga birlashtiriladi.
# Maindan hotfix filialini yaratish
git checkout main
git checkout -b hotfix/2.5.1-crash-fix
# Tuzatish va commit
git add src/fix/
git commit -m "Fix crash on login screen"
# Hotfixni mainga qaytarish
git checkout main
git merge --no-ff hotfix/2.5.1-crash-fix
git tag -a v2.5.1 -m "Hotfix 2.5.1"
git push origin main --tags
# Hotfixni developga ham birlashtirish
git checkout develop
git merge --no-ff hotfix/2.5.1-crash-fix
git push origin develop
# Hotfix filialini o'chirish
git branch -d hotfix/2.5.1-crash-fix
Ko'p beriladigan savollar
Texnik jihatdan — ha, bu oddiy commit havolasi. Ammo amalda — yo'q, chunki main standart filialdir va ko'pchilik platformalar default branch qilib belgilangan filialni o'chirishga ruxsat bermaydi. O'chirish o'rniga yangi default branch yarating, keyin eskisini o'chiring.
Agar xato kritik bo'lmasa, oddiy jarayondan foydalaning: developdan feature filialini yarating, xatoni tuzating, kod ko'rib chiqishidan o'ting va keyingi reliz siklini kuting. Hotfix faqat foydalanuvchilar ishini bloklaydigan kritik xatolar uchun ishlatiladi.
main — kompyuteringizdagi mahalliy filial. origin/main — serverdagi uzoq filial holatining mahalliy keshi. git fetch buyrug'i origin/mainni yangilaydi, git pull esa o'zgarishlarni darhol mahalliy mainingizga birlashtiradi.
Butun repozitoriyani yangi papkaga ko'chirish uchun git clone dan foydalaning. Agar uzoq URLni o'zgartirish kerak bo'lsa, git remote set-url origin ni bajaring. Repozitoriyani ko'chirmasdan ishchi papkani o'zgartirish uchun git worktree add dan foydalaning.
Ha, hatto ikki kishilik jamoada ham main himoyasi oqlanadi. Noto'g'ri buyruq bilan tasodifiy push tarixni o'chirib tashlashi mumkin. Minimal himoya — to'g'ridan-to'g'ri pushlarni taqiqlash va PR talabi — sozlash uchun 5 daqiqa vaqt oladi va soatlab ma'lumotlarni tiklashning oldini oladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.