Git-repozitoriy — bu loyihaning manba kodi ombori bo'lib, unda Git ishlanma davomida fayllardagi har bir o'zgarishni kuzatib boradi. Repozitoriy commitlar, shoxlar va teglarning to'liq tarixini o'z ichiga oladi, bu dasturchilarga kod ustida birgalikda ishlash imkonini beradi. Git, 2024 ma'lumotlariga ko'ra, repozitoriy har qanday versiyani nazorat qilish tizimining asosidir va dunyo bo'ylab millionlab loyihalarda qo'llaniladi.
Asosiy fikrlar
Git repozitoriyi — bu versiyani nazorat qilish tizimi loyiha fayllarining o'zgarish tarixini tavsiflovchi meta-ma'lumotlar va obyektlarni saqlaydigan ma'lumotlar tuzilmasidir. Dasturchi git init buyrug'i bilan repozitoriyni ishga tushirganda, Git loyihaning ildizida yashirin .git papkasini yaratadi.
Bu papka ichida tizimning ishlashi uchun zarur bo'lgan barcha obyektlar, havolalar va konfiguratsiya fayllari joylashgan. Repozitoriy muayyan joylashuvga bog'liq emas — dasturchi uni mahalliy ravishda yaratib, keyin masofaviy serverga ulashi mumkin.
Git taqsimlangan repozitoriy modelidan foydalanadi: loyihaning har bir ishtirokchisi o'z kompyuterida to'liq tarix nusxasiga ega. Bu shuni anglatadiki, operatsiyalarning aksariyati — commit, tarixni ko'rish, shoxlar yaratish — serverga murojaat qilmasdan mahalliy ravishda bajariladi.
Git hujjatlariga ko'ra, taqsimlangan arxitektura tizimni nosozliklarga chidamli qiladi: agar server ishdan chiqsa, har qanday mahalliy repozitoriy loyihaning to'liq tarixini tiklash uchun manba bo'lishi mumkin.
Mahalliy repozitoriy — bu dasturchining kompyuteridagi loyiha nusxasidir. U barcha commitlar, shoxlar va teglar tarixini o'z ichiga oladi va commit, branch, merge va rebase operatsiyalarini tarmoqqa ulanmasdan bajarish imkonini beradi.
Masofaviy repozitoriy serverda joylashtirilgan va jamoa a'zolari uchun sinxronizatsiya nuqtasi bo'lib xizmat qiladi. Dasturchilar o'z o'zgarishlarini git push buyrug'i bilan yuboradi va boshqalarning o'zgarishlarini git pull buyrug'i bilan oladi.
Mahalliy va masofaviy repozitoriy o'rtasidagi bog'lanish remote origin — Git konfiguratsiyasida saqlanadigan server URL-i orqali o'rnatiladi. Bitta mahalliy repozitoriy bir nechta masofaviy repozitoriylarga ulanishi mumkin, bu fork'lar bilan ishlashda foydalidir.
Bunday modelning asosiy afzalligi — dasturchi oflayn rejimda kod ustida ishlashi va o'zgarishlarni faqat natijani yuborishga tayyor bo'lganda sinxronlashtirishi mumkin.
| Xususiyat | Mahalliy | Masofaviy |
|---|---|---|
| Joylashuv | Dasturchining kompyuterida | Serverda (GitHub, GitLab) |
| Tarmoqsiz kirish | Barcha operatsiyalarga to'liq kirish | Ulanishsiz mavjud emas |
| Sinxronizatsiya | Masofaviyga push/pull | Mahalliydan push qabul qiladi |
| Zaxira nusxa | Ma'lumot yo'qotilishidan himoyalanmagan | Serverda zaxira nusxalar bilan saqlanadi |
Gitning saqlash modeli boshqa versiyani nazorat qilish tizimlaridan tubdan farq qiladi. Versiyalar o'rtasidagi o'zgarishlar ro'yxatini (deltalarni) saqlash o'rniga, Git har bir commit vaqtida loyihaning barcha fayllarining to'liq suratlarini saqlaydi.
Repozitoriydagi har bir obyekt noyob SHA-1 xeshi bilan identifikatsiya qilinadi. Agar fayl mazmuni commitlar o'rtasida o'zgarmagan bo'lsa, Git yangi obyekt yaratmaydi, balki mavjudini qayta ishlatadi — bu joyni tejaydi.
Git to'rt turdagi obyektdan foydalanadi: blob (fayl mazmuni), tree (katalog tuzilishi), commit (meta-ma'lumotlar bilan surat) va tag (commitga nomlangan havola). Barcha obyektlar .git/objects papkasida saqlanadi.
Git Internals ma'lumotlariga ko'ra, Gitning obyekt modeli ma'lumotlarning yaxlitligini ta'minlaydi: fayl mazmunining har qanday o'zgarishi yangi xeshga olib keladi, bu esa tarixni yashirin o'zgartirishni imkonsiz qiladi.
.git papkasi — repozitoriyning yuragidir. Usiz Git o'zgarishlarni kuzata olmaydi, oddiy katalog esa faqat fayllar to'plami bo'lib qoladi. Ushbu papkaning tuzilishini tushunish repozitoriy bilan bog'liq muammolarni tashxislashga yordam beradi.
HEAD fayli alohida e'tiborga loyiqdir. Oddiy holatda u shoxga ramziy havolani o'z ichiga oladi, masalan ref: refs/heads/main. Detached HEAD holatida u to'g'ridan-to'g'ri commitga ishora qiladi — bu yangi commitlar hech qanday shoxga bog'lanmaganligini anglatadi.
Git repozitoriyi bilan ishlash dasturchi har kuni bajaradigan asosiy operatsiyalar to'plamini o'z ichiga oladi. Har bir operatsiya repozitoriy holatini o'zgartiradi, yangi obyektlar qo'shadi yoki havolalarni siljitadi.
Push va pull operatsiyalari — masofaviy serverga ulanishni talab qiladigan yagona operatsiyalardir. Boshqa barcha operatsiyalar to'liq mahalliy ravishda bajariladi, bu katta tarix hajmida ham yuqori ish tezligini ta'minlaydi.
Repozitoriydagi har bir fayl to'rt holatdan o'tadi: untracked (kuzatilmaydi), modified (o'zgartirilgan), staged (tayyorlangan) va committed (tasdiqlangan). Git faqat git add orqali aniq qo'shilgan yoki allaqachon commit tarixida bo'lgan fayllarni kuzatadi.
Ushbu modelni tushunish Git bilan samarali ishlashning kalitidir. Dasturchi commitga faqat o'zgartirilgan fayllarning bir qismini tanlab tayyorlashi mumkin, aniq tavsif bilan mantiqiy to'liq commitlar yaratadi.
Masofaviy repozitoriylar odatda veb-interfeys, kirishni boshqarish tizimi va birgalikda ishlash uchun qo'shimcha vositalarni taqdim etadigan ixtisoslashtirilgan platformalarda joylashtiriladi.
Platforma tanlovi jamoa hajmiga, maxfiylik talablariga va zarur integratsiyalarga bog'liq. Mobil ishlanma uchun keng jamiyat qo'llab-quvvatlashi va iOS va Android uchun CI/CD vositalari bilan integratsiyasi tufayli ko'pincha GitHub tanlanadi.
Amaliy stsenariyni ko'rib chiqamiz: dasturchi mavjud repozitoriyni klonlaydi, yangi shox yaratadi, o'zgarishlar kiritadi va ularni serverga yuboradi. Har bir buyruq repozitoriyning turli komponentlari bilan ishlashni namoyish etadi.
# Masofaviy repozitoriyning klonlanishi
git clone https://github.com/user/mobile-app.git
# Loyiha katalogiga o'tish
cd mobile-app
# Yangi feature shoxini yaratish va unga o'tish
git checkout -b feature/auth
# O'zgartirilgan fayllar holatini tekshirish
git status
# Barcha o'zgarishlarni staging area-ga qo'shish
git add .
# Tavsif bilan commit yaratish
git commit -m "Add authentication module"
# O'zgarishlarni masofaviy repozitoriyga yuborish
git push origin feature/auth
git status buyrug'i — kundalik ishda eng foydalilaridan biridir. Qaysi fayllar o'zgartirilganini, qaysilari commitga tayyorligini va qaysilari umuman Git tomonidan kuzatilmasligini ko'rsatadi.
Repozitoriy tarixini tahlil qilish uchun turli formatlash bayroqlari bilan git log buyrug'i ishlatiladi. U commitlarning xronologiyasini, ularning mualliflarini, sanalarini va SHA-1 identifikatorlarini ko'rsatadi.
# Shoxlar grafigining vizualizatsiyasi bilan tarixni ko'rish
git log --oneline --graph --all
# Muayyan commitdagi o'zgarishlarni ko'rish
git show a1b2c3d
# Joriy holatni oxirgi commit bilan solishtirish
git diff HEAD
# Muayyan fayl tarixini ko'rish
git log --follow src/MainActivity.kt
--graph bayrog'i shoxlanishlarning ASCII-grafikini ko'rsatadi, bu bir nechta shoxlarda faol ishlaydigan repozitoriylarda ayniqsa foydalidir. Tez-tez nashr qilinadigan mobil loyihalar uchun vizual grafik ishlanma tuzilishini tez baholashga yordam beradi.
Tez-tez beriladigan savollar
Repozitoriy — bu o'zgarishlar tarixiga ega kodning texnik omboridir. Loyiha — kengroq tushuncha bo'lib, repozitoriy, vazifalarni boshqarish tizimi, hujjatlar va ishlanma jarayonlarini o'z ichiga oladi. Bitta loyihada bir nechta repozitoriy bo'lishi mumkin.
GitHub veb-interfeysi orqali New tugmasini bosib yangi repozitoriy yarating. Nom, tavsif va kirish darajasini belgilang. Keyin repozitoriyni mahalliy mashinaga klonlang yoki mavjud mahalliy repozitoriy bilan git remote add origin orqali bog'lang.
Agar masofaviy repozitoriy serverdan o'chirilgan bo'lsa, lekin kamida bitta dasturchining mahalliy nusxasi bo'lsa, repozitoriy qayta tiklanishi mumkin. Yangi masofaviy repozitoriy yaratish va barcha tarix bilan mahalliy nusxadan git push --force bajarish kifoya.
Fork — bu boshqa birovning repozitoriyining sizning hisobingizdagi nusxasidir. Siz to'liq tarix nusxasini olasiz va asl nusxaga ta'sir qilmasdan istalgan o'zgarishlarni kiritishingiz mumkin. Fork'lar Pull Request orqali ochiq manbali loyihalarda qatnashish uchun ishlatiladi.
Obyektlarni siqish va erishib bo'lmaydigan ma'lumotlarni o'chirish uchun git gc dan foydalaning. git filter-branch yoki git filter-repo orqali katta fayllarni tarixdan o'chiring. Ikkilik fayllari bo'lgan loyihalar uchun Git LFS (Large File Storage) ni ko'rib chiqing.
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.