IlmHamroh
JavaScript Full-stack/7-qism. Git va GitHub asoslari2/36-dars19 daqiqa
Mundarija (38)

Git'ni o'rnatish va birinchi sozlash: git config, ism, email va main

Qisqacha: Git'dan foydalanishdan oldin unga bir marta kimligingizni aytasiz: git config --global user.name "Ism Familiya" va git config --global user.email "email". Yangi repolar main branch bilan boshlanishi uchun — git config --global init.defaultBranch main. Sozlamalar uch darajada yashaydi: system, global va local; yaqinrog'i ustun turadi. Qaysi qiymat qayerdan kelganini git config --list --show-origin ko'rsatadi.

Bu darsda

  • Git o'rnatilganini va versiyasini tekshirasiz.
  • Sozlamalarning uch darajasini (system, global, local) va ularning ustunlik tartibini tushuntirasiz.
  • Ism, email va standart branch nomini to'g'ri sozlaysiz.
  • --show-origin va --show-scope bilan "bu qiymat qayerdan keldi?" savoliga javob topasiz.
  • Git Credential Manager nima ishlashini va parol nega so'ralmasligini bilasiz.

Oldin bilishingiz kerak: Versiya nazorati nima, Dastur o'rnatish va paket menejerlari, Vim'da omon qolish.

1. Nega bu kerak?

Oldingi darsda har bir commitda muallif va email yozilishini ko'rdik: Author: Aziz Karimov <aziz@example.com>. Git bu ma'lumotni qayerdan oladi? O'zi o'ylab topmaydi — siz aytasiz. Aytmasangiz, birinchi commitdayoq to'xtaydi.

Yangi telefon olganingizni eslang. Birinchi yoqqanda til, vaqt mintaqasi va akkauntni so'raydi. Bir marta sozlaysiz — keyin yillab o'ylamaysiz. Git ham shunday: to'rt-besh sozlama bir marta to'g'ri qo'yilsa, keyingi ko'p muammolarning oldi olinadi.

Yaxshi xabar: ishning yarmi allaqachon bajarilgan. Git Dastur o'rnatish darsida o'rnatilgan, Git uchun muharrir esa Vim darsida sozlangan. Bugun qolganini qo'shamiz va hammasini tekshiramiz.

2. Git bormi va qaysi versiya?

2.1 Versiyani tekshirish

Git'ni qayta o'rnatish shart emas. Git Bash'ni oching va yozing:

bash
git --version

Terminalda (Windows):

text
git version 2.54.0.windows.1

Sizda raqam boshqacha bo'lishi mumkin — Git har bir-ikki oyda yangilanadi. Kursdagi misollar 2.54 da sinalgan. Sizniki 2.40 dan eski bo'lsa, Dastur o'rnatish darsidagi winget upgrade --id Git.Git -e bilan yangilang.

Oxiridagi .windows.1 — bu Git for Windows: Git'ning Windows uchun yig'ilgan nashri. U bilan birga Git Bash, nano, vim va Git Credential Manager ham keladi. macOS va Linux'da bu qo'shimcha bo'lmaydi: u yerda git version 2.54.0 kabi qisqa chiqadi.

2.2 Git topilmasa

bash: git: command not found chiqsa, Git o'rnatilmagan yoki PATH'da yo'q. Bu xabarni Dastur o'rnatish darsida batafsil ko'rgan edik. Tuzatish: Git'ni o'rnating va terminalni yopib, qayta oching. Yangi PATH faqat yangi ochilgan terminalga ta'sir qiladi (PATH).

3. Sozlamalar qayerda yashaydi?

3.1 Uch daraja

Git sozlamalari oddiy matnli fayllarda turadi. Bunday fayl uchta, har biri o'z "darajasi"da:

Daraja Kimga ta'sir qiladi Qayerda (Windows)
system Kompyuterdagi hamma foydalanuvchiga C:/Program Files/Git/etc/gitconfig
global Faqat sizga, hamma repolaringizda C:/Users/<ism>/.gitconfig
local Faqat bitta repoda repo ichidagi .git/config

Bir sozlama bir nechta darajada yozilgan bo'lsa, yaqinrog'i yutadi: local global'dan, global system'dan ustun.

Maktabni tasavvur qiling. Vazirlikning qoidasi bor (system). Maktab direktori o'z qoidasini qo'shadi (global). Sinf rahbari esa bitta sinf uchun alohida qoida o'rnatishi mumkin (local). Sinfda sinf rahbarining so'zi amal qiladi, chunki u eng yaqin.

flowchart LR
  S["system<br/>Git for Windows"] --> G["global<br/>~/.gitconfig"]
  G --> L["local<br/>.git/config"]
  L --> R["Amaldagi<br/>qiymat"]

Nimaga qarang: o'q chapdan o'ngga — Git fayllarni shu tartibda o'qiydi. Keyin o'qilgan qiymat oldingisini "bosib" ketadi. Shuning uchun eng o'ngdagisi ustun.

Git hujjatida yana ikkita kamdan-kam darajani ham ko'rasiz: worktree (Worktree darsida kerak bo'ladi) va buyruq qatoridagi -c (faqat bitta buyruq uchun). Hozircha uchtasi yetarli.

3.2 Hozir sizda nima bor?

Hamma sozlamalarni qayerdan kelgani bilan ko'raylik:

bash
git config --list --show-origin

Git'ni endigina o'rnatgan kompyuterda (global sozlama hali yo'q) biz shuni oldik:

text
file:D:/Dasturlash/Install/Git/etc/gitconfig	diff.astextplain.textconv=astextplain
file:D:/Dasturlash/Install/Git/etc/gitconfig	filter.lfs.clean=git-lfs clean -- %f
file:D:/Dasturlash/Install/Git/etc/gitconfig	filter.lfs.smudge=git-lfs smudge -- %f
file:D:/Dasturlash/Install/Git/etc/gitconfig	filter.lfs.process=git-lfs filter-process
file:D:/Dasturlash/Install/Git/etc/gitconfig	filter.lfs.required=true
file:D:/Dasturlash/Install/Git/etc/gitconfig	http.sslbackend=openssl
file:D:/Dasturlash/Install/Git/etc/gitconfig	http.sslcainfo=D:/Dasturlash/Install/Git/mingw64/etc/ssl/certs/ca-bundle.crt
file:D:/Dasturlash/Install/Git/etc/gitconfig	core.autocrlf=true
file:D:/Dasturlash/Install/Git/etc/gitconfig	core.fscache=true
file:D:/Dasturlash/Install/Git/etc/gitconfig	core.symlinks=false
file:D:/Dasturlash/Install/Git/etc/gitconfig	pull.rebase=false
file:D:/Dasturlash/Install/Git/etc/gitconfig	credential.helper=manager
file:D:/Dasturlash/Install/Git/etc/gitconfig	credential.https://dev.azure.com.usehttppath=true
file:D:/Dasturlash/Install/Git/etc/gitconfig	init.defaultbranch=master

Qo'rqmang, hammasini tushunish shart emas. Qatorni bo'laklab o'qiymiz:

  • file:D:/.../etc/gitconfig — qiymat qaysi fayldan kelgani. Hammasi bitta fayldan — bu system daraja. Bizning kompyuterda Git D: diskka o'rnatilgan. Odatiy o'rnatishda yo'l C:/Program Files/Git/etc/gitconfig bo'ladi.
  • Tab belgisidan keyin — bo'lim.nom=qiymat. Masalan core.autocrlf=true: bo'lim core, nom autocrlf, qiymat true.

Bu ro'yxatni Git for Windows o'rnatuvchisi yozgan. Undagi to'rttasi siz uchun muhim:

Sozlama Ma'nosi Qaysi darsda
core.autocrlf=true Qator oxirlarini avtomatik almashtirish .gitattributes
credential.helper=manager Parolni Git Credential Manager saqlaydi shu dars
pull.rebase=false git pull qanday birlashtirishi Ajralgan tarix
init.defaultbranch=master Yangi repo'dagi branch nomi shu dars

core.autocrlf ni taniysizmi? Qator oxiri darsida "Windows'ga Git o'rnatilganda u o'zi ham qator oxirlarini almashtirib turadi" degan edik. Mana u — system faylda. Uni hozir o'zgartirmaymiz: to'g'ri yechim .gitattributes va u alohida darsda.

Maslahat: Faqat daraja nomi kerak bo'lsa, --show-origin o'rniga --show-scope yozing. Qator boshida uzun yo'l o'rniga qisqa system, global yoki local chiqadi — o'qish osonroq.

bash
git config --list --show-scope
text
system	diff.astextplain.textconv=astextplain
system	filter.lfs.clean=git-lfs clean -- %f
...
system	init.defaultbranch=master

(Bu yerda o'rtadagi qatorlarni ... bilan qisqartirdik — ular yuqoridagi bilan bir xil.)

Tekshirib ko'ring: core.editor system faylda vim, global faylda code --wait deb yozilgan. Git commit xabari uchun qaysi muharrirni ochadi?

Javob

VS Code (code --wait). Global daraja system'dan keyin o'qiladi va uning qiymatini bosib ketadi. Repo ichidagi .git/config da boshqa qiymat bo'lsa edi, o'sha yutardi.

4. Kimligingizni aytish: user.name va user.email

4.1 Aytmasangiz nima bo'ladi?

Avval ataylab xato qilamiz. Global sozlamasi bo'm-bo'sh kompyuterda repo ochib, commit qilmoqchi bo'ldik (bu buyruqlarni Birinchi repo darsida o'rganasiz — hozir faqat natijaga qarang):

text
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.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got '...@....(none)')

Tarjimasi:

  • Author identity unknown — "muallifning kimligi noma'lum".
  • Please tell me who you are. — "Iltimos, kimligingizni ayting."
  • Run ... to set your account's default identity. — "hisobingizning asosiy kimligini o'rnatish uchun shu buyruqlarni bajaring".
  • Omit --global to set the identity only in this repository. — "--global ni tashlab yozsangiz, kimlik faqat shu repoda o'rnatiladi".
  • fatal: unable to auto-detect email address — "email manzilini o'zim aniqlay olmadim".

Nega aynan shunday? Git har bir commitga muallif yozishi shart. Sozlama bo'lmasa, u kompyuterdagi foydalanuvchi nomi va kompyuter nomidan email yasab ko'radi. Qavs ichida aynan shu urinish ko'rinadi. Biz o'sha ikki nomni ... bilan yashirdik — sizda o'zingizniki chiqadi. Bunday "email" haqiqiy emas, shuning uchun Git to'xtaydi. Xabarning o'zi tuzatish yo'lini ham ko'rsatgan — Git xabarlarini oxirigacha o'qish foydali.

4.2 To'g'ri sozlash

Ism va emailni bir marta global darajada yozamiz:

bash
git config --global user.name "Aziz Karimov"
git config --global user.email "aziz@example.com"

Muvaffaqiyatli bo'lsa, Git hech narsa demaydi. Terminal jim — bu yaxshi belgi. Tekshirish uchun qiymatsiz so'raymiz:

bash
git config --global user.name
git config --global user.email
text
Aziz Karimov
aziz@example.com

Buyruq qismlari:

  • git config — sozlamani o'qish yoki yozish.
  • --global — global daraja, ya'ni sizning ~/.gitconfig faylingiz.
  • user.name — bo'lim user, nom name.
  • "Aziz Karimov" — qiymat. Ichida bo'sh joy bor, shuning uchun qo'shtirnoq majburiy.

O'zingizda "Aziz Karimov" o'rniga o'z ismingizni yozing. Lotin harflarida yozish qulay: ba'zi vositalar kirill yoki o' dagi apostrofni noto'g'ri ko'rsatishi mumkin.

4.3 Qaysi email yozish kerak?

Commitdagi email ochiq bo'ladi. Repo GitHub'ga chiqsa, har kim git log bilan uni ko'radi. Shuning uchun ikki yo'l bor:

  1. Ish uchun ochiq email. Maxsus ochilgan pochta — spam kelsa ham achinmaysiz.
  2. GitHub'ning "noreply" manzili. GitHub har bir akkauntga yashirin manzil beradi. GitHub hujjatiga ko'ra, u ID+USERNAME@users.noreply.github.com ko'rinishida — raqamli ID va loginingiz. Uni GitHub'da Settings → Access bo'limi → Emails sahifasidan topasiz. U yerda Keep my email addresses private katakchasi ham bor.

Qaysi birini tanlasangiz ham, bitta qoida: email GitHub akkauntingizga qo'shilgan bo'lsin. GitHub commitlarni akkauntga aynan email orqali bog'laydi. Bog'lanmasa, commitlar profilingizda "sizniki" bo'lib ko'rinmaydi.

Tekshirib ko'ring: Malika global emailni yozdi, lekin user.name ni unutdi. U commit qila oladimi?

Javob

Qila oladi — lekin ismi noto'g'ri yoziladi. Ism bo'lmasa, Git uni o'zi topishga urinadi. Biz Windows'da sinadik: commit bo'ldi, muallif esa unknown <malika@example.com> bo'lib yozildi (unknown — "noma'lum"). Boshqa kompyuterda o'rniga kompyuterdagi foydalanuvchi nomi tushishi mumkin. Xato xabari chiqmagani uchun bu sezilmay qoladi. To'g'ri yo'l — ikkalasini ham aniq sozlash va git config --global user.name bilan tekshirish.

5. Standart branch nomi: init.defaultBranch main

5.1 Muammo

Birinchi deploy darsida GitHub Pages'ni yoqqanda branch sifatida main ni tanlagan edingiz. GitHub'da yangi repolar main bilan boshlanadi. Git esa hozircha o'zi master nomini beradi.

Tekshiramiz:

bash
git config --get init.defaultBranch
text
master

Bu qiymat system fayldan kelyapti — yuqoridagi ro'yxatning oxirgi qatori. Git for Windows o'rnatuvchisida standart branch nomini so'raydigan oyna bor. Tanlovingizga qarab bu qator sizda bo'lmasligi ham mumkin. Unda buyruq hech narsa chiqarmaydi.

5.2 Sozlamasa nima bo'ladi?

Bu qator umuman bo'lmagan kompyuterda Git 2.54 yangi repo ochganda uzun maslahat chiqaradi. Uni system faylni vaqtincha o'chirib, "toza" holatda oldik:

text
hint: Using 'master' as the name for the initial branch. This default branch name
hint: will change to "main" in Git 3.0. To configure the initial branch name
hint: to use in all of your new repositories, which will suppress this warning,
hint: call:
hint:
hint: 	git config --global init.defaultBranch <name>
...

Tarjimasi: "Boshlang'ich branch nomi sifatida master ishlatilmoqda. Bu standart nom Git 3.0 da main ga o'zgaradi. Barcha yangi repolaringiz uchun nomni sozlash va bu ogohlantirishni o'chirish uchun shu buyruqni bajaring". hint: — "maslahat", bu xato emas. Pastki qatorlarni ... bilan qisqartirdik: ularda muqobil nomlar va branch'ni qayta nomlash buyrug'i bor.

Oldingi darsda aytgan Git 3.0 rejasi shu. Rasmiy "BreakingChanges" hujjatida ham yozilgan: yangi repolarda standart nom main bo'ladi.

5.3 Tuzatish

Kutib o'tirmaymiz — hozirdan main qilamiz:

bash
git config --global init.defaultBranch main
git config --get init.defaultBranch
text
main

Global qiymat system'dagi master ni bosib ketdi. Qaysi fayldan kelganini ko'ramiz:

bash
git config --get --show-origin init.defaultBranch
text
file:C:/Users/.../uy/.gitconfig	main

Bu yerda yo'lni qisqartirdik: biz sinovni vaqtinchalik papkada o'tkazdik. Sizda file:C:/Users/<ismingiz>/.gitconfig chiqadi.

Yangi repo endi darhol main bilan tug'iladi. Ogohlantirish ham chiqmaydi:

text
Initialized empty Git repository in C:/Users/.../kurs/bahor/.git/

Bu sozlama faqat yangi repolarga ta'sir qiladi. Oldin ochilgan repodagi branch nomi o'zgarmaydi — uni qanday almashtirishni Branch nima darsida ko'rasiz.

Tekshirib ko'ring: Sozlama nomi init.defaultBranch, lekin --list natijasida init.defaultbranch (kichik b) chiqdi. Xatomi?

Javob

Xato emas. Git sozlama nomlarida katta-kichik harfni farqlamaydi va ro'yxatda ularni kichik harf bilan ko'rsatadi. init.defaultBranch deb yozish — hujjatdagi o'qilishi oson shakl. Qiymat (main) esa katta-kichik harfni farqlaydi.

6. core.editor: tekshirish

Vim darsida Git uchun muharrirni sozlagan edik. Hozir faqat tekshiramiz:

bash
git config --global core.editor
text
code --wait

Shunday chiqsa — hammasi joyida: commit xabari uchun VS Code ochiladi. nano chiqsa ham yaxshi. Hech narsa chiqmasa, Vim darsidagi buyruqni takrorlang:

bash
git config --global core.editor "code --wait"

--wait siz yozsangiz, Git kutmaydi va Aborting commit due to empty commit message. deydi — bu tuzoqni o'sha darsda ko'rgan edik.

7. Global fayl ichida nima bor?

7.1 --list va faylning o'zi

Hozirgacha to'rtta global sozlama yozdik. Hammasini ko'ramiz:

bash
git config --global --list
text
user.name=Aziz Karimov
user.email=aziz@example.com
init.defaultbranch=main
core.editor=code --wait

Faylning o'zini cat ~/.gitconfig bilan ochsak:

text
[user]
	name = Aziz Karimov
	email = aziz@example.com
[init]
	defaultBranch = main
[core]
	editor = code --wait

Bu — INI formati (YAML, TOML, INI darsida ko'rgan edingiz): kvadrat qavsda bo'lim, ostida nom = qiymat. git config shu faylga yozadi, xolos. Uni VS Code'da qo'lda ham tahrirlash mumkin: git config --global --edit buyrug'i uni core.editor dagi muharrirda ochadi.

Maslahat: Git'ning barcha sozlamalari hujjati: git help config. Windows'da u brauzerda ochiladi — Git for Windows hujjatni kompyuterga o'zi bilan olib keladi, internet shart emas.

7.2 Yangi sintaksis: get, set, unset, list

Git 2.46 ning release notes'ida yozilgan: git config ning --get kabi "rejim" flaglari eskirgan (deprecated) deb belgilandi va o'rniga aniq nomli buyruqlar qo'shildi. Rasmiy hujjatdagi moslik:

Eski shakl Yangi shakl
git config user.name git config get user.name
git config user.name "Aziz" git config set user.name "Aziz"
git config --unset user.name git config unset user.name
git config --list git config list

--global, --show-origin va --show-scope ikkala shaklda ham bir xil ishlaydi:

bash
git config get user.name
git config set --global user.email "aziz@example.com"
git config list --show-scope

Birinchisi Aziz Karimov ni chiqardi — git config user.name bilan bir xil.

Unda nega shu darsda eski shaklni yozdik? Chunki u hali ham to'liq ishlaydi va hamma joyda: Git'ning o'z xato xabarida («Author identity unknown» ni eslang), GitHub hujjatlarida va internetdagi deyarli har bir yo'riqnomada. Uni o'qiy olishingiz shart. Yangi shaklni esa o'zingiz yozishda afzal ko'ring — u aniqroq va bitta tuzoqdan himoya qiladi (buni «Ko'p uchraydigan xatolar» da ko'rasiz). Git'ning o'zi ham asta-sekin o'tyapti: standart branch haqidagi hint ning biz ... bilan qisqartirgan oxirida git config set advice.defaultBranchName false buyrug'i turibdi.

8. Local daraja: bitta repo uchun boshqa qiymat

Tasavvur qiling: Aziz ishga kirdi. Ish repolarida kompaniya emaili, shaxsiy loyihalarda — o'ziniki bo'lishi kerak. Buning uchun --global ni tashlab yozamiz, lekin repo ichida:

bash
cd bahor
git config user.email "aziz.ish@example.com"
git config --show-origin user.email
text
file:.git/config	aziz.ish@example.com

Qiymat .git/config dan — local darajadan keldi. Global qiymat esa joyida:

bash
git config --global user.email
text
aziz@example.com

Repo ichidagi .git/config faylga qaraymiz:

text
[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	symlinks = false
	ignorecase = true
[user]
	email = aziz.ish@example.com

[core] bo'limini git init o'zi yozgan — repo haqida texnik ma'lumot. Oxirgi ikki qator — bizniki. Local sozlamani olib tashlash uchun:

bash
git config --unset user.email
git config --show-origin user.email
text
file:C:/Users/.../uy/.gitconfig	aziz@example.com

Local qiymat o'chdi va global qiymat yana amalda.

Diqqat: --global siz git config repo ichida jimgina faqat shu repoga yozadi. "Hamma joyda ishlasin" desangiz — --global ni unutmang.

Repo tashqarisida esa --global siz yozish xato beradi:

bash
cd ~/kurs
git config user.email "aziz@example.com"
text
fatal: not in a git directory

Tarjimasi: "halokatli xato: Git papkasida emassiz". Local daraja — bu .git/config fayli. Repo bo'lmagan papkada bunday fayl yo'q, shuning uchun Git qiymatni yozadigan joy topa olmaydi.

9. Git Credential Manager: parol o'rniga

9.1 Muammo

Keyinroq commitlaringizni GitHub'ga yuborasiz (Remote). GitHub "siz kimsiz?" deb so'raydi. GitHub hujjatiga ko'ra, Git uchun GitHub parolingiz bilan kirish endi ishlamaydi — xavfsizroq usullar talab qilinadi. Har safar maxsus kalit (token) yaratib, uni terminalga qo'lda kiritish esa noqulay va xavfli.

9.2 Yechim

Git Credential Manager (GCM) — Git uchun kirish ma'lumotlarini xavfsiz saqlaydigan yordamchi dastur. U Git for Windows bilan birga keladi. System fayldagi credential.helper=manager qatori aynan uni yoqadi:

bash
git config --show-scope credential.helper
git credential-manager --version
text
system	manager
2.7.3+5fa7116896c82164996a609accd1c5ad90fe730a

Git for Windows 2.54 ning rasmiy release notes'ida ham yozilgan: u GCM 2.7.3 bilan keladi. + dan keyingi uzun qism — dasturning ichki yig'ilish raqami, unga e'tibor bermang.

GitHub hujjati bo'yicha GCM shunday ishlaydi:

  1. Birinchi marta GitHub bilan HTTPS orqali gaplashganda, Git sizni brauzer oynasi orqali kirishga taklif qiladi.
  2. GitHub'ga odatdagidek kirasiz va ruxsat berasiz.
  3. GCM olingan kirish ma'lumotini Windows Credential Manager ga saqlaydi. Keyingi safar hech narsa so'ralmaydi.

Hozir hech narsa qilmaysiz — faqat bilib qo'ying. Brauzer oynasi birinchi marta ochilganda qo'rqmaysiz: bu GCM ishlayapti.

macOS va Linux'da. GCM u yerda alohida o'rnatiladi. macOS'da Git parollarni tizimning Keychain'iga saqlashi mumkin. Linux serverlarda odatda boshqa yo'l — SSH kalit ishlatiladi. Uni SSH kalit darsida o'rganasiz.

Tekshirib ko'ring: Nega GCM sozlamasi global emas, system faylda turibdi?

Javob

Uni Git for Windows o'rnatuvchisi yozgan — u kompyuterdagi hamma foydalanuvchi uchun Git'ni sozlaydi. Siz hech narsa qilmasangiz ham, GCM hamma repolaringizda ishlaydi. Global faylga faqat siz o'zingiz yozgan narsalar tushadi.

10. Ko'p uchraydigan xatolar

10.1 Qo'shtirnoqsiz ism

bash
git config --global user.name Aziz Karimov
git config --global user.name
text
Aziz

Xato xabari yo'q, lekin familiya yo'qoldi! Shell bo'sh joy bo'yicha so'zlarni ajratadi (Buyruq anatomiyasi): Git uchta argument oldi — user.name, Aziz va Karimov. Ismga faqat ikkinchisi, Aziz yoziladi. Uchinchisini eski git config xato demaydi: u buni qo'shimcha shart deb tushunadi ("eski qiymat shunga o'xshasa, almashtir"). Bu shartni bilish shart emas — muhimi, familiya jimgina tushib qoldi. Tuzatish: qiymatni doim qo'shtirnoqqa oling va yozgandan keyin tekshiring.

Yangi sintaksis bu yerda sizni himoya qiladi:

bash
git config set --global user.name Aziz Karimov
text
error: wrong number of arguments, should be 2

Tarjimasi: "xato: argumentlar soni noto'g'ri, 2 ta bo'lishi kerak" — nom va qiymat. Git uchinchi so'zni jimgina "shart" deb qabul qilmaydi, balki to'xtaydi. Qiymat o'zgarmay qoladi.

10.2 Sozlama nomidagi xato

bash
git config --global user.nmae "Aziz"

Git hech narsa demadi va buyruq muvaffaqiyatli tugadi. nmae — xato yozilgan name, lekin Git uchun bu shunchaki yangi, noma'lum sozlama. U faylga yozildi va hech qachon ishlatilmaydi. Tuzatish: noto'g'ri qatorni o'chiring va nomni tekshiring:

bash
git config --global --unset user.nmae
git config --global --list

10.3 Bo'limsiz nom

bash
git config nomsiz
text
error: key does not contain a section: nomsiz

Tarjimasi: "xato: kalitda bo'lim yo'q: nomsiz". Har sozlama nomi bo'lim.nom ko'rinishida bo'lishi shart — user.name, core.editor. Nuqtasiz nomni Git tushunmaydi.

10.4 Har repoda qayta sozlash

Ba'zi boshlovchilar har yangi repoda git config user.name ... ni --global siz yozadi. Keyin yangi repoda yana "Author identity unknown" oladi. Kimlik bir marta, global darajada yoziladi. Local daraja — faqat istisno uchun (ish emaili kabi).

10.5 Boshqa kompyuterda ishlash

Kompyuter klassida yoki do'stingiz noutbukida --global bilan o'z ismingizni yozsangiz, u yerda keyin ishlagan har kim sizning nomingiz bilan commit qiladi. Begona kompyuterda local darajani ishlating yoki ishdan keyin git config --global --unset user.name bilan tozalang.

11. Mashqlar

1-mashq (oson): Qaysi daraja?

Har bir holat uchun daraja tanlang (system, global yoki local):

  1. Ismingizni kompyuterdagi hamma repolar uchun bir marta yozasiz.
  2. Faqat ish reposida kompaniya emailini ishlatasiz.
  3. Git for Windows o'rnatuvchisi core.autocrlf=true ni yozdi.
  4. .git/config faylida turgan sozlama.

Ishora: «Uch daraja» bo'limidagi jadval.

Yechim
  1. global — --global, ~/.gitconfig.
  2. local — repo ichida --global siz.
  3. system — o'rnatuvchi hamma foydalanuvchi uchun yozadi.
  4. local — .git/config repo ichida.

2-mashq (o'rta): Bo'sh joylarni to'ldiring

Malika yangi noutbuk oldi. U hamma repolari uchun ism va emailini yozmoqchi, yangi repolar main bilan boshlansin. Keyin qiymat qayerdan kelayotganini tekshiradi.

bash
git config  user.name "Malika Yusupova"
git config --global  "malika@example.com"
git config --global init.defaultBranch 
git config --get  init.defaultBranch

Ishora: daraja flagi — «To'g'ri sozlash» bo'limida, email sozlamasining nomi — «Kimligingizni aytish» sarlavhasida, "qayerdan keldi" flagi — «Hozir sizda nima bor?» bo'limida.

Yechim
bash
git config --global user.name "Malika Yusupova"
git config --global user.email "malika@example.com"
git config --global init.defaultBranch main
git config --get --show-origin init.defaultBranch

Oxirgi buyruq file:C:/Users/Malika/.gitconfig main kabi qator chiqaradi: qiymat main, u global fayldan.

3-mashq (qiyin): Stajyorning sozlamasi

Stajyor Sardor git config --list --show-scope natijasini yubordi va "commitlarim GitHub profilimda ko'rinmayapti, ismim ham chala" dedi:

text
system	core.autocrlf=true
system	credential.helper=manager
system	init.defaultbranch=master
global	user.name=Sardor
global	user.nmae=Sardor Aliyev
global	user.email=sardor@kompyuter.local
local	core.repositoryformatversion=0
local	core.filemode=false
local	core.bare=false
local	core.logallrefupdates=true
local	core.symlinks=false
local	core.ignorecase=true
local	user.email=sardor.ish@example.com
  1. Uchta muammoni toping. (local core.* qatorlarini git init o'zi yozgan — ular muammo emas.)
  2. Har birini tuzatadigan buyruqni yozing.

Ishora: «Ko'p uchraydigan xatolar» bo'limining dastlabki ikki holati, email haqidagi «Qaysi email yozish kerak?» bo'limi va standart branch haqidagi bo'lim.

Yechim
  1. Muammolar:

    • user.nmae — nom xato yozilgan, to'liq ism unda qolib ketgan. Git uni ishlatmaydi, shuning uchun commitda faqat Sardor.
    • Global email sardor@kompyuter.local — haqiqiy emas va GitHub akkauntiga bog'lanmagan. Commitlar profilda ko'rinmaydi.
    • Standart branch hali master — global darajada main yozilmagan.
    • Local email — muammo emas, agar bu ish reposi bo'lsa. Lekin u ham GitHub'ga qo'shilgan bo'lishi kerak.
  2. Tuzatish:

bash
git config --global --unset user.nmae
git config --global user.name "Sardor Aliyev"
git config --global user.email "sardor@example.com"
git config --global init.defaultBranch main
git config --list --show-scope

Email o'rniga Sardor o'z GitHub akkauntiga qo'shilgan manzilni yoki noreply manzilini yozadi.

4-mashq: Portfolio qadami — kompyuteringizni tayyorlang

Portfolio'ni keyingi darslarda Git'ga topshirasiz. Buning uchun kompyuteringiz tayyor bo'lsin.

  1. git --version — versiya 2.40 yoki yangiroq ekanini tekshiring.
  2. GitHub'da Settings → Emails sahifasini oching. Qaysi email bilan commit qilishni tanlang: akkauntga qo'shilgan ochiq manzilmi yoki noreply manzilmi.
  3. Global darajada ism, tanlangan email va init.defaultBranch main ni yozing.
  4. core.editor ni tekshiring.
  5. git config --list --show-scope natijasida global qatorlarini sanang va har birini tushuntirib bering.
Yechim
bash
git --version
git config --global user.name "Ismingiz Familiyangiz"
git config --global user.email "GitHub'dagi emailingiz"
git config --global init.defaultBranch main
git config --global core.editor
git config --list --show-scope

Natija oxirida kamida to'rtta global qator bo'lishi kerak:

text
global	user.name=Aziz Karimov
global	user.email=aziz@example.com
global	init.defaultbranch=main
global	core.editor=code --wait

Bu bizdagi natija, sizda o'z ism va emailingiz chiqadi. Ma'nosi: kim commit qiladi, qaysi email bilan, yangi repo qaysi branch bilan boshlanadi, xabar qaysi muharrirda yoziladi. core.editor bo'sh chiqsa — «core.editor: tekshirish» bo'limidagi buyruqni bajaring.

12. Real ishda

  • Birinchi ish kuni. Yangi ish kompyuterida birinchi ishlardan biri — user.name va user.email. Ko'p kompaniyalarda ish emaili talab qilinadi: undan commit muallifi tekshiriladi.
  • Ikki kimlik. Shaxsiy va ish loyihalari bitta noutbukda bo'lsa, ish repolariga local email yoziladi. Tajribali dasturchilar buni avtomatlashtiradi — includeIf sozlamasi bilan (papkaga qarab boshqa fayl ulanadi). Bu hozir shart emas.
  • Dotfiles. Ko'p dasturchilar .gitconfig va boshqa sozlama fayllarini alohida repoda saqlaydi. Yangi kompyuterda bir buyruq bilan hammasi tiklanadi.
  • Intervyuda so'raladi: "Git sozlamalari qaysi darajalarda bo'ladi va qaysi biri ustun?", "Nega GitHub'da parol bilan push qilib bo'lmaydi?" Endi javobingiz tayyor.

Xulosa

  • Git allaqachon o'rnatilgan — git --version bilan tekshiriladi; Windows'da u Git for Windows nashri.
  • Sozlamalar uch darajada: system, global (~/.gitconfig), local (.git/config); yaqinrog'i ustun.
  • user.name va user.email global darajada bir marta yoziladi; email ochiq bo'ladi va GitHub akkauntiga bog'langan bo'lsin.
  • init.defaultBranch main — yangi repolar GitHub va Git 3.0 bilan bir xil nomda boshlanadi.
  • --show-origin va --show-scope qiymat qayerdan kelganini ko'rsatadi.
  • GCM parol o'rniga brauzer orqali kirishni boshqaradi va ma'lumotni Windows Credential Manager'da saqlaydi.

Keyingi dars: Uch hudud: working tree, staging area, repository — Git fayllarni qaysi uch joy orasida ko'chirishini ko'ramiz.

Manbalar

  • Git hujjati: "git-config" (FILES, --show-origin, --show-scope) — git-scm.com/docs/git-config
  • Git hujjati: "BreakingChanges" (Git 3.0 da main) — git-scm.com/docs/BreakingChanges
  • Git for Windows 2.54.0 Release Notes (GCM 2.7.3) — gitforwindows.org
  • GitHub Docs: "Caching your GitHub credentials in Git", "About remote repositories", "Setting your commit email address" — docs.github.com
Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
Git'ni o'rnatish va birinchi sozlash: git config, ism, email va main — IlmHamroh