IlmHamroh
JavaScript Full-stack/7-qism. Git va GitHub asoslari1/36-dars16 daqiqa
Mundarija (32)

Versiya nazorati nima va nega aynan Git: fayllar tarixini boshqarish

Qisqacha: Versiya nazorati (VCS) — fayllarning har bir holatini "surat" qilib saqlaydigan tizim. Undan istalgan eski holatga qaytish, kim nimani o'zgartirganini ko'rish va birga ishlash mumkin. Git — eng ko'p ishlatiladigan taqsimlangan VCS: tarixning to'liq nusxasi har bir kompyuterda turadi. GitHub esa Git repolarini internetda saqlaydigan sayt — Git'ning o'zi emas.

Bu darsda

  • Versiya nazorati qaysi muammoni hal qilishini tushuntirasiz.
  • Repo, commit va tarix nima ekanini haqiqiy Git chiqishida taniysiz.
  • Markazlashgan va taqsimlangan versiya nazoratini solishtira olasiz.
  • Nega dunyoda aynan Git tanlanganini bilasiz.
  • Git va GitHub farqini aniq ayta olasiz.

Oldin bilishingiz kerak: Fayl va papka nomlash qoidalari, Terminalda harakatlanish, Birinchi deploy.

1. Nega bu kerak?

Fayl nomlash darsidagi manzarani eslang: hisobot-final.docx, hisobot-final-2.docx, hisobot-ENG-OXIRGISI.docx. O'shanda "dasturchilar buni Git bilan hal qiladi" degan edik. Endi o'sha va'dani bajaramiz.

Bu muammo sizda ham bor, faqat boshqa nom bilan. Portfolio'ni bezaganda eski CSS'ni asosiy-eski.css deb sayt/ dan tashqariga ko'chirgan edingiz (Portfolio'ni CSS bilan bezash). Saytni uch marta brauzer orqali qayta yukladingiz. Endi savol: 04-qism oxiridagi bosh sahifangiz qanday edi? Qaysi kuni menyu havolasini o'zgartirgandingiz? Javob hech qayerda yozilmagan.

«Bahor» choyxonasida ham shunday voqea bo'ldi. Jasur aka menyudagi narxlarni yangiladi. Bir hafta o'tib mehmon eski narx haqida so'radi. Eski fayl yo'q — ustidan yozilgan. Rustam aka esa shu kuni bron sahifasidagi matnni tuzatgan edi. Ikkalasi o'z nusxasini yuborgan edi, va biri ikkinchisining ishini o'chirib yubordi.

Bu darsda uch savolga javob beramiz: fayllar tarixini qanday saqlash kerak, nega butun dunyo buning uchun Git ishlatadi va Git bilan GitHub nimasi bilan farq qiladi. Buyruqlarni keyingi darslardan boshlab o'zingiz yozasiz. Bugun — tushuncha va xarita.

2. Versiya nazorati nima?

2.1 Qo'lda versiya saqlash

Ko'pchilik birinchi bo'lib shunday yo'l tutadi — papkani nusxalaydi:

text
kurs/
├── sayt/
├── sayt-eski/
├── sayt-yangi/
├── sayt-yangi-2/
└── sayt-JASUR-AKA-TUZATGAN/

Bu ishlaydi, lekin to'rtta muammosi bor:

  1. Qaysi biri oxirgisi? Nomlar buni aytmaydi. Sana yozsangiz ham, "nima o'zgardi?" degan savol javobsiz qoladi.
  2. Nima o'zgardi? Ikki papkani solishtirish uchun har bir faylni ochib, ko'z bilan qarash kerak.
  3. Kim o'zgartirdi va nega? Papka nomida bunga joy yo'q.
  4. Birga ishlash. Ikki kishi bir faylni o'zgartirsa, kimningdir ishi yo'qoladi.

Ustiga-ustak, har nusxa butun papkani takrorlaydi. Rasmlar ko'p bo'lsa, disk tez to'ladi.

2.2 Versiya nazorati tizimi

Versiya nazorati tizimi (version control system, VCS) — fayllarning har bir saqlangan holatini, kim va nima uchun o'zgartirganini yozib boradigan dastur. U siz uchun "nusxa papkalar" ishini qiladi, lekin tartibli va aniq.

Kompyuter o'yinini tasavvur qiling. Qiyin joydan oldin o'yinni saqlaysiz. Yutqazsangiz — o'sha nuqtadan qaytadan boshlaysiz. Stylelint va Prettier darsida commit'ni aynan shunday tanishtirgan edik: "tarixdagi bitta saqlash nuqtasi". Versiya nazorati — shunday saqlash nuqtalarining butun ro'yxati. Farqi bitta: o'yinda odatda oxirgi saqlashgina qoladi, bu yerda esa hammasi turadi.

2.3 Uchta asosiy so'z: repo, commit, tarix

Versiya nazoratida uchta so'z doim uchraydi. Ularni haqiqiy misolda ko'ramiz. Biz «Bahor» saytining qisqa nusxasini Git bilan saqlab, to'rt marta "saqlash nuqtasi" qo'ydik. Tarixni shu buyruq ko'rsatadi:

bash
git log --oneline

Terminalda:

text
b09fa2a (HEAD -> main) Aloqa: sahifa yarat
9084599 Bosh sahifa: aloqa havolasini qo'sh
f4238e7 Menyu: osh narxini qo'sh
dab5bff Bahor: sayt tuzilmasini yarat

Bu buyruqni o'zingiz Birinchi repo darsida yozasiz — hozir faqat o'qing.

  • Commit (commit) — loyihaning bir lahzadagi to'liq surati va unga yozilgan qisqa izoh. Har qator — bitta commit. Eng yangisi tepada.
  • Tarix (history) — commitlar zanjiri. Pastdan tepaga o'qiladi: avval sayt tuzilmasi, keyin osh narxi, keyin aloqa.
  • Repozitoriy (repository, qisqasi repo) — loyiha papkasi va uning butun tarixi birga. «Bahor» papkasi Git'ga topshirilgach, u repo bo'ldi.

Qator boshidagi b09fa2a kabi g'alati belgilar — commitning "pasport raqami". Git har bir commitga noyob nom beradi. U 40 belgidan iborat, lekin odatda boshidagi 7 tasi yetarli. Qanday hisoblanishini Git ichkaridan darsida ko'ramiz.

Eng yangi commit yonidagi (HEAD -> main) — "siz hozir shu yerdasiz" belgisi. Uni HEAD va refs darsida ochamiz. Xabarlarning shakli ham tasodifiy emas: avval soha (Menyu), keyin nima qilish kerakligi (osh narxini qo'sh). Bu kelishuvni Yaxshi commit darsida o'rganamiz.

Bitta commitni to'liq ko'rsak, VCS nimalarni eslab qolishi aniq bo'ladi:

bash
git log -1
text
commit b09fa2a4c0fcdfbbeb4cfe62c4a078798c72c11a (HEAD -> main)
Author: Aziz Karimov <aziz@example.com>
Date:   Thu Oct 1 10:12:00 2026 +0500

    Aloqa: sahifa yarat

Qo'lda nusxalashdagi to'rt muammodan uchtasiga javob shu yerda: kim (Author), qachon (Date) va nima uchun (xabar). "Nima o'zgardi?" degan savolga Git ham javob beradi — buni O'zgarishlarni ko'rish darsida ko'rasiz.

2.4 Vaqt mashinasi

Eng muhim imkoniyat — istalgan eski holatni qaytarib ko'rish. Menyu sahifasi hozir shunday:

bash
cat menyu/index.html
text
<h1>Menyu</h1>
<p>Osh — 35 000 so'm</p>

Birinchi commitda esa u qanday edi? Git'dan so'raymiz:

bash
git show dab5bff:menyu/index.html
text
<h1>Menyu</h1>

Narx qatori hali yo'q edi. Hech qanday menyu-eski.html saqlamadik — Git o'zi esladi. Jasur akaning "eski narx qancha edi?" savoliga endi bir buyruq bilan javob beriladi.

Tarixni rasm bilan ham ko'rsatish mumkin. Har doira — bitta commit, chiziq — ular orasidagi bog'lanish:

gitGraph
  commit id: "dab5bff tuzilma"
  commit id: "f4238e7 osh narxi"
  commit id: "9084599 havola"
  commit id: "b09fa2a aloqa"

Nimaga qarang: tarix — bitta to'g'ri chiziq, chapdan o'ngga o'sadi. Chap chetda main yozuvi bor — bu tarmoqning nomi. U haqida Branch nima darsida gaplashamiz. Hozircha: bitta loyiha — bitta chiziq.

Tekshirib ko'ring: git log --oneline natijasida qaysi commit eng birinchi qilingan — yuqoridagimi yoki pastdagimi? Nega shunday tartib qulay?

Javob

Pastdagisi — dab5bff Bahor: sayt tuzilmasini yarat. Git eng yangi commitni tepada ko'rsatadi, chunki ko'pincha bizni oxirgi o'zgarishlar qiziqtiradi. Tarix uzun bo'lsa, eng eskisi pastda qolib ketadi, eng kerakligi esa darhol ko'rinadi.

3. Markazlashgan va taqsimlangan versiya nazorati

VCS'lar ikki oilaga bo'linadi. Farqi — tarix qayerda saqlanishida.

3.1 Markazlashgan VCS

Markazlashgan VCS (centralized VCS) da tarix faqat bitta serverda turadi. Har bir dasturchi kompyuterida faylning faqat oxirgi holati bor. Commit qilish, tarixni ko'rish — hammasi serverga so'rov yuborish orqali. Mashhur vakili — SVN (Subversion), undan oldin CVS.

Kutubxonani tasavvur qiling. Kitob bitta, u javonda turadi. O'qish uchun kutubxonaga borasiz. Kutubxona yopiq bo'lsa yoki yonib ketsa — kitob yo'q.

Muammolari ham shundan:

  • Internet yoki server o'chsa — commit qilib bo'lmaydi, tarixni ko'rib bo'lmaydi.
  • Server diski buzilsa va zaxira bo'lmasa — butun tarix yo'qoladi.
  • Har bir amal tarmoq orqali ketgani uchun sekinroq.

3.2 Taqsimlangan VCS

Taqsimlangan VCS (distributed VCS) da har bir dasturchida tarixning to'liq nusxasi bor. Commit sizning kompyuteringizda bo'ladi, internet shart emas. Keyin, xohlagan paytda, commitlarni boshqalar bilan almashasiz. Vakillari — Git va Mercurial.

Kutubxona o'xshatishida — har bir o'quvchida kitobning to'liq nusxasi bor. Biri yo'qotsa ham, boshqalarida turibdi.

flowchart TB
  subgraph M["Markazlashgan (SVN)"]
    S1[("Server:<br/>butun tarix")]
    A1["Ali:<br/>faqat oxirgi holat"] --> S1
    B1["Malika:<br/>faqat oxirgi holat"] --> S1
  end
  subgraph T["Taqsimlangan (Git)"]
    S2[("GitHub:<br/>butun tarix")]
    A2[("Ali:<br/>butun tarix")] <--> S2
    B2[("Malika:<br/>butun tarix")] <--> S2
  end

Nimaga qarang: "Markazlashgan" ramkada tarix bitta silindrda (baza belgisi), "Taqsimlangan" ramkada esa — uchalasida. U yerdagi GitHub ham "yana bitta nusxa" xolos. Jamoa kelishib olgani uchun u markaz vazifasini bajaradi, lekin texnik jihatdan Ali'ning kompyuteridagi nusxadan ustun emas.

Diqqat: "Taqsimlangan" degani "o'z-o'zidan zaxiralangan" degani emas. Repo faqat sizning noutbukingizda bo'lsa va noutbuk buzilsa — tarix ham ketadi. Nusxa boshqa joyda ham turishi uchun uni GitHub'ga yuborish kerak. Buni Remote darsida qilamiz.

Tekshirib ko'ring: Malika poyezdda, internet yo'q. U SVN ishlatadigan jamoada bo'lsa, commit qila oladimi? Git ishlatadigan jamoada-chi?

Javob

SVN'da — yo'q: commit serverga yoziladi, server esa internetsiz ko'rinmaydi. Git'da — ha: commit Malikaning kompyuteridagi to'liq repoga yoziladi. Internet paydo bo'lgach, u commitlarini GitHub'ga yuboradi.

4. Nega aynan Git?

4.1 Qisqa tarix

Git'ni 2005-yilda Linus Torvalds yozgan — Linux yadrosining muallifi. Linux yadrosi ustida minglab dasturchi ishlaydi. Ular o'shangacha BitKeeper degan pullik taqsimlangan tizimdan bepul foydalanardi. 2005-yilda bu ruxsat bekor qilindi va Linux jamoasi o'z vositasini yaratishga majbur bo'ldi.

Maqsadlar aniq edi: juda tez bo'lsin, minglab odam parallel ishlasin, tarix buzilmasin. Git shu talablar bilan tug'ildi. Bugun uni Git jamoasi rivojlantiradi. Kursdagi misollar Git 2.54 da sinalgan.

4.2 Git'ning kuchli tomonlari

  • Tez. Deyarli hamma amal kompyuteringizda bajariladi — tarmoqni kutmaydi.
  • Oflayn ishlaydi. Commit, tarix, eski holat — hammasi internetsiz.
  • Branch'lar arzon. Bir loyihada bir nechta yo'nalishni parallel sinash mumkin. Buni Branch nima darsida ko'rasiz.
  • Tarix himoyalangan. Har bir commitning nomi uning mazmunidan hisoblanadi. Eski commitni sezdirmay o'zgartirib bo'lmaydi.
  • Bepul va ochiq. Istalgan kompyuterda, istalgan loyihada.

4.3 Sanoat standarti

Eng muhim sabab — hamma Git ishlatadi. Stack Overflow'ning 2022-yilgi so'rovnomasida 70 mingdan ortiq dasturchidan versiya nazorati haqida so'ralgan. Git'ni 93.87% tanlagan, ikkinchi o'rindagi SVN'ni esa — atigi 5.18%.

Bu siz uchun nimani anglatadi? Qaysi kompaniyaga bormang, Git'ni bilishingiz kutiladi. Ish e'lonlarida u ko'pincha alohida yozilmaydi ham — "o'z-o'zidan ma'lum" deb hisoblanadi. Ochiq loyihalar, frilans buyurtmalar, deploy xizmatlari — hammasi Git repodan boshlanadi.

4.4 Git keladigan o'zgarish haqida

Git rivojlanishda davom etyapti. Rasmiy "BreakingChanges" hujjatida keyingi katta versiya — Git 3.0 da yangi repolarda standart branch nomi main bo'lishi yozilgan. Hozircha u master. Git 2.54 ning o'zi ham shu haqda ogohlantiradi. Buni keyingi darsda bir sozlama bilan hal qilamiz.

Tekshirib ko'ring: Kichik jamoa "biz SVN'ni yaxshi bilamiz, Git'ga o'tmaymiz" dedi. Ularga Git'ning qaysi ikki afzalligini birinchi aytgan bo'lardingiz?

Javob

Masalan: oflayn ishlash (server yoki internet yo'qligida ham commit qilinadi) va tarixning har bir kompyuterda to'liq nusxasi (server buzilsa ham tarix yo'qolmaydi). Uchinchi kuchli dalil — yangi xodimlar deyarli hammasi Git'ni biladi, SVN'ni emas.

5. Git va GitHub — bir narsa emas

5.1 Farqi

Boshlovchilar ko'pincha ikkalasini aralashtiradi. Aslida ular butunlay boshqa narsalar:

Git GitHub
Nima Dastur Veb-sayt (xizmat)
Qayerda Sizning kompyuteringizda Internetda
Vazifasi Tarixni saqlaydi Repolarni saqlaydi va ulashadi
Internetsiz Ishlaydi Ochilmaydi

GitHub — Git repolarini internetda saqlaydigan sayt. Ustiga jamoa ishi uchun qulayliklar qo'shadi: kodni muhokama qilish (Pull Request), vazifalar ro'yxati (Issues), avtomatik tekshiruv (Actions), sayt joylash (Pages). Ularning hammasini shu qismda o'rganamiz.

O'xshatish: telefoningizdagi kamera va galereya — Git. Suratlar telefonda yashaydi, internet shart emas. Bulutli foto xizmati — GitHub. U o'sha suratlarning nusxasini saqlaydi, boshqalarga ko'rsatadi va telefon yo'qolsa ham ularni asraydi.

GitHub yagona emas. GitLab va Bitbucket ham xuddi shu ishni qiladi. Git hammasida bir xil — siz o'rganadigan buyruqlar uchalasida ishlaydi.

5.2 Siz allaqachon commit qilgansiz

Birinchi deploy darsida fayllarni GitHub'ga brauzer orqali yuklab, Commit changes tugmasini bosgansiz. O'shanda "commit — o'zgarishni tarixga saqlash, Git qismida o'rganamiz" degan edik.

O'sha tugma haqiqiy Git commit yaratgan. Faqat u sizning kompyuteringizda emas, GitHub serverida bajarilgan. Portfolio'ni har safar qayta yuklaganingizda (CSS: 05-qism yakuni kabi izoh bilan) yana bitta commit qo'shilgan. Ya'ni login.github.io reposida allaqachon tarix bor.

Farqi shundaki, kompyuteringizdagi portfolio/ papkasida hali hech qanday tarix yo'q. 07-qismda aynan shuni tuzatamiz: tarix kompyuteringizda boshlanadi, keyin GitHub'dagi tarix bilan bog'lanadi.

Tekshirib ko'ring: Do'stingiz aytdi: "Internet yo'q, shuning uchun bugun Git'da ishlay olmayman". U haqmi?

Javob

Yo'q. Git kompyuterdagi dastur — commit qilish, tarixni ko'rish, eski holatga qaytish internetsiz ishlaydi. Internet faqat GitHub bilan almashish uchun kerak: commitlarni yuborish yoki boshqalarnikini olish.

6. Oldingi qismlardagi "Git'da o'rganamiz" va'dalari

Kursda Git'ga o'n uchdan ortiq marta ishora qilgan edik. Ularning har biri 07-qismda javob topadi:

Qayerda ko'rgansiz Nima edi Javobi
Fayl nomlash hisobot-final-2.docx Shu dars
Qator oxiri CRLF, .gitattributes .gitattributes
Fayl qidirish .gitignore, node_modules/ .gitignore
VS Code Source Control paneli Uch hudud
Qayerda ko'rgansiz Nima edi Javobi
Vim core.editor Git'ni sozlash
HTML kod uslubi Formatlashni alohida qiling Yaxshi commit
Birinchi deploy Commit changes Birinchi repo
Portfolio, landing Qo'lda yuklash Avtomatik deploy

Yana ikkitasi. Stylelint va Prettier darsida lint-staged "Git bilan ishlaydi" degan edik — uni Husky va lint-staged darsida ulaymiz. Tailwind darslarida esa ikki narsa uchragan: Tailwind .gitignore dagi fayllarni skanerlamaydi va yangilash vositasi terminalda fatal: not a git repository deb yozgan. Endi ikkalasi ham tushunarli bo'ladi — ikkinchisini shu darsning "Ko'p uchraydigan xatolar" bo'limida ko'ramiz.

Qismning yo'li qisqacha shunday:

flowchart LR
  A["Lokal repo:<br/>commit, tarix"] --> B["Branch va<br/>merge"]
  B --> C["GitHub bilan<br/>bog'lash"]
  C --> D["Pull Request,<br/>review"]
  D --> E["Actions:<br/>avtomatik deploy"]

Nimaga qarang: birinchi uch-to'rt dars faqat sizning kompyuteringizda o'tadi. GitHub keyinroq keladi — avval Git'ning o'zini tushunamiz.

7. Ko'p uchraydigan xatolar

7.1 "Git — bu GitHub"

Yuqorida ko'rdik: Git — dastur, GitHub — sayt. Bu chalkashlik intervyuda yomon taassurot qoldiradi. "Git'ni bilaman" deganda terminalda ishlay olishni nazarda tuting, faqat brauzerda fayl yuklashni emas.

7.2 "Commit — bu faylni saqlash"

Ctrl + S faylni diskka yozadi. Commit esa butun loyihaning holatini tarixga yozadi. Ular har xil: faylni o'n marta saqlab, bitta commit qilishingiz mumkin. Commit qilmagan o'zgarishingiz tarixda yo'q — Git uni qaytarib bera olmaydi.

7.3 "Git — zaxira nusxa"

Git tarixni saqlaydi, lekin repo faqat bitta kompyuterda bo'lsa, u zaxira emas. Disk buzilsa — repo ham ketadi. Zaxira bo'lishi uchun nusxa boshqa joyda ham turishi kerak, masalan GitHub'da.

7.4 Oddiy papkada Git buyrug'i

Tailwind darsida ko'rgan xabar aynan shu. Git repo bo'lmagan papkada Git buyrug'ini yozsak:

bash
git status
text
fatal: not a git repository (or any of the parent directories): .git

Tarjimasi: "halokatli xato: bu Git repozitoriysi emas (ota papkalarning birortasi ham emas): .git".

Nega aynan shu so'zlar? Git repoda yashirin .git papkasi bo'ladi — tarix aynan o'sha yerda saqlanadi. Git buyruq olganda joriy papkadan boshlab yuqoriga qarab .git ni qidiradi: avval shu papkada, keyin otasida, keyin uning otasida — diskning ildizigacha. Hech qayerda topmasa — shu xabar chiqadi. fatal so'zi qo'rqitmasin: u faqat "buyruq bajarilmadi" degani, hech narsa buzilmagan.

Tuzatish: to'g'ri papkaga o'ting (cd) yoki, agar bu yangi loyiha bo'lsa, uni repo qiling. Buni Birinchi repo darsida qilamiz.

8. Mashqlar

1-mashq (oson): Git'mi, GitHub'mi?

Har bir gap qaysi biriga tegishli: Git, GitHub yoki ikkalasiga?

  1. Internetsiz ishlaydi.
  2. Pull Request orqali kodni muhokama qilish mumkin.
  3. Loyihaning har bir holatini commit sifatida saqlaydi.
  4. Saytni Pages orqali internetga chiqaradi.
  5. Uning o'rniga GitLab yoki Bitbucket ishlatsa bo'ladi.

Ishora: «Git va GitHub — bir narsa emas» bo'limidagi jadvalga qarang.

Yechim
  1. Git — kompyuterdagi dastur.
  2. GitHub — bu saytning qulayligi.
  3. Git. (GitHub'dagi repo ham Git bilan saqlanadi, lekin commitni Git yaratadi.)
  4. GitHub (GitHub Pages).
  5. GitHub — GitLab va Bitbucket uning muqobillari. Git esa uchalasida bir xil.

2-mashq (o'rta): «Bahor» muammolari

Jasur akaning jamoasida uch voqea bo'ldi. Har biriga versiya nazoratining qaysi imkoniyati yordam berishini yozing:

  1. Mehmon o'tgan haftadagi osh narxini so'radi, fayl esa ustidan yozilgan.
  2. Sayt birdan buzildi. Kim va qachon nimani o'zgartirganini hech kim bilmaydi.
  3. Otabek va Rustam aka bir vaqtda bir faylni tahrirlab, bir-birining ishini o'chirib yuborishdi.

Ishora: commitda nima saqlanishini eslang — git log -1 natijasidagi uch qator va "Vaqt mashinasi" bo'limi.

Yechim
  1. Eski holatga qaytish. Har bir commit butun loyihaning suratini saqlaydi. git show dab5bff:menyu/index.html kabi buyruq eski faylni ko'rsatadi.
  2. Tarix: kim, qachon, nima uchun. Har commitda muallif (Author), sana (Date) va xabar bor. Buzilishdan oldingi oxirgi commitni topib, farqini ko'rish mumkin.
  3. Birga ishlash. Git ikki kishining o'zgarishini birlashtiradi. Ikkalasi bir qatorni o'zgartirgan bo'lsa ham, jimgina o'chirmaydi — "conflict" deb ogohlantiradi. Buni Merge darslarida ko'rasiz.

3-mashq (qiyin): Server yonib ketdi

Ikki jamoa bor. Birinchisi SVN ishlatadi, ikkinchisi — Git va GitHub. Ikkalasining serverida bir kechada disk buzildi, zaxira yo'q edi. Ertalab har bir jamoada nima qoladi? Tarixni tiklash mumkinmi?

Ishora: «Markazlashgan va taqsimlangan versiya nazorati» bo'limidagi diagrammaga qarang — tarix qayerlarda turibdi?

Yechim

SVN jamoasi: tarix faqat serverda edi. Dasturchilarda fayllarning oxirgi holati qoladi, lekin butun tarix — kim, qachon, nima uchun — yo'qoladi. Oxirgi holatdan yangi server boshlanadi, tarix noldan.

Git jamoasi: har bir dasturchida tarixning to'liq nusxasi bor. Yangi repo ochib, istalgan dasturchining nusxasini unga yuborish kifoya — tarix to'liq tiklanadi. Faqat hali hech kimga yetib bormagan eng oxirgi commitlar bo'lsa, ular o'sha commitni qilgan odamning kompyuterida turadi.

4-mashq: Portfolio qadami — tarixingizni toping

Portfolio'ingizning "yashirin" tarixi allaqachon bor — GitHub'da. Uni topamiz.

  1. Git Bash'ni oching va git --version yozing. Git Dastur o'rnatish darsida o'rnatilgan edi — versiya chiqishi kerak.
  2. Brauzerda https://github.com/login/login.github.io/commits/main manzilini oching (ikkala login o'rniga o'z loginingiz).
  3. Nechta commit bor? Ularning xabarlarini daftarga yozing (masalan Birinchi versiya, CSS: 05-qism yakuni).
  4. Kompyuteringizdagi portfolio/ papkasini oching. Unda "eski nusxa" turidagi fayllar bormi (asosiy-eski.css kabi)? Ro'yxatini yozing.
Yechim
  1. Git Bash'da natija shunga o'xshash bo'ladi (sizda versiya boshqacha bo'lishi mumkin):
text
git version 2.54.0.windows.1

command not found chiqsa, Dastur o'rnatish darsidagi 2-mashqni takrorlang.

2–3. Kurs bo'yicha yurgan bo'lsangiz, kamida uch-to'rt commit bo'ladi: 04-qismdagi Birinchi versiya, 05-qismdagi CSS: 05-qism yakuni va 06-qismdagi yangilanishlar. Har biri — Commit changes tugmasi bosilgan payt. Bu ro'yxatni saqlab qo'ying: Remote darsida GitHub'dagi shu tarixni kompyuteringizdagi yangi tarix bilan bog'laymiz.

  1. Odatda asosiy-eski.css topiladi (05-qism yakuniy loyihasidan). Git bilan bunday fayllar kerak bo'lmaydi: eski holat tarixda turadi. Lekin hozircha o'chirmang — Birinchi repo darsidan keyin qaror qilamiz.

9. Real ishda

  • Har bir kompaniya. Kod faqat versiya nazorati orqali o'zgaradi. Birinchi ish kuningizda sizga repo manzilini berishadi va "clone qiling" deyishadi (Remote).
  • Code review. Kod asosiy tarixga tushishidan oldin hamkasblar uni commitlar va farqlar orqali tekshiradi (Pull Request).
  • Deploy. Zamonaviy saytlar "commit qilindi — sayt yangilandi" tamoyilida ishlaydi. Qism oxirida portfolio'ingiz ham shunday bo'ladi (Avtomatik deploy).
  • Intervyuda so'raladi: "Git va GitHub farqi nima?", "Taqsimlangan VCS nima?", "Commit nima?" Bu darsdan keyin uchalasiga ham javob bera olasiz.
  • Faqat dasturchilar emas. Dizaynerlar, texnik yozuvchilar, hatto qonun matnlari ustida ishlaydiganlar ham Git ishlatadi. Matnli fayl bo'lsa — Git undan unumli foydalanadi.

Xulosa

  • Versiya nazorati — fayllarning har bir holatini kim, qachon va nima uchun o'zgartirgani bilan saqlaydigan tizim.
  • Repo — loyiha va uning tarixi; commit — loyihaning bir lahzadagi surati va izohi; tarix — commitlar zanjiri.
  • Markazlashgan VCS'da tarix bitta serverda, taqsimlangan VCS'da — har bir kompyuterda to'liq.
  • Git — tez, oflayn ishlaydigan, bepul taqsimlangan VCS va sanoat standarti.
  • Git — kompyuterdagi dastur, GitHub — repolarni internetda saqlaydigan sayt.

Keyingi dars: Git'ni o'rnatish va birinchi sozlash — Git'ga kimligingizni aytamiz va sozlamalarini tekshiramiz.

Manbalar

  • Pro Git kitobi: "About Version Control" va "A Short History of Git" — git-scm.com/book
  • Git hujjati: "BreakingChanges" (Git 3.0 rejasi) — git-scm.com/docs/BreakingChanges
  • Stack Overflow Developer Survey 2022, "Version control" bo'limi — survey.stackoverflow.co/2022
Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
Versiya nazorati nima va nega aynan Git: fayllar tarixini boshqarish — IlmHamroh