Asosiy kontentga o‘tish

Maqolalar 14 daqiqa 467 ko‘rish

git config: commit muallifini sozlash

Git o‘rnatilgach, birinchi qiladigan ishimiz — unga kim ekanimizni aytish. Chunki Git har doim ham xato haqida ogohlantirmaydi: ba’zan noto‘g‘ri ism yoki email bilan commitni jimgina yaratib qo‘yadi. Natijada GitHub bu commitni profilingiz bilan bog‘lay olmasligi mumkin. Bu qismda oldingi tajriba natijasini ko‘rib chiqamiz, Git sozlamalarini to‘g‘rilaymiz va noto‘g‘ri muallif bilan yaratilgan commitni tuzatamiz.

git devops

Mundarija

Oldingi qismda Git'ni o'rnatib, test-project papkasida birinchi buyruqlarimizni bajardik: git init, git add va git commit. Endi o'sha oxirgi git commit buyrug'i turli kompyuterlarda nima qaytarishini birgalikda sinchiklab ko'rib chiqamiz.

Ogohlantirish!

To'g'ridan-to'g'ri shu qismdan boshlagan bo'lsangiz, bo'sh papkada shu buyruqlarni bajarib oling (har biri haqida oldingi qismda batafsil yozilgan):

Terminal
pwd                          # Joriy papkani ko'rsatadi
mkdir test-project           # Yangi test-project papkasini yaratadi
cd test-project              # test-project papkasiga kiradi
git init                     # Joriy papkada yangi Git repository yaratadi
echo "salom" > a.txt         # a.txt faylini yaratib, ichiga "salom" yozadi
git status                   # Git holatini ko'rsatadi
git add a.txt                # a.txt faylini staging area'ga qo'shadi
git status                   # Git holatini qayta tekshiradi
git commit -m "sinov"        # O'zgarishlarni "sinov" nomi bilan commit qiladi

git commit - 3 xil holat#

Git commit kimning nomidan yoziladi?: Git har bir commit'ga faqat o‘zgarishlarni emas, uni kim yaratganini ham yozadi. Buning uchun unga ism va email kerak bo'ladi.

Ogohlantirish!

Biz esa hali Git’ga git config ma’lumotlarni bermadik. Shuning uchun oxirgi git commit -m "sinov" buyrug‘i sizning kompyuteringizda 3 xil holatdan birini bergan bo‘lishi mumkin.

1-holat: Git commitni to‘xtatdi#

Windows va ko‘plab Linux kompyuterlarida odatda shunday xabar chiqadi:

Natija
Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.

fatal: unable to auto-detect email address

Git kimning nomidan commit yozishni bilmagani uchun to‘xtadi.

Bu yaxshi holat: commit hali yaratilmagan, demak tarixga noto‘g‘ri ism yoki email ham tushmagan. a.txt esa staging area'da kutib turibdi — sozlashni tugatgach, commit'ni qayta bajaramiz.

2-holat: Git commitni yaratdi#

Ba’zi tizimlarda, ayniqsa macOS’da, Git commitni to‘xtatmasdan yaratib yuborishi mumkin:

Natija
[main (root-commit) ca342dc] 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.

 1 file changed, 1 insertion(+)
 create mode 100644 a.txt

Bu yerda eng muhim qator:

Natija
Committer: career <career@macshops-HN93RCWTNQ.local>

Biz bunday ism yoki email kiritmaganmiz.

Git ularni kompyuterdagi foydalanuvchi nomi va qurilma nomidan o‘zi taxmin qilgan. Email hatto haqiqiy manzil bo‘lmasligi ham mumkin.

Lekin commit allaqachon yaratildi.

Demak, Git xato bermagani hali hammasi to‘g‘ri degani emas.

Ogohlantirish!

Sizda main branch o‘rniga master branch chiqishi ham mumkin. Hozircha branch'larning farqi yo‘q — boshlang‘ich branch nomini birozdan keyin sozlaymiz.

3-holat: Hech qanday ogohlantirishsiz#

Agar commit odatdagidek yaratilib, Git ism yoki email haqida hech narsa demagan bo‘lsa, bu kompyuterda Git avvalroq sozlangan bo‘lishi mumkin.

Hozir qaysi ma’lumotlar ishlatilayotganini tekshirib ko'ring:

Terminal
git config --global user.name
git config --global user.email

Ogohlantirish!

Agar terminal sizning ism va email'ingizni chiqarsa, ularni qayta sozlash shart emas. Agar qiymatlar noto‘g‘ri bo‘lsa yoki umuman hech narsa chiqmasa, hozir birgalikda to‘g‘rilaymiz.

git config - Ism va Email sozlash#

Git’ga commit'larda qaysi ism va email'dan foydalanishni aniq ko‘rsatamiz:

Terminal
# Bu kodda ism familya yoki nickname'ni va emailni o'zingizga moslab yozing.

git config --global user.name "Asadbek Solijonov" # Ism Familya yoki nickname
git config --global user.email "asadbek@example.com" # GitHubga ulangan email

Eslatma

Bu yerdagi --global sozlamani faqat hozirgi loyiha uchun emas, shu foydalanuvchining barcha Git loyihalari uchun umumiy qilib saqlab qo'yadi.

Buyruqlarni bajarganingizdan keyin terminal hech qanday xabar chiqarmasligi mumkin. Bu normal — Git sozlamani jimgina saqlagan bo'ladi.

git config - Ism va Email tekshirish#

Terminal
git config --global user.name
git config --global user.email

Endi terminal siz kiritgan qiymatlarni qaytarishi kerak.

Agar sizda 1-holat bo'lgan bo'lsa, ya'ni commit to'xtagan bo'lsa, uni hozir test-project ichida qayta bajaring:

Terminal
git commit -m "sinov"

Bu safar Git hech narsa so'ramaydi va commit sizning ismingiz bilan yaratiladi.

Qaysi emailni yozgan ma’qul?#

Loyiha commitlarida email'ni ko'rsatishning 2 xil usuli bor: private va public

Public: Oddiy GitHub emailingizni ishlatsangiz ham bo‘ladi. Lekin Git emailni har bir commit ichiga yozadi. Repository ochiq bo‘lsa, bu manzil commit tarixida hammaga ko‘rinadi.

Private: Agar haqiqiy emailingizni oshkor qilishni xohlamasangiz, GitHub bergan noreply manzilidan foydalanishingiz mumkin. U quyidagicha ko'rinishda bo'ladi.

Misol
109437399+AsadbekSolijonov@users.noreply.github.com

GitHub bu manzil orqali commitlarni profilingizga bog‘lay oladi, haqiqiy emailingiz esa ochiq ko‘rinmaydi.

O‘zingizga tegishli manzilni GitHub’dagi Settings → Emails bo‘limidan topasiz. U Keep my email addresses private sozlamasi yoqilganda, shu sozlama matnining ichida ko'rinadi.

Agar GitHub akkauntingiz hali bo‘lmasa, shu yerda to‘xtash shart emas. Hozircha oddiy emailingizni yozib davom eting. Keyin uni bitta buyruq bilan almashtirish mumkin:

Terminal
git config --global user.email "yangi@email"

Faqat bitta narsani yodda tuting: yangi email undan keyin yaratiladigan commitlarga ishlaydi. Eski commitlar o‘z-o‘zidan o‘zgarmaydi.

Yangi repositorylar main bilan boshlansin#

Yana bitta kichik sozlama qoladi:

Terminal
git config --global init.defaultBranch main

Bu buyruqdan keyin yangi repository yaratganingizda:

Terminal
git init

Git boshlang‘ich branchni main deb nomlaydi.

Eski Git versiyalarida bu nom ko‘pincha master edi. GitHub’da esa main keng ishlatiladi. Ikkalasini boshidan bir xil tutish keyinchalik birinchi push paytida ortiqcha chalkashlikning oldini oladi.

Shu bilan asosiy sozlamalar tayyor: Git endi commitni kimning nomidan yozishini va yangi repositorylarda qaysi branch nomidan boshlashini biladi.

Agar yuqoridagi tajribada Git noto‘g‘ri ism yoki email bilan commit yaratib ulgurgan bo‘lsa, aynan o‘sha commitni biroz keyinroq tuzatamiz. Undan oldin sozlamalar qayerda saqlanishini ko'rib olamiz.

git config --show-origin — manbasi#

Yuqorida qiymatlarni --global bilan tekshirgan edik. --globalsiz yozsangiz, Git hozir amalda qaysi qiymatni ishlatishini ko'rsatadi — commit'ga aynan shu yoziladi:

Terminal
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:

Sintaksis
git config --show-origin <kalit>
Bo'lak Vazifasi
--show-origin qiymat bilan birga uning qaysi fayldan kelganini ham yozadi
user.name qaysi sozlama qiziqtirayotgani
Terminal
git config --show-origin user.name
git config --show-origin user.email
# file:/Users/siz/.gitconfig    Asadbek Solijonov
# file:/Users/siz/.gitconfig    109437399+AsadbekSolijonov@users.noreply.github.com

Fayl yo'li sizda boshqacha bo'ladi: Windowsda C:/Users/Siz/.gitconfig, Linuxda /home/siz/.gitconfig.

Agar bu buyruqlar hech narsa chiqarmasa — demak sozlama hali yozilmagan. Yuqoridagi ikkita git config --global buyrug'ini qaytadan bajaring.

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:

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

Ogohlantirish!

Bu buyruqni hozir test-project ichida bajarmang. Aks holda keyingi bo'limda commit'ga global emailingiz emas, ish@kompaniya.com yoziladi. Bajarib qo'ygan bo'lsangiz, git config --unset user.email bilan local sozlamani olib tashlang. Buni xavfsiz sinab ko'rish uchun maqola oxirida alohida mashq bor.

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.

git commit --amend — tuzatish#

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

Yuqoridagi tajribada ikkinchi holat sizda ham chiqqan bo'lsa, test-project ichida aynan shunday commit turibdi. Quyidagi buyruqlarni o'sha papkaning ichida mashq qilib ko'rishingiz mumkin.

Oxirgi commitni tuzatish oson. Avval kim yozilganini ko'ramiz — Git'dan "faqat kim yozganini ayt" deb so'raymiz:

Bo'lak Vazifasi
git log commitlar tarixini ko'rsatadi
-1 faqat oxirgi bitta commit
--format="..." chiqish ko'rinishini o'zingiz belgilaysiz
%an, %ae muallif ismi va emaili (author name, author email)
Terminal
git log -1 --format="%an <%ae>"
# career <career@macshops-HN93RCWTNQ.local>

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

Bo'lak Vazifasi
--amend oxirgi commitni qaytadan yozadi
--reset-author muallifni hozirgi sozlamadan qayta oladi
--no-edit commit izohiga tegmaydi (aks holda matn muharriri ochiladi)
Terminal
git commit --amend --reset-author --no-edit

Tekshiramiz:

Terminal
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 seriyaning keyingi qismlarida 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.

Tajriba tugadi — test-project endi kerak emas. Xohlasangiz, uni o'chirib tashlashingiz mumkin. Hozir uning ichida turgan bo'lsangiz, avval bir pog'ona yuqoriga chiqamiz:

Bo'lak Vazifasi
cd .. bir pog'ona yuqoriga chiqadi
rm o'chirish buyrug'i
-r papkani ichidagisi bilan birga (recursive)
-f tasdiq so'ramasdan (force)
test-project nima o'chirilishi
Terminal
cd ..
rm -rf test-project

Bu buyruq bilan ehtiyot bo'ling: u tasdiq so'ramaydi va o'chirilgan fayllarni Savatga (Trash) ham yubormaydi. Enter bosishdan oldin papka nomini bir marta tekshirib oling.

Terminaldan o'chirishni xohlamasangiz, test-project ni Finder yoki Explorer orqali ham o'chirishingiz mumkin.

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.

Learn Git Branching sayti: chapda terminal (git branch va ikkita git commit yozilgan), o'ngda C0 dan C3 gacha commitlar daraxti va main belgisi
Ikkita git commit yozdik — daraxtda ikkita yangi tugun paydo bo'ldi. Buyruqning natijasi shu zahoti ko'z oldingizda

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.

O'zingizni tekshiring#

Ixtiyoriy bo'lim

Vaqtingiz tig'iz bo'lsa, bu bo'limni o'tkazib yuborib keyinroq qaytsangiz bo'ladi — maqolaning davomi bunga bog'liq emas.

Sozlash tugadi, lekin tushunganingizni bir sinab ko'rgan ma'qul. Uchta kichik topshiriq — har biri bir necha daqiqada bajariladi va hech narsani buzmaydi.

  1. Hamma global sozlamalaringizni ko'ring.

    Terminalda git config --global --list deb yozing. Ichida user.name, user.email va init.defaultBranch bormi? Git sozlama nomlarini kichik harfda ko'rsatadi, ya'ni init.defaultbranch deb chiqadi — bu xato emas. Yana nima bor: Git'ni o'rnatuvchi o'zi qo'shib ketgan sozlamalar ham ko'rinadimi?

    Kutilgan natija: kamida uchta qator — user.name=..., user.email=..., init.defaultbranch=main.

  2. Local sozlama global'dan ustun turishini o'z ko'zingiz bilan ko'ring.

    Yangi bo'sh papka yarating, git init qiling va ichida git config user.email "test@example.com" deb yozing. Endi git config user.email nima chiqaradi? Papkadan chiqib (cd ..) xuddi shu buyruqni qayta yozing — javob o'zgardimi?

    Kutilgan natija: papka ichida test@example.com, tashqarisida esa global emailingiz. Ya'ni local sozlama faqat o'sha loyihada ishlaydi.

  3. Sozlama qayerdan kelayotganini toping.

    O'sha sinov papkasiga qayta kiring va git config --show-origin user.email yozing. Fayl yo'li .git/config ni ko'rsatadimi? Tashqarida esa qaysi faylni ko'rsatadi?

    Kutilgan natija: ichida file:.git/config, tashqarisida esa uy papkangizdagi .gitconfig faylining to'liq yo'li. Mashq tugagach o'sha sinov papkasini o'chirib tashlang.

Uchalasi kutgandek chiqsa, Git sozlamalari qanday ishlashini tushundingiz — seriyaning qolgan qismida bu bilim ko'p asqotadi.

Shu qismning buyruqlari#

Buyruq Vazifasi
git config --global user.name "Ism" Barcha loyihalarning commitlarida turadigan ismni o'rnatish
git config --global user.email "email" Barcha loyihalarning commitlarida turadigan emailni o'rnatish
git config --global init.defaultBranch main Yangi loyihalarda boshlang'ich branch nomini main qilish
git config user.email Joriy loyihada qaysi email ishlayotganini ko'rish
git config --show-origin user.email Sozlama qaysi fayldan kelayotganini ko'rish
git config --global --list Barcha global sozlamalar ro'yxati
git log -1 --format="%an <%ae>" Oxirgi commitni kim yozgani
git commit --amend --reset-author --no-edit Oxirgi commit muallifini to'g'rilash

Git'niki bo'lmagan bitta buyruq ham uchradi:

Buyruq Vazifasi
rm -rf <papka> Papkani ichidagisi bilan o'chirish ⚠️

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.

14 daqiqa 467 marta o‘qildi