Asosiy kontentga o‘tish

Maqolalar

Darslik 9 daqiqa boshlang'ich 0 ko‘rish 0 yoqdi

Git nega kerak va uni qanday sozlaymiz?

#devops

Mundarija

Kompyuteringizdagi loyiha papkasini bir ochib ko'ring. Katta ehtimol bilan u yerda shunga o'xshash nomlar turibdi:

kurs_loyiha/
kurs_loyiha_yangi/
kurs_loyiha_final/
kurs_loyiha_final_v2/
kurs_loyiha_final_v2_oxirgi/
kurs_loyiha_ISHLAYDIGAN_shu/

Bu — hammamizni boshimizdan o'tgan bosqich. Kod ishlab turganda uni buzib qo'yishdan qo'rqasiz, shuning uchun papkani nusxalab qo'yasiz va yangisida ishlaysiz. Bir hafta o'tib esa ochilmaydigan savol paydo bo'ladi: qaysi biri eng yangisi? oxirgi dagi funksiya v2 dagisidan yaxshiroqmi, yoki men uni ISHLAYDIGAN_shu da tuzatganmidim?

Mana shunaqa savollar tug'ilib javob berishga qiyinlashmasligi uchun Git yaratilgan.

Git aslida nima qiladi#

Git — loyihangizning tarixini yozib boradigan dastur. Siz "shu holatni saqlab qo'y" desangiz, u o'sha ondagi barcha fayllarning holatini eslab qoladi. Bunday saqlash nuqtasi commit deb ataladi.

Papka nusxalashdan farqi shundaki, Git butun papkani takrorlamaydi. U faqat nima o'zgarganini yozadi: qaysi faylning qaysi qatori qo'shildi, qaysi biri o'chdi. Shuning uchun yuzta commit qilsangiz ham loyihangiz yuz barobarga og'irlashmaydi.

Va har commitda uchta narsa saqlanadi: nima o'zgardi, qachon o'zgardi va kim o'zgartirdi. Oxirgisi hozircha ortiqchadek tuyulishi mumkin, lekin maqola oxirida ko'rasiz — aynan shu joyda ko'pchilik birinchi xatoga yo'l qo'yadi.

Git va GitHub — bir narsa emas#

Bu ikkisi doim yonma-yon aytilgani uchun boshida chalkashtiriladi.

Git — kompyuteringizga o'rnatiladigan dastur. Internetsiz ham to'liq ishlaydi: offline ham commit qilaverasiz internet kerak emas.

GitHub — Git loyihalarini saqlaydigan sayt. U Git'ni o'ylab topmagan ham, unga egalik ham qilmaydi. Shunga o'xshash boshqa saytlar ham bor: GitLab, Bitbucket, Gitea.

Ya’ni, Git — ishingizni boshqaradigan vosita, GitHub esa — shu ishni saqlash va ulashish uchun joy. Git GitHubsiz ham ishlaydi, ammo GitHub Git’siz deyarli ishlamaydi.

O'rnatamiz#

Windows. git-scm.com/download/win saytiga kirsangiz yuklab olish o'zi avtomatik boshlanadi. O'rnatuvchida ancha savol chiqadi; birinchi marta o'rnatayotgan bo'lsangiz hammasini o'zgartirmasdan "Next" bosib o'taverasiz. O'rnatish tugagach kompyuteringizda Git Bash degan dastur paydo bo'ladi — buyruqlarni shunda yozasiz.

macOS. Terminalni ochib git --version deb yozing. Agar Git hali o'rnatilmagan bo'lsa, tizim o'zi taklif qiladi. Homebrew ishlatsangiz:

brew install git

Linux (Ubuntu/Debian).

sudo apt update
sudo apt install git

O'rnatilganini tekshiramiz:

git --version
git version 2.50.1 (Apple Git-155)

Sizda boshqa raqam chiqadi va bu normal. Muhimi — git version degan javob kelsa, o'rnatilgan.

Endi eng muhim qadam#

Ko‘p qo‘llanmalarda bu qism “sozlash” deb ataladi va ikki qator bilan tushuntirib o‘tiladi.

Aslida esa bu — butun maqoladagi eng muhim qismlardan biri. Chunki aynan shu yerda Git ba’zan biz kutmagan tarzda ishlashi mumkin.

Keling, buni ataylab tekshirib ko‘ramiz. Git’ga hali kim ekanimizni aytmasdan turib, commit qilishga urinib ko‘ramiz:

git commit -m "sinov"
[main (root-commit) 7f63a26] sinov
 Committer: career <career@macshops-HN93RCWTNQ.local>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.

Diqqat bilan qarang: Git xato bermadi. U commitni qabul qildi. Kimligimizni bilmagani uchun kompyuterdagi foydalanuvchi nomi va kompyuterning nomini olib, o'zi bir email yasab qo'ydi — career@macshops-HN93RCWTNQ.local.

Bunday email realda mavjud emas. Lekin commit yozilib bo'ldi.

Nega bu muhim? Chunki GitHub commitni sizning profilingizga aynan email orqali bog'laydi. Email notanish bo'lsa, GitHub commitni hech kimga bog'lay olmaydi. Natijada:

  • profilingizdagi hissa jadvali (yashil kvadratchalar) bo'sh qolaveradi;
  • repository'ning Contributors ro'yxatida siz turmaysiz;
  • jamoada ishlasangiz, "bu kodni kim yozgan?" degan savolga javob topilmaydi.

Eng yomoni shuki, buni odam odatda oylar o'tib, o'nlab commitdan keyin sezadi. Xato xabari chiqmagani uchun hech narsa e'tiborni tortmaydi.

Shuning uchun Git o'rnatilgach birinchi bo'lib qiladigan ish — kimligimizni aytish:

git config --global user.name "Ism Familiya"
git config --global user.email "sizning@emailingiz.com"

--global — bu sozlama shu kompyuterdagi barcha Git loyihalariga qo‘llanadi degani. Bu buyruqlar bajarilganda terminalda hech qanday xabar chiqmasligi mumkin. Bu xatolik emas — Git buyruqni jimgina bajaradi va bu mutlaqo normal.

Email qaysi biri bo'lishi kerak#

Bu yerda ikkita yo'l bor.

Oddiy yo'l — GitHub'da ro'yxatdan o'tgan email'ingizni yozish. Ishlaydi, lekin bir nozik tomoni bor: har commitingiz bilan birga email'ingiz ham tarixga yoziladi va repo ochiq bo'lsa, uni istagan odam ko'ra oladi.

Shuning uchun GitHub har bir foydalanuvchiga maxfiy email beradi. U shunday ko'rinadi:

109437399+AsadbekSolijonov@users.noreply.github.com

Bu email haqiqiy pochtangizni oshkor qilmaydi, lekin GitHub commitni profilingizga bemalol bog'laydi. O'zingiznikini GitHub'da Settings → Emails bo'limidan topasiz (Keep my email addresses private yonida yozilgan bo'ladi).

Men aynan shu ikkinchi usulni tavsiya qilaman. Uni bir marta sozlab qo‘yasiz, keyin esa qayta-qayta o‘ylab yurishga hojat qolmaydi.

Yana bitta sozlama#

Git yangi loyiha yaratganda asosiy branch nomi qanday bo‘lishini ham oldindan belgilab qo‘yamiz:

git config --global init.defaultBranch main

Eski Git versiyalarida asosiy branch odatda master deb nomlanardi. GitHub esa hozir main nomidan foydalanadi. Ikkalasini bir xil qilib qo‘ygan ma’qul — aks holda birinchi push paytida ortiqcha chalkashlik yuzaga kelishi mumkin.

Sozlanganini tekshiramiz#

git config user.name
git config user.email
Asadbek Solijonov
109437399+AsadbekSolijonov@users.noreply.github.com

Ikkalasi to'g'ri chiqsa, Git tayyor.

Yana bir foydali buyruq bor — u nafaqat qiymatni, balki qaysi fayldan kelayotganini ham ko'rsatadi:

git config --list --show-origin | grep user
file:~/.gitconfig   user.name=Asadbek Solijonov
file:~/.gitconfig   user.email=109437399+AsadbekSolijonov@users.noreply.github.com

Hozircha faqat bitta fayl ko‘rinadi, chunki biz hozircha faqat global sozlamani o‘rnatdik. Aslida Git sozlamalarni uch xil joydan o‘qiydi. Agar bir xil sozlama bir nechta joyda berilgan bo‘lsa, ustunlik darajasi yuqoriroq bo‘lgan sozlama ustun keladi:

Qayerda Kimga tegishli Buyrug'i
Tizim kompyuterdagi hamma --system
Global shu foydalanuvchi --global
Local faqat shu loyiha (belgisiz)

Pastdagi sozlama yuqoridagidan ustun turadi. Masalan, loyiha ichida boshqa email ko‘rsatsangiz, shu loyiha uchun global email emas, aynan loyiha ichidagi email ishlatiladi:

# loyiha papkasi ichida turib, --global YOZMASDAN faqat shu loyiha uchun:
git config user.email "ish@kompaniya.com"

Bu — shunchaki qo‘shimcha imkoniyat emas, balki amalda juda kerakli funksiya. Ish loyihalarida korporativ email, shaxsiy loyihalarda esa o‘z emailingizdan foydalanish kerak bo‘lsa, aynan shu sozlama qo‘l keladi. Seriyaning oxirgi qismida bitta kompyuterda ikkita GitHub akkaunt bilan ularni aralashtirmasdan ishlashni ham amalda ko‘rib chiqamiz.

Shoshib noto'g'ri commit qilib qo'ygan bo'lsangiz#

Bu holat ko'p uchraydi: odam bir necha commit qilib, keyin sozlashni o'qiydi. Tarixda esa allaqachon notanish nom qolib ketgan bo'ladi.

Oxirgi commitni tuzatish oson. Avval kim yozilganini ko'ramiz:

git log -1 --format="%an <%ae>"
career <career@macshops-HN93RCWTNQ.local>

Endi Git'ga "shu commitni qayta yoz, muallifni esa yangi sozlamadan ol" deymiz:

git commit --amend --reset-author --no-edit

--amend — oxirgi commitni yangilaydi, --reset-author — muallifni yangilash, --no-edit — commit matniga tegmaslik. Tekshiramiz:

git log -1 --format="%an <%ae>"
Asadbek Solijonov <109437399+AsadbekSolijonov@users.noreply.github.com>

Muallif almashdi.

Bitta ogohlantirish: --amend commitni tuzatmaydi, o'rniga yangisini yozadi. Agar o'sha commit GitHub'ga hali yuborilmagan bo'lsa — muammo yo'q. Yuborilgan bo'lsa, tarix ikkiga ayrilib qoladi va uni to'g'rilash alohida ish. Bu haqda 9-qismda batafsil gaplashamiz; hozircha shu qoidani eslab qoling: push qilingan commitni o'zgartirmang.

Bir necha eski commitning muallifini birdaniga almashtirish ham mumkin, lekin u ancha jiddiyroq amaliyot. Hozir bunga kirishmaymiz — yangi boshlaganlar uchun eng foydalisi shu xatoga umuman yo'l qo'ymaslik.

Davom etishdan oldin bitta maslahat#

Git’ning eng tushunarsiz mavzularidan biri — branch va merge. Ular haqida keyingi qismlarda batafsil gaplashamiz. Lekin terminalda ishlatishdan oldin ularni ko‘z bilan ko‘rib, qanday ishlashini tushunib olsangiz, keyingi qadamlar ancha oson bo‘ladi.

Buning uchun eng yaxshi joy — learngitbranching.js.org. Brauzerda ochiladi, hech narsa o'rnatish shart emas: buyruq yozasiz, ekranda commitlar daraxti darrov o'zgaradi. Birinchi bo‘limini taxminan 20 daqiqada ko‘rib chiqsangiz, keyingi qismlarni tushunish ancha oson bo‘ladi.

Men buni maqola oxirida emas, aynan shu yerda tavsiya qilyapman. Chunki oxirida berilgan havolalar ko‘pincha ochilmay qoladi.

Mashq repozitoriysi#

Bu seriyada qiladigan barcha ishlarimizni ochiq repozitoriyga joylab boramiz:

github.com/AsadbekSolijonov/git-darslik

U yerdagi commitlar, branchlar va conflictlar shunchaki misol uchun o‘ylab topilmagan. Hammasi shu darslikni tayyorlash jarayonida qilingan haqiqiy ishlar.

Biror joyda sizda boshqacha natija chiqsa yoki qayerdadir adashsangiz, repozitoriyni ochib, men qilgan qadamlar bilan solishtirib ko‘rishingiz mumkin.

Shu qismning buyruqlari#

Buyruq Vazifasi
git --version Git o'rnatilganini tekshirish
git config --global user.name "Ism" Commitlarda turadigan ism
git config --global user.email "email" Commitlarda turadigan email
git config --global init.defaultBranch main Yangi loyihalarda default branch nomi
git config user.email Joriy loyihada qaysi email ishlayotgani
git config --list --show-origin Sozlama qaysi fayldan kelayotgani
git commit --amend --reset-author --no-edit Oxirgi commit muallifini to'g'rilash

Keyingi qismda#

Git tayyor, lekin hali bironta loyihamiz yo'q. Keyingi qismda xarajat degan kichik Python skriptini boshlaymiz va Git'ning eng asosiy mexanizmini birgalikda ochamiz: fayl commitgacha uch bosqichdan o'tadi va ko'pchilikni boshida chalkashtiradigan git add aynan shu yerda tushuniladi.

0 ko‘rish
Ulashish