Git nima? Version Control nima uchun kerak, Git tarixi
Muammodan boshlaylik
Tanish manzara:
loyiha/
├── sayt.zip
├── sayt_eski.zip
├── sayt_yangi.zip
├── sayt_yangi_TOGRI.zip
├── sayt_yangi_TOGRI_oxirgi.zip
└── sayt_yangi_TOGRI_oxirgi_v2_ISHLAYDIGAN.zip
Va savollar:
- Kecha ishlagan kod bugun ishlamayapti. Nima o'zgardi?
- Ikki hafta oldingi versiyaga qanday qaytish mumkin?
- Hamkasbingiz bilan bitta faylni bir vaqtda o'zgartirdingiz. Kimning o'zgarishi qoladi?
- Yangi funksiyani sinab ko'rmoqchisiz, lekin ishlayotgan kodni buzib qo'yishdan qo'rqasiz.
Bularning hammasini hal qiladigan vosita — version control (versiyalarni boshqarish) tizimi. Eng mashhuri — Git.
Version control nima?
Version control system (VCS) — fayllardagi har bir o'zgarishni yozib boradigan tizim. U:
- Tarixni saqlaydi — har bir o'zgarish: kim, qachon, nima uchun
- Orqaga qaytarishga imkon beradi — istalgan oldingi holatga
- Parallel ishlashga imkon beradi — bir loyihada bir nechta yo'nalish (branch)
- Birlashtiradi — bir nechta odamning ishini bitta loyihaga
- Zaxira vazifasini bajaradi — har bir nusxa — to'liq tarix
Buni o'yindagi "saqlash nuqtalari" (save point) deb tasavvur qiling: har bir muhim qadamdan keyin saqlaysiz va xohlagan vaqtda istalgan nuqtaga qaytasiz.
●──────●──────●──────●──────● ← vaqt
v1 login savat to'lov bugun
qo'shildi (xato!)
↑
bu yerga qaytish — bir buyruq
Git — taqsimlangan tizim
Version control tizimlari ikki xil:
Markazlashgan (SVN, CVS) — tarix bitta serverda. Server ishlamasa — hech kim commit qila olmaydi; server yo'qolsa — tarix yo'qoladi.
Taqsimlangan (Git, Mercurial) — har bir dasturchida to'liq nusxa: barcha fayllar va butun tarix.
Markazlashgan Taqsimlangan (Git)
┌────────┐ ┌────────┐
│ Server │ │ GitHub │ (to'liq tarix)
└───┬────┘ └───┬────┘
┌─────┼─────┐ ┌─────┼─────┐
▼ ▼ ▼ ▼ ▼ ▼
siz ali vali ┌────┐┌────┐┌────┐
(faqat fayllar) │siz ││ali ││vali│ (har birida
└────┘└────┘└────┘ to'liq tarix)
Natija:
- Internetsiz ishlash mumkin — commit, tarix, branch — hammasi lokal
- Juda tez — tarixni ko'rish uchun serverga murojaat shart emas
- Har bir nusxa — to'liq zaxira
Git tarixi
2005 yil. Linux yadrosi (Linux kursida ko'rgansiz) — dunyodagi eng katta ochiq loyihalardan biri, minglab dasturchilar. Ular BitKeeper degan pullik tizimdan foydalanardi. Kelishmovchilik tufayli bepul litsenziya bekor qilindi.
Linus Torvalds — Linux yaratuvchisi — mavjud tizimlarning hech biri talablarga javob bermasligini ko'rib, o'zi yangisini yozdi. Taxminan 10 kunda Git ning birinchi ishlaydigan versiyasi tayyor bo'ldi. Talablar:
- Juda tez bo'lishi
- Taqsimlangan bo'lishi
- Minglab parallel branch larni ko'tara olishi
- Ma'lumotlar buzilishidan himoyalangan bo'lishi
Bugun Git — standart: so'rovnomalarga ko'ra dasturchilarning 95% dan ortig'i Git dan foydalanadi.
[!INFO] "Git" — inglizcha jargon so'z ("noxush odam"). Linus hazillashib: "Men o'z loyihalarimni o'zimning nomim bilan ataganman — avval Linux, endi Git", degan.
Git va GitHub — farqi
Ko'p yangi boshlovchilar ularni chalkashtiradi:
| Git | GitHub | |
|---|---|---|
| Nima | Dastur — kompyuteringizda | Veb-xizmat — internetda |
| Vazifasi | Versiyalarni boshqarish | Git repozitoriylarini saqlash va hamkorlik |
| Internetsiz | ✅ Ishlaydi | ❌ |
| Muqobillar | Mercurial, SVN | GitLab, Bitbucket, Gitea |
Git — bu "fotoapparat", GitHub — bu "fotoalbomlar saqlanadigan ijtimoiy tarmoq". Git siz GitHub ishlamaydi; GitHub siz Git — mutlaqo ishlaydi. Batafsil — 4-darsda.
Git qanday ishlaydi — asosiy g'oya
Git har bir commit da loyihaning suratini (snapshot) oladi:
Commit 1 Commit 2 Commit 3
┌─────────┐ ┌─────────┐ ┌─────────┐
│ index │ │ index │ │ index* │ ← o'zgardi
│ style │ ──→ │ style* │ ──→ │ style │ ← o'zgarmadi (havola)
│ app.js │ │ app.js │ │ app.js │
└─────────┘ └─────────┘ └─────────┘
O'zgarmagan fayllar qayta saqlanmaydi — oldingi versiyaga havola qilinadi. Shuning uchun tarix juda ixcham.
Har bir commit ning noyob identifikatori bor — hash:
a3f9c2b8e1d4f6a7b9c0d2e4f6a8b0c2d4e6f8a0
40 belgili SHA-1 hash — commit mazmunidan hisoblanadi. Agar tarixdagi biror narsa o'zgartirilsa (yoki disk buzilsa) — hash mos kelmay qoladi va Git buni darhol sezadi. Odatda qisqa shakli ishlatiladi: a3f9c2b.
Git qayerda ishlatiladi
- Har qanday dasturlash loyihasi — veb, mobil, backend, ML
- Hujjatlar — bu DevDocs saytining o'zi ham Git da (Markdown fayllar)
- Konfiguratsiyalar — server sozlamalari, dotfiles
- Deploy — CI/CD tizimlari Git dagi o'zgarishlarga javob beradi (Docker kursi, 41-dars)
- Ochiq kodli dunyo — Linux, React, VS Code — hammasi GitHub da
Ish e'lonlarida "Git" ni ko'pincha yozishmaydi ham — chunki u o'z-o'zidan tushuniladi, xuddi "kompyuterdan foydalana olish" kabi.
Nima uchun shunday?
Nima uchun fayllarni nusxalash (sayt_v2.zip) yetarli emas?
Chunki nusxa faqat "nima" ni saqlaydi, lekin "nima o'zgardi", "kim", "nima uchun" ni emas. 50 ta zip faylda qaysi qatorni kim va qachon o'zgartirganini topish — soatlar ishi; Git da — bitta buyruq (git log -p, git blame). Nusxalar parallel ishni birlashtira olmaydi — Git esa ikki odamning o'zgarishlarini avtomatik qo'shadi. Va nusxalar joy egallaydi, tartibsizlashadi, yo'qoladi. Git — tarixni tuzilgan, qidiriladigan va ishonchli qiladi. Bu nafaqat qulaylik — jamoaviy dasturlashning asosi.
Xulosa
Eslab qoling:
- Version control — fayllar o'zgarishi tarixini boshqarish tizimi
- Git — taqsimlangan: har bir nusxada to'liq tarix, internetsiz ishlaydi
- 2005 yil, Linus Torvalds, Linux yadrosi uchun yaratilgan
- Git — dastur; GitHub — Git repozitoriylari uchun veb-xizmat
- Commit — loyihaning surati; hash — noyob identifikator
- Git — sanoat standarti, har bir dasturchi uchun majburiy ko'nikma
Keyingi dars
2-dars: Git o'rnatish — Windows, Mac, Linux. Git Bash, Terminal sozlash