Fork — nima, qachon kerak, fork workflow
Muammodan boshlaylik
Siz ishlatadigan ochiq kodli kutubxonada (masalan, mashhur React komponentlari to'plami) xato topdingiz va uni qanday tuzatishni bilasiz. Lekin:
git clone https://github.com/kutubxona/ui.git
# ... tuzatish ...
git push
remote: Permission to kutubxona/ui.git denied to otabek.
fatal: unable to access 'https://github.com/kutubxona/ui.git/': The requested URL returned error: 403
Albatta — begona loyihaga yozish huquqingiz yo'q. Aks holda har kim istalgan loyihani buzishi mumkin edi. Unda qanday hissa qo'shasiz?
Fork orqali.
Fork nima?
Fork — boshqa birovning repozitoriysining GitHub dagi sizning hisobingizdagi to'liq nusxasi. Unda siz to'liq egasiz: push qilishingiz, branch yaratishingiz mumkin.
github.com/kutubxona/ui (upstream — asl loyiha)
│
│ Fork tugmasi
▼
github.com/otabek/ui (origin — sizning nusxangiz)
│
│ git clone
▼
Sizning kompyuteringiz
Keyin o'z fork ingizdan asl loyihaga Pull Request ochasiz. Loyiha egalari uni ko'rib chiqadi va qabul qiladi yoki rad etadi.
Fork workflow — qadam-baqadam
1. Fork qilish
Asl repozitoriy sahifasida — o'ng yuqorida Fork tugmasi → Create fork.
Yoki:
gh repo fork kutubxona/ui --clone
2. O'z fork ingizni clone qilish
git clone git@github.com:otabek/ui.git
cd ui
3. Asl loyihani upstream sifatida qo'shish
git remote add upstream https://github.com/kutubxona/ui.git
git remote -v
origin git@github.com:otabek/ui.git (fetch)
origin git@github.com:otabek/ui.git (push)
upstream https://github.com/kutubxona/ui.git (fetch)
upstream https://github.com/kutubxona/ui.git (push)
- origin — sizning fork ingiz: bu yerga push qilasiz
- upstream — asl loyiha: bu yerdan yangiliklarni olasiz
4. Branch da ishlash
git switch -c fix/button-focus-ring
# ... tuzatish, test, commit ...
git push -u origin fix/button-focus-ring
[!WARNING] Fork ning
mainida ishlamang — har doim alohida branch. Aks holda fork ingizningmaini asl loyihadan ajralib ketadi va keyingi PR lar chalkash bo'ladi.
5. Pull Request ochish
GitHub o'zi taklif qiladi: "Compare & pull request". PR sahifasida:
- base repository:
kutubxona/ui, base:main - head repository:
otabek/ui, compare:fix/button-focus-ring
Fork ni yangilab turish
Siz ishlayotgan paytda asl loyihada yangi commitlar paydo bo'ladi. Fork avtomatik yangilanmaydi.
git switch main
git fetch upstream
git merge upstream/main # yoki: git rebase upstream/main
git push origin main # fork dagi main ni ham yangilash
Yoki GitHub da fork sahifasida — Sync fork → Update branch.
Feature branch ni yangilash (PR conflict bersa):
git switch fix/button-focus-ring
git fetch upstream
git rebase upstream/main
git push --force-with-lease # o'z branch ingiz — xavfsiz (17-dars)
Ochiq loyihaga hissa qo'shish odobi
Ochiq loyiha egalari — ko'pincha bo'sh vaqtida ishlaydigan ko'ngillilar. Ularning vaqtini hurmat qiling:
CONTRIBUTING.mdni o'qing — loyihaning qoidalari: kod uslubi, testlar, commit formati- Avval issue oching (katta o'zgarishlar uchun) — "Men X ni qo'shmoqchiman, qabul qilasizmi?" 2 hafta ishlab, keyin "bu loyiha yo'nalishiga mos emas" eshitish — achinarli
- Mavjud issue larni qidiring — balki kimdir allaqachon ishlayapti
- Kichik boshlang — hujjatdagi xato, typo, kichik bug.
good first issueyorlig'i — yangi hissa qo'shuvchilar uchun - Testlar va lint — PR dan oldin lokalda ishga tushiring
- Sabr qiling — javob kunlar yoki haftalar olishi mumkin
[!TIP] Birinchi ochiq kodli hissa uchun: GitHub da
label:"good first issue"bo'yicha qidiring, yoki goodfirstissue.dev va firstcontributions — mashq uchun maxsus repozitoriy.
Fork yana qachon ishlatiladi
- Loyihani o'z yo'nalishingizda rivojlantirish — asl loyiha tashlab ketilgan yoki siz boshqacha yo'l tanlaysiz. Mashhur misollar: LibreOffice (OpenOffice fork i), MariaDB (MySQL fork i), OpenTofu (Terraform fork i)
- Shablon sifatida — lekin buning uchun GitHub da Template repository yaxshiroq ("Use this template" — fork bog'lanishisiz toza nusxa)
- Kompaniya ichida — ba'zi jamoalar hatto ichki loyihalarda ham fork workflow ishlatadi: hech kim asosiy repozitoriyga to'g'ridan-to'g'ri yozmaydi
Jamoa ichida, umumiy repozitoriyga yozish huquqi bo'lsa — fork shart emas: oddiy branch + PR (23-dars) yetarli.
Nima uchun shunday?
Nima uchun fork GitHub dagi nusxa — oddiy clone dan keyin PR ochib bo'lmaydimi?
Chunki PR — ikki GitHub repozitoriy orasidagi so'rov. Asl loyiha egasi sizning kompyuteringizdagi branch ni ko'ra olmaydi; u faqat GitHub dagi narsani ko'radi. Fork — sizning o'zgarishlaringiz uchun ommaviy joy: siz unga yozasiz (chunki u sizniki), egasi esa undan o'qiydi (chunki u ommaviy). Bu model millionlab notanish odamlarga bir-birining loyihalariga xavfsiz hissa qo'shish imkonini berdi — hech kimga yozish huquqi bermasdan. GitHub ning ochiq kod dunyosidagi muvaffaqiyati aynan shu oddiy "Fork → PR" mexanizmiga asoslangan.
Xulosa
Eslab qoling:
- Fork — begona repozitoriyning GitHub dagi sizning nusxangiz
- Workflow: Fork → clone →
upstreamqo'shish → branch → push (origin ga) → PR (upstream ga) origin— sizning fork;upstream— asl loyiha- Fork ning
mainida ishlamang — branch lar - Yangilash:
git fetch upstream→merge/rebase upstream/main→push origin main; yoki "Sync fork" - Odob: CONTRIBUTING.md, avval issue, kichik PR, testlar, sabr
good first issue— birinchi hissa uchun- Jamoa ichida yozish huquqi bo'lsa — fork shart emas
Keyingi dars
25-dars: Issue — loyihada muammo bildirish, label, assignee, milestone