git clone — remote loyihani yuklab olish, HTTPS va SSH farqi
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:
- Yangi papka yaratadi (repozitoriy nomi bilan)
git initoriginremote ni qo'shadi (19-dars)- Barcha ma'lumotlarni yuklaydi — butun tarix, barcha branch lar
- 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/configda 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,origingit 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