git clone — remote loyihani yuklab olish, HTTPS va SSH farqi

~15 daq · Git · GitHub bilan ishlash

Muammodan boshlaylik

Yangi ishga keldingiz. Birinchi kun: "Loyiha GitHub da — kompaniya/dokon. Yuklab olib, ishga tushiring."

Yoki: GitHub da qiziq ochiq loyihani topdingiz va uni o'z kompyuteringizda ko'rmoqchisiz.

"Download ZIP" tugmasi bor — lekin u faqat fayllarni beradi: tarix yo'q, branch lar yo'q, push qilib bo'lmaydi, yangilanishlarni olib bo'lmaydi. Kerak — to'liq repozitoriy. Bu — git clone.


Asosiy foydalanish

git clone git@github.com:kompaniya/dokon.git
Cloning into 'dokon'...
remote: Enumerating objects: 2847, done.
remote: Counting objects: 100% (2847/2847), done.
remote: Compressing objects: 100% (1203/1203), done.
Receiving objects: 100% (2847/2847), 4.21 MiB | 3.50 MiB/s, done.
Resolving deltas: 100% (1542/1542), done.
cd dokon
git log --oneline | wc -l       # butun tarix — barcha commitlar
git remote -v                   # origin avtomatik sozlangan
git branch -a                   # barcha remote branch lar

git clone bitta buyruqda:

  1. Yangi papka yaratadi (repozitoriy nomi bilan)
  2. git init
  3. origin remote ni qo'shadi (19-dars)
  4. Barcha ma'lumotlarni yuklaydi — butun tarix, barcha branch lar
  5. Standart branch ni (main) ishchi papkaga chiqaradi

Boshqa papka nomi

git clone git@github.com:kompaniya/dokon.git dokon-backend
git clone git@github.com:kompaniya/dokon.git .          # joriy (bo'sh) papkaga

Aniq branch

git clone -b develop git@github.com:kompaniya/dokon.git

Clone dan keyin — loyihani ishga tushirish

Clone faqat kodni beradi. .gitignore dagi narsalar (11-dars) — kelmaydi:

cd dokon
cat README.md              # 1. Qo'llanmani o'qing — har doim!
npm install                # 2. Bog'liqliklar (node_modules)
cp .env.example .env       # 3. Muhit sozlamalari — qiymatlarni to'ldiring
npm run dev                # 4. Ishga tushirish

Yaxshi loyihaning README si aynan shu qadamlarni yozadi. Yozilmagan bo'lsa — uni yozib, birinchi PR ingizni qiling.


HTTPS yoki SSH

GitHub da Code tugmasi uchta variant beradi:

HTTPS SSH
URL https://github.com/kompaniya/dokon.git git@github.com:kompaniya/dokon.git
Ommaviy repo ni clone ✅ Hech narsa so'ramaydi Kalit kerak (bo'lsa ham)
Yopiq repo / push Token yoki credential manager SSH kalit (4-dars)
Firewall lar 443-port — deyarli hamma joyda ochiq 22-port — ba'zi ofis tarmoqlarida yopiq
Har kunlik qulaylik Credential manager eslab qoladi Hech narsa so'ramaydi

Qoida:

  • O'z va jamoa loyihalaringiz — SSH (bir marta sozlang, unuting)
  • Ommaviy loyihani faqat o'qish uchun — HTTPS (tez, sozlash shart emas)
  • Korporativ tarmoq 22-portni bloklasa — HTTPS yoki SSH ni 443-port orqali (ssh.github.com)

HTTPS va token

HTTPS da push qilishda parol o'rniga Personal Access Token kerak:

GitHub → Settings → Developer settings → Personal access tokens → Fine-grained tokens → Generate. Faqat kerakli repozitoriylar va ruxsatlarni bering, muddatini belgilang.

Windows dagi Git Credential Manager (Git bilan o'rnatiladi) buni avtomatik qiladi: birinchi push da brauzer ochiladi, GitHub ga kirasiz — tayyor.

[!WARNING] Token ni URL ga yozmang (https://TOKEN@github.com/...) — u .git/config da va terminal tarixida ochiq qoladi. Credential manager yoki SSH dan foydalaning.

GitHub CLI bilan

gh repo clone kompaniya/dokon

gh (54-dars) — autentifikatsiyani o'zi boshqaradi va qisqa nomlar bilan ishlaydi.


Katta repozitoriylar

Ba'zi loyihalar (Linux yadrosi, katta monorepo lar) — gigabaytlab tarix. Butun tarix kerak bo'lmasa:

Shallow clone — faqat oxirgi commitlar

git clone --depth 1 https://github.com/torvalds/linux.git

Faqat oxirgi commit — tarix yo'q. Ko'p barobar tezroq va kichikroq. CI tizimlari va Docker build larda (Docker kursi) tez-tez ishlatiladi.

Kamchiliklari: git log, blame, bisect ishlamaydi; push qilish cheklangan. Keyinroq to'liq tarix kerak bo'lsa:

git fetch --unshallow

Partial clone — fayllar kerak bo'lganda

git clone --filter=blob:none git@github.com:kompaniya/dokon.git

Butun tarix (commitlar, tuzilma) yuklanadi, lekin eski fayllar mazmuni — faqat kerak bo'lganda. Kundalik ish uchun to'liq clone ga juda yaqin, lekin ancha tezroq. Katta repozitoriylar uchun eng yaxshi variant.


Clone va Fork farqi

Clone Fork
Qayerda Sizning kompyuteringizga GitHub da, sizning hisobingizga
Nima Lokal nusxa Server tomonidagi nusxa
Asl repo ga push Faqat ruxsatingiz bo'lsa Yo'q — PR orqali
Qachon Har doim, ishlash uchun Begona loyihaga hissa qo'shish (24-dars)

Ko'pincha ikkalasi birga: avval GitHub da fork, keyin o'z fork ingizni clone.


Nima uchun shunday?

Nima uchun clone butun tarixni yuklaydi — menga faqat hozirgi kod kerak-ku?

Chunki Git — taqsimlangan tizim (1-dars): har bir nusxa teng huquqli va to'liq. Butun tarix lokalda bo'lgani uchun log, blame, diff, branch almashtirish — hammasi bir zumda, internetsiz ishlaydi. GitHub ishlamay qolsa yoki yo'qolsa — har bir dasturchining kompyuterida to'liq zaxira bor. Va siqish tufayli bu ko'pincha kutilgandan kichikroq: yillik tarixga ega o'rtacha loyiha — bir necha megabayt. Juda katta loyihalar uchun esa --depth va --filter bor — tanlov sizda.


Xulosa

Eslab qoling:

  • git clone URL — to'liq repozitoriy: fayllar, tarix, branch lar, origin
  • git clone URL papka-nomi; -b branch — aniq branch
  • Clone dan keyin: README → npm install → .env → ishga tushirish
  • SSH — o'z loyihalaringiz uchun; HTTPS — ommaviylarni o'qish yoki firewall bo'lsa
  • HTTPS da push — token yoki credential manager, URL da token emas
  • --depth 1 — shallow (CI, Docker); --filter=blob:none — katta repo lar uchun
  • Clone — lokal nusxa; Fork — GitHub dagi nusxa

Keyingi dars

21-dars: git push — o'zgarishlarni GitHub ga yuborish, upstream sozlash