Git nima? Version Control nima uchun kerak, Git tarixi

~10 daq · Git · Kirish va O'rnatish

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