Git va GitHub

Git va GitHub nima?

Har qanday dasturchi ertami-kechmi kodini saqlash, o'zgarishlarini kuzatish va boshqalar bilan birgalikda ishlash muammosiga duch keladi. Aynan shu muammolarni Git nomli versiya nazorati tizimi va GitHub nomli bulutli platforma hal qiladi. Bu darsda ular nima ekanini, bir-biridan farqini va asosiy tushunchalarni oddiy tilda o'rganamiz.

Versiya nazorati (version control) nima?

Versiya nazorati tizimi (inglizcha Version Control System, qisqacha VCS) — bu fayllaringizdagi o'zgarishlarni vaqt bo'ylab kuzatib boruvchi va istalgan oldingi holatga qaytish imkonini beruvchi dasturdir. Oddiy qilib aytganda, u loyihangizning har bir muhim holatini suratga oladi va bularni saqlab qo'yadi.

Ko'pchilik yangi boshlovchilar VCS'siz ishlashga harakat qilib, fayllarni qo'lda nusxalaydi. Natijada papkalar quyidagi ko'rinishga keladi:

loyiha/
loyiha-yangi/
loyiha-yangi-2/
loyiha-oxirgi/
loyiha-oxirgi-ROSTDAN-oxirgi/
loyiha-ishlaydigan-versiya/

Bu yondashuv juda tez chalkashlikka olib keladi: qaysi papkada nima o'zgargani, qaysi biri ishlayotgani va nima uchun o'zgartirilgani hech kimga ma'lum bo'lmaydi. Versiya nazorati aynan shu muammoni yo'qotadi — barcha versiyalar bitta joyda, izohlar bilan, tartibli saqlanadi.

Versiya nazorati sizga quyidagilarni beradi:

Versiya nazorati faqat dasturchilar uchun emas. Uni kitob yozuvchilar, tarjimonlar, dizaynerlar — matnli fayllar bilan ishlaydigan har kim ishlatishi mumkin. Ammo eng ko'p u dasturlash sohasida qo'llaniladi.

Git nima?

Git — bugungi kunda dunyodagi eng mashhur versiya nazorati tizimi. Uni 2005-yilda Linux operatsion tizimining yaratuvchisi Linus Torvalds ishlab chiqqan. Git bepul, ochiq kodli va deyarli barcha operatsion tizimlarda ishlaydi.

Git — bu taqsimlangan (distributed) versiya nazorati tizimi. Bu shuni anglatadiki, loyihaning to'liq tarixi har bir dasturchining kompyuterida to'liq nusxa sifatida saqlanadi. Ya'ni Git ishlashi uchun internetga ulanish shart emas — buyruqlarning aksariyati mahalliy (lokal) bajariladi.

Git mahalliy dastur bo'lgani uchun quyidagilarni internetsiz qila olasiz:

Git — bu kompyuteringizga o'rnatiladigan buyruq qatori (terminal) dasturi. Uni GitHub bilan chalkashtirmang: Git — vosita, GitHub esa shu vositadan foydalanadigan onlayn xizmat. Bu farqni pastda batafsil ko'ramiz.

GitHub nima?

GitHub — bu Git repozitoriylaringizni internetda (bulutda) saqlaydigan va jamoaviy ishlashni osonlashtiradigan onlayn platforma. U 2008-yilda ishga tushgan va hozirda dunyodagi eng katta dasturiy ta'minot manbasi (source code hosting) xizmatidir. 2018-yildan boshlab GitHub Microsoft kompaniyasiga tegishli.

GitHub'ni Git uchun bir ijtimoiy tarmoq deb tasavvur qilishingiz mumkin. U Git'ning barcha imkoniyatlariga qo'shimcha ravishda quyidagilarni beradi:

GitHub, shuningdek, dasturchi uchun bir portfolio vazifasini ham bajaradi. Ish beruvchilar ko'pincha nomzodning GitHub sahifasidagi loyihalarga qarab uning tajribasini baholaydi.

Talabalar va o'qituvchilar uchun GitHub Student Developer Pack orqali ko'plab pullik vositalar bepul beriladi. Agar universitet yoki maktab pochtangiz bo'lsa, buni tekshirib ko'ring.

Git va GitHub farqi

Bu ikki tushuncha eng ko'p chalkashtiriladigan mavzu, shuning uchun ularni aniq ajratib olaylik. Git — dastur (vosita), GitHub — shu vosita asosida qurilgan xizmat.

Git                          GitHub
-------------------------     -------------------------
Vosita (dastur)               Onlayn xizmat / platforma
Kompyuteringizga o'rnatiladi   Brauzerda ochiladi (sayt)
Internetsiz ishlaydi          Internet talab qiladi
Mahalliy (lokal) saqlaydi     Bulutda saqlaydi
Bepul, ochiq kodli            Bepul reja + pullik rejalar
Terminal buyruqlari           Grafik interfeys + Git

Oddiy o'xshatish bilan aytadigan bo'lsak: Git — bu telefondagi rasm olish ilovasi, GitHub esa o'sha rasmlarni saqlaydigan va boshqalar bilan ulashadigan onlayn galereya (masalan, Google Photos'ga o'xshash). Git'siz GitHub deyarli foydasiz, ammo GitHub'siz Git'dan mahalliy ravishda bemalol foydalanish mumkin.

Ko'p yangi boshlovchilar "men GitHub o'rnatdim" deb aytadi. Aslida kompyuterga Git o'rnatiladi. GitHub'ga esa brauzer orqali kirasiz — u alohida o'rnatishni talab qilmaydi (garchi qulaylik uchun GitHub Desktop nomli ixtiyoriy ilova mavjud bo'lsa ham).

Asosiy tushunchalar: repozitoriy, commit, branch

Git bilan ishlashda tez-tez uchraydigan uchta muhim atama bor. Ularni hozir umumiy tanishtiramiz, keyingi darslarda esa har birini alohida chuqur o'rganamiz.

Repozitoriy (repo)

Repozitoriy (qisqacha repo) — bu loyihangiz uchun maxsus papka bo'lib, Git u yerdagi barcha fayllar va ularning to'liq o'zgarishlar tarixini kuzatib boradi. Texnik jihatdan repozitoriy — bu ichida yashirin .git papkasi bo'lgan oddiy loyiha papkasidir. Aynan shu .git papkasida Git barcha tarixni saqlaydi.

Repozitoriy ikki xil bo'ladi: mahalliy (kompyuteringizdagi) va masofaviy (GitHub'dagi). Odatda ular bir-biri bilan bog'lanadi va o'zgarishlar ular orasida almashtiriladi.

Commit

Commit — bu loyihangizning ma'lum bir vaqtdagi holatining surati (snapshot). Har bir commit'ga qisqa izoh (message) yozasiz, unda nima o'zgarganini tushuntirasiz. Commit'lar ketma-ket zanjir hosil qiladi va shu zanjir loyiha tarixini tashkil etadi.

Commit tarixi (yangidan eskiga):

(c4) "Kirish formasiga tekshiruv qo'shildi"
  |
(c3) "Bosh sahifa dizayni yangilandi"
  |
(c2) "README fayli qo'shildi"
  |
(c1) "Loyiha yaratildi"

Har bir commit noyob identifikatorga (hash) ega bo'ladi va oldingi commit'ga bog'lanadi. Shu tufayli siz istalgan commit'ga qaytib, loyiha o'sha paytda qanday bo'lganini ko'rishingiz mumkin.

Branch (tarmoq)

Branch (o'zbekcha tarmoq) — bu commit'lar zanjirining alohida yo'nalishi. Tarmoqlar sizga asosiy kodni buzmasdan, alohida joyda ish qilish imkonini beradi. Masalan, yangi imkoniyat ustida ishlayotganda alohida tarmoq ochasiz; u tayyor bo'lgach, asosiy tarmoqqa qo'shasiz (birlashtirish — merge).

                (yangi-dizayn tarmog'i)
                    o---o---o
                   /
  o---o---o---o---o                  (main tarmog'i)

Standart holatda asosiy tarmoq main (avval master deb atalgan) deb nomlanadi. Amaliyotda dasturchilar har bir yangi vazifa uchun alohida tarmoq ochib, keyin uni asosiy tarmoqqa qo'shishadi.

Bu uchala tushuncha — repozitoriy, commit va branch — Git'ning poydevoridir. Hozir ularning ma'nosini eslab qolish kifoya; keyingi darslarda amaliy buyruqlar bilan mustahkamlaymiz.

Oddiy ish oqimi (workflow)

Git bilan kundalik ishlash odatda quyidagi bosqichlardan iborat. Buni umumiy tasavvur qilish uchun keltiryapmiz — batafsil buyruqlarni keyingi darslarda ko'ramiz:

1. Fayllarni tahrirlaysiz (kod yozasiz)
         |
2. O'zgarishlarni tayyorlaysiz  ->  git add
         |
3. Commit qilib saqlaysiz       ->  git commit
         |
4. GitHub'ga yuborasiz          ->  git push
         |
5. Boshqalarning o'zgarishlarini olasiz  ->  git pull

Bu oqim dastlab murakkab tuyulishi mumkin, ammo bir necha marta takrorlagandan keyin u avtomatik odatga aylanadi. Keyingi darslarda har bir bosqichni alohida-alohida, real misollar bilan o'rganamiz.

Muqobil xizmatlar: GitLab, Bitbucket va boshqalar

GitHub eng mashhur bo'lsa-da, u yagona variant emas. Git'ning o'zi ochiq standart bo'lgani uchun, ko'plab boshqa platformalar ham xuddi shu Git bilan ishlaydi:

Muhim jihat shundaki, bu platformalarning barchasi bir xil Git vositasini ishlatadi. Ya'ni Git buyruqlarini bir marta o'rgansangiz, ularni GitHub'da ham, GitLab'da ham, Bitbucket'da ham bir xil ishlata olasiz. O'zgaradigan narsa — faqat platformaning veb-interfeysi va qo'shimcha imkoniyatlari.

Yangi boshlovchi sifatida GitHub'dan boshlash eng oqilona qaror. U eng katta jamiyatga, eng ko'p o'quv materialiga ega va aksariyat ochiq kodli loyihalar aynan shu yerda joylashgan. Keyinchalik boshqa platformalarga o'tish oson bo'ladi.

Xulosa