Mavzu
Dars xulosasi
- Versiya boshqaruvi tizimlari (VCS) kodga kiritilgan har bir o'zgarishni (kim, qachon, nima qildi) aniq qayd etib boruvchi vositadir.
- Git — butun dunyo bo'ylab eng ko'p qo'llaniladigan taqsimlangan (Distributed VCS) tizim bo'lib, u Linux muallifi Linus Torvalds tomonidan yaratilgan.
- Git fayllarni 3 ta bosqichda boshqaradi: Working Directory (ishchi papka), Staging Area (tayyorgarlik maydoni) va Git Repository (tarix saqlanuvchi
.gitombori). git configorqali muallif ismi va emaili o'rnatiladi,git initorqali yangi repozitoriya hosil qilinadi.git statusloyihaning joriy holatini ko'rsatadi,git addfayllarni tayyorgarlik maydoniga kiritadi,git commitesa o'zgarishlarni tarixga muhrlaydi.- Har bir commit noyob SHA-1 hash kodiga ega bo'lib, u loyihaning ma'lum bir vaqtdagi to'liq «fotosurati» (snapshot) hisoblanadi.
.gitignorefayli orqali maxfiy kalitlar (.env), loglar (*.log) va yirik kutubxonalar (node_modules/) Git tarixiga tushishining oldi olinadi.
Qo'shimcha ma'lumot
1. Nega Git «Snapshot» (Fotosurat) deyiladi?
Eski versiya boshqaruvi tizimlari (masalan, CVS) fayllarning faqatgina «o'zgargan qatorlari farqini» (delta-based) saqlagan. Git esa har bir commit qilinganda loyihaning o'sha paytdagi butun holatini bir zumlik fotosurat (snapshot) sifatida yozib qo'yadi. Agar biror fayl o'zgarmagan bo'lsa, Git uni qayta saqlamaydi, balki oldingi mavjud nusxasiga havola (link) qo'yadi. Shu sababli Git boshqa barcha tizimlarga qaraganda yuzlab barobar tezroq ishlaydi.
2. Staging Area (Index) nima uchun kerak?
Nega o'zgarishlarni to'g'ridan-to'g'ri commit qilib bo'lmaydi? Tasavvur qiling, siz bir vaqtning o'zida ikkita vazifani bajardingiz:
- Sayt dizaynidagi xatoni to'g'riladingiz (
style.css). - Yangi login funksiyasini yozdingiz (
login.js). Staging Area sizga ularni alohida-alohida commit qilish imkonini beradi:
git add style.css→git commit -m "fix: dizayndagi xato tuzatildi"git add login.js→git commit -m "feat: yangi login sahifasi qo'shildi"Bu loyiha tarixining toza va mantiqiy bo'lishini ta'minlaydi.
3. Commit xabarlari madaniyati (Conventional Commits)
DevOps jamoalarida commit izohlarini to'g'ri yozish juda muhim. Standart qolip:
feat:yangi imkoniyat (feature) qo'shilganda.fix:xatolik (bug) tuzatilganda.docs:hujjatlar yoki izohlar o'zgarganda.refactor:kod mantig'i o'zgarmagan holda arxitekturasi yaxshilanganda.chore:yordamchi sozlamalar yoki.gitignoreo'zgarganda.
4. SHA-1 Hash nima?
Har bir commit oxirida c3b2f1a8e9d0... ko'rinishidagi 40 belgili kod paydo bo'ladi. Bu kommitning barcha ma'lumotlari (fayllar mazmuni, sana, muallif, oldingi commit kodi) asosida hisoblangan matematik xeshdir. Agar kod ichida bitta nuqta o'zgarsa ham, butun xesh butunlay boshqa songa aylanadi — bu Git tarixini soxtalashtirib bo'lmasligini kafolatlaydi!
Atamalar lug'ati
| Atama | Ma'nosi |
|---|---|
| VCS (Version Control System) | Fayllar va kodlarga kiritilgan o'zgarishlar tarixini avtomatik yozib boruvchi tizim. |
| Git | Yuqori tezlik va barqarorlikka ega zamonaviy taqsimlangan versiya boshqaruvi tizimi. |
| Working Directory | Kompyuter diskida foydalanuvchi bevosita ko'rib tahrirlayotgan fayllar hududi. |
| Staging Area (Index) | Keyingi commitga kiritilishi rejalashtirilgan o'zgarishlar saqlanadigan oraliq maydon. |
| Commit | Loyihaning ma'lum bir vaqtdagi to'liq holatini Git tarixiga muhrlovchi operatsiya. |
| SHA-1 Hash | Har bir commit uchun generatsiya qilinadigan noyob 40 belgili kriptografik identifikator. |
| Untracked | Ishchi papkada mavjud, lekin hali Git kuzatuviga (git add) olinmagan yangi fayllar. |
| .gitignore | Git tomonidan e'tiborsiz qoldirilishi kerak bo'lgan fayl va papkalar andozalari ro'yxati. |
Bilasizmi?
- Git tizimi 2005-yilda Linus Torvalds tomonidan atigi 10 kun ichida ishlab chiqilgan bo'lib, uning maqsadi Linux yadrosi ustida butun dunyo dasturchilari bilan birgalikda ishlash bo'lgan.
- Git so'zi inglizcha so'zlashuv tilida «yoqimsiz, injiq odam» degan ma'noni anglatadi — Linus o'z xarakteriga hazil tarzida shu nomni tanlagan.
- Agar siz
.gitpapkasini loyiha ichidan o'chirib yuborsangiz, loyihaning butun versiyalar tarixi bir zumda yo'qoladi va u oddiy papkaga aylanib qoladi.
Topshiriqlar
1. Git versiyasini va sozlamalarni tekshirish oson
git --version va git config --list buyruqlarini bajarib, tizimingizda Git o'rnatilganini hamda foydalanuvchi ma'lumotlarini aniqlang. Kutiladigan natija: Git versiyasi va konfiguratsiya parametrlari ekranda chiqadi.
2. Yangi Git repozitoriyasini ochish oson
my_project nomli katalog yarating, uning ichiga o'ting va git init orqali uni rasmiy Git omboriga aylantiring. Kutiladigan natija: «Initialized empty Git repository in ...» xabari chiqadi.
3. Loyiha holatini tekshirish oson
Yangi repozitoriy ichida git status buyrug'ini bering va hech qanday kommitlar yo'qligini ko'ring. Kutiladigan natija: «On branch main / No commits yet / nothing to commit» holati ko'rinadi.
4. Yangi fayl yaratish va holatni kuzatish oson
echo "DevOps asoslari" > README.md faylini yarating va git status da u qanday rangda (Untracked) ko'rinishini tahlil qiling. Kutiladigan natija: Fayl qizil rangda «Untracked files» bo'limida chiqadi.
5. Staging maydoniga qo'shish o'rta
git add README.md buyrug'ini bajaring va git status orqali faylning yashil rangga (Changes to be committed) aylanganini ko'ring. Kutiladigan natija: Fayl muvaffaqiyatli Staging Area'ga o'tadi.
6. Birinchi commitni amalga oshirish o'rta
git commit -m "docs: README fayli yaratildi" buyrug'i bilan o'zgarishlarni tarixga yozing. Kutiladigan natija: Commit yaratiladi, SHA xesh kodi va o'zgargan fayllar statistikasi chiqadi.
7. Tarixni ko'rish (git log) o'rta
git log va git log --oneline buyruqlarini bajarib, yaratilgan commit ma'lumotlarini (muallif, sana, izoh) o'rganing. Kutiladigan natija: Yaratilgan commit tarixi ro'yxati chiqadi.
8. Kod farqlarini tahlil qilish (git diff) o'rta
README.md fayliga yangi qator qo'shing va git diff buyrug'i orqali aynan qaysi qator qo'shilganini (yashil +) ko'ring. Kutiladigan natija: O'zgartirilgan qatorlar terminalda aniq rangli formatda aks etadi.
9. .gitignore faylini sozlash qiyin
Loyihangizda secrets.txt va app.log fayllarini yarating. Loyiha ildizida .gitignore ochib, ularni e'tiborsiz qoldirish qoidasini yozing va git status bilan tasdiqlang. Kutiladigan natija: Maxfiy fayllar git status da mutlaqo ko'rinmaydi.
10. Bir nechta fayllarni guruhlab commit qilish qiyin
app.py va config.json fayllarini yarating, git add . orqali barchasini birdaniga tayyorlang va «feat: dastlabki ilova fayllari qo'shildi» izohi bilan commit qiling. Kutiladigan natija: Bir nechta fayllar yagona commit snapshotiga birlashadi.
11. Staging maydonidan faylni qaytarish (restore) bonus
Faylni o'zgartirib git add qiling, so'ngra git restore --staged [fayl] buyrug'i yordamida uni commit qilmasdan yana oddiy ishchi hududga qaytarishni amalda sinang. Kutiladigan natija: Fayl Staging maydonidan yana oddiy o'zgargan holatga qaytadi.
O'zingizni tekshiring
- Working Directory, Staging Area va Git Repository o'rtasidagi farqlar nimada?
git add .bilangit add filenamening qanday farqi bor?- Nima uchun har bir commitga tushunarli va standart qolipdagi izoh (commit message) yozish shart?
.gitignorefayliga qanday fayllar kiritilishi qat'iy tavsiya etiladi?git log --onelinebuyrug'i qachon qulay hisoblanadi?
Uyga vazifa
- O'z kompyuteringizda
my_first_git_reponomli papka oching va uni Git omboriga aylantiring. - Ichida
main.py,notes.txtvatemp.logfayllarini yarating. .gitignorefaylini yaratib,*.logkengaytmali barcha fayllarni e'tiborsiz qoldiring.- Qolgan fayllarni 2 ta alohida mantiqiy commit bilan Git tarixiga yozing.
git lognatijasini daftaringizga ko'chirib yozing (taxminiy vaqt: 25 daqiqa).
