Mundarija (29)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Remote nima?
- 2.2. SSH vs HTTPS (ulanish)
- 2.3. Repo yaratish va ulash
- 2.4. Push — kodni yuklash
- 2.5. Pull va Fetch — kodni olish
- 2.6. Pull Request (PR) — jamoaviy ishning yuragi
- 2.7. PR ish sikli (amaliy)
- 2.8. Fork — boshqaning loyihasiga hissa
- 2.9. Remote bilan ishlash buyruqlari
- 2.10. GitHub CLI (gh) — terminaldan chiqmasdan ishlash
- 3. Sintaksis — tez ma'lumotnoma
- 4. Batafsil amaliy namunalar
- Misol 1 — Lokal loyihani GitHub'ga (2.3)
- Misol 2 — Kundalik push/pull (2.4, 2.5)
- Misol 3 — Pull Request sikli (2.7)
- Misol 4 — Ochiq kodga hissa (fork — 2.8)
- 5. To'g'ri va noto'g'ri holatlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu mavzu stack'ning qayerida uchraydi
- 8. Eng yaxshi amaliyotlar (best practices)
- 9. Amaliy loyiha: "GitHub'da To'liq Hamkorlik Sikli"
- Maqsad
- Talablar (requirements)
- Maslahatlar (hint)
- "Tayyor" mezonlari (acceptance criteria)
- 10. Xulosa va keyingi bobga ko'prik
- Foydalanilgan rasmiy/ishonchli manbalar
GitHub bilan ishlash — remote, push, pull, Pull Request va fork (4.3-bob)
4-QISM — Git va hamkorlik · 3-mavzu
1. Kirish va motivatsiya
Lokal Git'ni (4.1, 4.2) bildik — lekin u faqat sizning kompyuteringizda edi. Real ishda kod bulutda saqlanadi, jamoa u bilan ishlaydi, siz uni boshqa joydan ham olasiz. GitHub — aynan shu: Git loyihalarini saqlash, ulashish va hamkorlik qiladigan dunyodagi eng katta platforma.
GitHub — shunchaki "backup" emas. U — dasturchining portfeli (ish beruvchilar ko'radi), ochiq kod dunyosi (millionlab loyiha), va jamoaviy ishning yuragi: Pull Request orqali kod ko'rib chiqiladi, muhokama qilinadi, sifatli holatda birlashtiriladi.
O'xshatish: lokal Git — uyingizdagi shaxsiy daftar. GitHub — umumiy kutubxona (bulut): daftaringizni u yerga qo'yasiz (push), boshqalar o'qiydi, nusxa oladi, hissa qo'shadi. Pull Request — "men shu o'zgarishni taklif qilaman; ko'rib chiqing, ma'qul bo'lsa qo'shing" degan rasmiy taklif.
Nega muhim?
- Hamkorlik — jamoa bir loyihada (PR, code review — 15.2).
- Portfolio — GitHub profilingiz ish beruvchilarga ko'rinadi 15.8-bob.
- Ochiq kod — millionlab loyiha; hissa qo'shish 15.8-bob.
- CI/CD 10.5-bob, deploy (10), GitHub Actions — GitHub ustida.
GitHub — koddan ko'p: kod saqlashdan tashqari, Issues (vazifa/xato kuzatuvi — "bu yerda bug bor", "shu funksiya kerak" deb yoziladi, muhokama qilinadi), Actions (avtomatlashtirish/CI — push'da test, deploy — 10.5), Projects (kanban taxta) ham bor. Loyiha shu yerda boshqariladi, nafaqat saqlanadi.
2. Nazariya — chuqur tushuntirish
2.1. Remote nima?
Remote — loyihaning uzoq (bulut) nusxasi (GitHub'dagi). Lokal repo 4.1-bob bilan remote o'rtasida kod push (yuklash) va pull (olish) qilinadi:
Lokal (sizning kompyuter) ←──push/pull──→ Remote (GitHub)
.git originorigin — remote'ning standart nomi (odatda asosiy GitHub repo).
2.2. SSH vs HTTPS (ulanish)
GitHub'ga ulanishning ikki usuli 0.4-bob:
- HTTPS —
https://github.com/user/repo.git; har push'da parol/token so'raydi (yoki credential manager). - SSH —
git@github.com:user/repo.git; bir marta SSH kalit (0.2:600ruxsat — 10.1) sozlanadi, keyin parolsiz.
SSH afzal (bir marta sozlasangiz, qulay). SSH kalit yaratish:
ssh-keygen10.1-bob; ochiq kalitni GitHub sozlamalariga qo'shasiz.
2.3. Repo yaratish va ulash
Usul 1 — GitHub'da yaratib, lokalga olish (clone):
git clone https://github.com/user/repo.git # to'liq nusxa + tarix (0.4)
cd repoUsul 2 — Lokalni GitHub'ga ulash:
# GitHub'da bo'sh repo yaratasiz, keyin:
git remote add origin https://github.com/user/repo.git # remote ulash
git branch -M main # branch nomi
git push -u origin main # birinchi push2.4. Push — kodni yuklash
git push # joriy branch'ni remote'ga yuklaydi
git push origin main # aniq: origin remote'ga main branch
git push -u origin feature-x # yangi branch'ni birinchi marta (-u: bog'laydi)
-u(upstream) — lokal va remote branch'ni bog'laydi; keyin shunchakigit push/git pullyetadi.
2.5. Pull va Fetch — kodni olish
git fetch # remote o'zgarishlarini OLADI (lekin merge QILMAYDI)
git pull # fetch + merge (oladi va birlashtiradi)
git pull origin main # aniq
fetchvspull:fetch— o'zgarishlarni ko'rib chiqish uchun oladi (xavfsiz, merge yo'q).pull=fetch+merge(darrov birlashtiradi). Ehtiyot bo'lsangiz — avvalfetch, ko'ring, keyin merge.
2.6. Pull Request (PR) — jamoaviy ishning yuragi
Pull Request — "men shu branch'dagi o'zgarishni asosiy kodga qo'shishni taklif qilaman" degan rasmiy so'rov. Bu — kodni ko'rib chiqish (code review — 15.2) va muhokama qilish nuqtasi:
1. feature branch'da ishlash 4.2-bob → push qilish
2. GitHub'da "Pull Request" ochish (feature → main)
3. Jamoa kodni KO'RIB CHIQADI (review), izoh yozadi
4. CI/CD avtomatik test ishlaydi 10.5-bob
5. Ma'qullansa → MERGE (main'ga qo'shiladi)
6. branch o'chiriladiPR — nega muhim: kod boshqa ko'z bilan ko'riladi (xato/yaxshilash topiladi); avtomatik testlar 10.5-bob ishlaydi; tarix muhokama bilan hujjatlanadi. Hech qachon
mainga to'g'ridan-to'g'ri push qilinmaydi — doim PR orqali (jamoa qoidasi).
Protected branch (himoyalangan branch): GitHub'da
mainni sozlamalardan himoyaga olish mumkin — to'g'ridan-to'g'ri push bloklanadi, o'zgarish faqat PR orqali, review va CI o'tgachgina merge bo'ladi. Bu — yuqoridagi qoidani "iltimos" emas, majburiy qiladi (jamoa loyihalarida standart).
2.7. PR ish sikli (amaliy)
# 1. main'ni yangilash
git switch main && git pull
# 2. feature branch
git switch -c feature-login
# (kod yozish, commit qilish — 4.1, 4.2)
# 3. push qilish
git push -u origin feature-login
# 4. GitHub'da PR ochish (web interfeys): feature-login → main
# - tavsif yozish, reviewer tayinlash
# 5. Review + CI o'tgach → "Merge" tugmasi
# 6. Lokalda tozalash
git switch main && git pull && git branch -d feature-login2.8. Fork — boshqaning loyihasiga hissa
Fork — boshqaning repo'sining o'z hisobingizga nusxasi (ochiq kodga hissa uchun — 15.8):
1. GitHub'da loyihani FORK qilish (o'z hisobingizga nusxa)
2. Fork'ni clone qilish (lokalga)
3. branch'da o'zgarish 4.2-bob → o'z fork'ingizga push qilish
4. ASL loyihaga Pull Request ochish (fork → asl repo)
5. Loyiha egasi ko'rib, ma'qullasa — qo'shadiFork vs Branch: branch — o'zingizning repo ichida. Fork — boshqaning repo'sini o'zingizga nusxalash (yozish huquqingiz yo'q loyihaga hissa qo'shish uchun). Ochiq kod (open source) hissasining standart yo'li.
originvsupstream(fork'ni yangilash): fork qilganda ikki remote bo'ladi —origin(sizning fork'ingiz) vaupstream(asl loyiha). Asl loyiha oldinga ketadi; fork'ingiz orqada qoladi. Yangilab turish uchun asl repo'niupstreamqilib qo'shasiz va undanpullqilasiz:bashgit remote add upstream https://github.com/asl-egasi/repo.git # asl repo git fetch upstream && git merge upstream/main # yangilash
2.9. Remote bilan ishlash buyruqlari
git remote -v # remote'lar ro'yxati
git remote add origin <url> # remote qo'shish
git remote remove origin # o'chirish
git clone <url> # to'liq nusxa olish2.10. GitHub CLI (gh) — terminaldan chiqmasdan ishlash
Professional dasturchilar brauzer va terminal o'rtasida tinimsiz sakrashdan qochishadi. Rasmiy GitHub CLI (gh) vositasi GitHub'ning deyarli barcha funksiyalarini to'g'ridan-to'g'ri terminalda bajarish imkonini beradi:
# 1. GitHub hisobiga ulanish (bir marta qilinadi)
gh auth login
# 2. PR ochish (brauzerga kirmasdan!)
gh pr create --title "feat(auth): Google OAuth qo'shildi" --body "Tizimga Google orqali kirish integratsiya qilindi."
# 3. Hamkasbingiz ochgan PR'ni lokalda tekshirish (avtomatik branch ochib beradi):
gh pr checkout 42
# 4. Review qilish va ma'qullash
gh pr review --approve -b "LGTM! Zo'r yozilibdi."
# 5. Birlashtirish va branch'ni o'chirish (Squash & Delete)
gh pr merge 42 --squash --delete-branch
# 6. Issue ro'yxatini ko'rish va yangi vazifa ochish
gh issue list
gh issue create --title "Redis ulanish xatosi" --body "Cluster rejimida ulanish uzilmoqda."Foydasi: Brauzerni ochib, sichqoncha bilan tugmalar bosish o'rniga, terminalda bitta buyruq bilan PR ochish va review qilish jamoada ishlash tezligini 3-4 barobarga oshiradi.
3. Sintaksis — tez ma'lumotnoma
# Ulash
git clone <url> # nusxa olish
git remote add origin <url> # remote ulash
git push -u origin main # birinchi push
# Kundalik
git push # yuklash
git pull # olish + merge
git fetch # olish (merge'siz)
# PR sikli: branch → push -u → GitHub PR → review → merge → branch -d
# Fork: fork → clone → branch → push → PR (asl repo'ga)4. Batafsil amaliy namunalar
Misol 1 — Lokal loyihani GitHub'ga (2.3)
# Lokal loyiha tayyor (4.1: git init, commit'lar bor)
# GitHub'da bo'sh "todo-app" repo yaratdik, keyin:
git remote add origin https://github.com/ali/todo-app.git # ulash
git branch -M main
git push -u origin main # birinchi push (butun tarix yuklanadi)
# Endi GitHub'da kod ko'rinadiMisol 2 — Kundalik push/pull (2.4, 2.5)
# Ish boshida — eng so'nggi o'zgarishlarni olish
git pull # (jamoadagilar o'zgartirgan bo'lishi mumkin)
# (kod yozish, commit qilish — 4.1)
git add . && git commit -m "Profil sahifasi qo'shildi"
# Ishni yuklash
git push # remote'gaMisol 3 — Pull Request sikli (2.7)
git switch main && git pull # yangilash
git switch -c feature-search # branch (4.2)
echo "qidiruv kodi" > search.js
git add . && git commit -m "Qidiruv funksiyasi qo'shildi"
git push -u origin feature-search # push qilish
# GitHub'da: feature-search → main PR ochiladi
# Tavsif: "Qidiruv funksiyasi: nom bo'yicha real-time qidiruv"
# Review + CI o'tgach → Merge
git switch main && git pull # merge'ni lokalga olish
git branch -d feature-search # branch tugadiMisol 4 — Ochiq kodga hissa (fork — 2.8)
# 1. GitHub'da "awesome-project" ni FORK qildik → github.com/ali/awesome-project
git clone https://github.com/ali/awesome-project.git # o'z fork'ni clone qilish
cd awesome-project
git switch -c fix-typo # branch
# (xatoni tuzatish)
git add . && git commit -m "docs: README imlo xatosi tuzatildi"
git push -u origin fix-typo # o'z fork'ingizga
# 2. GitHub'da ASL loyihaga PR ochish (fork:fix-typo → asl:main)
# 3. Loyiha egasi ko'rib, ma'qullasa — qo'shadi (siz hissa qo'shdingiz!)5. To'g'ri va noto'g'ri holatlar
1) mainga to'g'ridan-to'g'ri push (jamoada)
# ❌ review'siz to'g'ridan main'ga (jamoa qoidasini buzadi — 2.6)
git switch main && git push
# ✅ feature branch → PR → review → merge (2.7)2) Push'dan oldin pull qilmaslik
# ❌ eski kod ustiga push → rad etiladi yoki conflict
git push # (remote sizdan oldinda)
# ✅ avval pull (yangilash), keyin push (2.5)
git pull && git push3) Maxfiy ma'lumotni push qilish
# ❌ .env, parol, API kalit GitHub'ga (4.5, 14)
git add . && git push # (.env ham ketdi!)
# ✅ .gitignore bilan istisno 4.5-bob; tasodifan ketsa — kalitni BEKOR qiling4) Push qilingan commit'ni amend/rebase qilish
# ❌ jamoa ishlatayotgan tarixni o'zgartirish (4.1, 4.2)
git commit --amend && git push --force
# ✅ push qilingach tarixni o'zgartirmang; yangi commit qiling6. Keng tarqalgan xatolar va yechimlari
Xato 1 — Updates were rejected (non-fast-forward)
Sababi: remote'da sizda yo'q commit'lar bor (kimdir push qilgan — 2.5). Yechimi: git pull (yangilang, conflict bo'lsa yeching — 4.2), keyin git push.
Xato 2 — Permission denied (publickey)
Sababi: SSH kalit sozlanmagan/noto'g'ri (2.2, 0.2). Yechimi: SSH kalit yarating (ssh-keygen), GitHub'ga qo'shing; yoki HTTPS ishlating.
Xato 3 — remote origin already exists
Sababi: remote allaqachon ulangan 2.9-bob. Yechimi: git remote -v (tekshiring); git remote set-url origin <url> (o'zgartirish).
Xato 4 — Maxfiy ma'lumot push qilindi
Sababi: .gitignore yo'q yoki kech 4.5-bob. Yechimi: kalitni darrov bekor qiling (yangisini yaratish — 14); tarixdan tozalash murakkab.
Xato 5 — fatal: refusing to merge unrelated histories
Sababi: ikki mustaqil tarix (masalan GitHub'da README bor, lokalda boshqa). Yechimi: git pull origin main --allow-unrelated-histories (ehtiyot bilan).
7. Integratsiya — bu mavzu stack'ning qayerida uchraydi
- Git asoslari/branch (4.1, 4.2): lokal commit/branch'lar remote'ga.
- Git workflow 4.4-bob: PR strategiyasi.
- CI/CD 10.5-bob: PR/push'da GitHub Actions avtomatik test/deploy.
- Code review 15.2-bob: PR — review nuqtasi.
- Xavfsizlik (14, 4.5): secrets'ni push qilmaslik.
- Deploy (10, 13.11): GitHub'dan Vercel/server.
- Portfolio/open source 15.8-bob: GitHub profili, fork hissasi.
8. Eng yaxshi amaliyotlar (best practices)
mainga to'g'ridan-to'g'ri push qilmang — doim PR orqali (jamoa — 2.6).- Push'dan oldin
pullqiling — yangilang, conflict'ni erta hal qiling 2.5-bob. - SSH sozlang — qulay, xavfsiz 2.2-bob.
- Mazmunli PR tavsifi — nima, nega, qanday sinash 2.6-bob.
- Maxfiy ma'lumotni hech qachon push qilmang —
.gitignore(4.5, 14). - Push qilingan tarixni o'zgartirmang (amend/force — 4-holat).
- Kichik, fokuslangan PR'lar — review oson; katta PR — qiyin.
- Branch'ni merge'dan keyin o'chiring (GitHub avtomatik taklif qiladi).
9. Amaliy loyiha: "GitHub'da To'liq Hamkorlik Sikli"
GitHub, push/pull, PR va fork'ni amalda mustahkamlash.
Maqsad
Remote ulash, push/pull, Pull Request sikli va fork orqali hissa qo'shishni o'zlashtirish.
Talablar (requirements)
- GitHub hisob + SSH: SSH kalit yaratib, GitHub'ga ulang 2.2-bob; yoki HTTPS token.
- Loyihani yuklash: lokal loyihani 4.1-bob GitHub'ga push qilish (Misol 1); README,
.gitignorebilan 4.5-bob. - Push/pull sikli: o'zgartirish → commit → push; boshqa joydan (yoki GitHub web) o'zgartirib,
pullbilan olish (Misol 2). - Pull Request: feature branch → push → GitHub'da PR ochish → (o'zingiz review qilib) merge → branch'ni o'chirish (Misol 3).
- PR tavsifi: mazmunli (nima, nega, qanday sinash — 2.6).
- Fork hissasi: biror ochiq loyihani (yoki do'stingizning repo'sini) fork qilish → tuzatish → PR ochish (Misol 4, 15.8).
- Conflict simulyatsiyasi: GitHub'da faylni o'zgartiring, lokalda ham;
pull→ conflict → yechish 4.2-bob. - README'ni chiroyli to'ldiring (loyiha tavsifi, ishga tushirish — 0.7).
Maslahatlar (hint)
- SSH:
ssh-keygen -t ed25519, ochiq kalitni GitHub Settings → SSH keys. - Birinchi push:
git push -u origin main2.3-bob. - PR: GitHub'da branch push qilingach "Compare & pull request" tugmasi.
- Push rad etilsa:
git pull(2.5, 6-xato). .env/secrets'ni hech qachon push qilmang 4.5-bob.- Fork: asl repo'da "Fork" tugmasi, keyin o'z nusxangizni clone qilish.
"Tayyor" mezonlari (acceptance criteria)
- SSH/HTTPS bilan GitHub'ga ulanish ishlaydi.
- Loyiha GitHub'da, README + .gitignore bilan.
- Push/pull sikli ishlaydi.
- Kamida bitta to'liq PR (branch → PR → merge → o'chirish).
- PR tavsifi mazmunli.
- Fork orqali biror repo'ga PR ochilgan.
- Conflict yaratilgan va yechilgan.
- Maxfiy ma'lumot push qilinmagan.
Yechim kodi ataylab berilmagan — bu loyihani o'zingiz yozib ko'ring.
10. Xulosa va keyingi bobga ko'prik
Bu bobda Git'ni bulutga ulashni — GitHubni o'rgandik:
- Remote — loyihaning bulut nusxasi (
origin); SSH (qulay) yoki HTTPS bilan ulanadi. clone(nusxa olish),push(yuklash),pull(olish + merge),fetch(olish, merge'siz).- Pull Request — o'zgarishni taklif qilish; code review + CI nuqtasi;
mainga doim PR orqali. - Fork — boshqaning repo'sini o'zingizga nusxalab, ochiq kodga hissa (PR bilan).
- Best: PR orqali ish, push'dan oldin pull, secrets'ni push qilmaslik, tarixni o'zgartirmaslik.
Keyingi bob — 4.4-bob: Git workflow'lar (Gitflow, trunk-based). Git buyruqlarini bildik; endi jamoa ularni qanday tartibda ishlatishini — workflow strategiyalarini — o'rganamiz. Gitflow (rejali relizlar) va trunk-based (uzluksiz yetkazib berish) — qaysi loyihada qaysi biri to'g'ri kelishi.
Foydalanilgan rasmiy/ishonchli manbalar
- docs.github.com — GitHub flow, Pull Requests, fork
- git-scm.com — remote, push/pull/fetch/clone
- Atlassian — comparing workflows, syncing with remotes
O'qiganingizni mustahkamlang
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!