Git va GitHub β Noldan boshlovchilar uchun amaliy kitob¶
Bu kitob hech qachon versiya nazorati ishlatmagan odam ham tushunadigan tilda yozilgan. Git'ni terminal qora oynasidan qo'rqmasdan, GitHub'ni esa "tugmalar o'rmoni"dek emas, mantiqan tushunib o'rganasiz. Har bobda: sodda nazariya -> tayyor, sinab tekshirilgan buyruqlar -> 20 ta mashq (o'zingiz bajarasiz). Jami 24 bob, 480 mashq.
π¨ Har bob SVG diagrammalar bilan boyitilgan β uch zona, branch, merge va rebase, remote/push/pull, PR oqimi kabi tushunchalar ko'z bilan ko'rib o'rganiladi.
Qoida: Git o'qib o'rganilmaydi β YOZIB o'rganiladi. Har bir buyruqni kompyuterda o'zingiz tering. Xato chiqsa β bu yaxshi, xatodan o'rganasiz (bu kitob xatodan qaytishni ham o'rgatadi).
Fayllarni loyiha_final_v2.zip deb saqlash og'rig'idan boshlab, versiya nazorati (loyiha uchun "vaqt mashinasi") nima ekanini, snapshot modelini, markazlashgan va taqsimlangan tizimlar farqini, eng muhimi β ko'pchilik chalkashtiradigan Git va GitHub farqini aniq ajratamiz.
Git'ni har uch tizimga o'rnatamiz, terminaldan qo'rqmaslikni va kerakli buyruqlarni (pwd, cd, ls) o'rganamiz, Git'ga o'zimizni tanishtiramiz (user.name, user.email), config'ning uch darajasini (system/global/local), default branch'ni main qilishni va alias yasashni ko'rib chiqamiz.
Oddiy papkani git init bilan repozitoriyga aylantirishni, yashirin .git katalogini, butun kitobning eng muhim modeli β uch zonani (Working Directory, Staging Area, Repository), faylning hayot siklini (untracked -> staged -> committed -> modified) va git statusni o'qishni o'rganamiz.
Commit tarixini o'qishni: git log variantlari (--oneline, --graph, --stat, --author), bitta commit nimadan tuzilganini (hash, parent, tree, muallif), HEAD ko'rsatkichini, git showni va git diffning uch turini bir-biridan ajratishni o'rganamiz.
Xato qilganda orqaga qaytishni: git restore (working zonani tozalash), git restore --staged, git resetning uch turi (--soft/--mixed/--hard) va ularning uch zonaga ta'siri, ulashilgan tarixni xavfsiz bekor qiluvchi git revert va git commit --amendni o'rganamiz.
Asosiy kodni buzmasdan yangi xususiyat sinash uchun branch (shox)ni: branch aslida arzon ko'rsatkich ekanini, git branch, git switch/git switch -c, HEAD nima ekanini, shoxlar ajralib ketishini (divergence), -d/-D/-m bilan o'chirish/nomlashni va "detached HEAD" holatini o'rganamiz.
Tayyor ishni asosiy shoxga qaytadan qo'shishni β merge'ni: fast-forward va 3-way merge farqini, --no-ff bayrog'ini, KONFLIKT hodisasini, konflikt markerlarini o'qib qo'lda hal qilishni va git merge --abort bilan ortga qaytishni qadam-baqadam o'rganamiz.
Chigal tarixni toza chiziqli tarixga aylantiradigan git rebaseni: commitlarni "qayta o'ynashni", merge bilan farqini, OLTIN QOIDA (ulashilgan commitni rebase qilmaslik)ni, git rebase -i bilan squash/reword/drop'ni, konfliktni --continue/--abort bilan boshqarishni va git pull --rebaseni o'rganamiz.
Lokal repo nega yetarli emasligini, GitHub aslida nimaligini, bepul akkaunt ochish va profilni to'ldirishni, birinchi repozitoriy yaratishni (public/private, README/gitignore/license), "remote" va origin tushunchasini, repo sahifasi anatomiyasini, README "loyiha yuzi" ekanini, Star/Fork/Watch'ni va GitHub/GitLab/Bitbucket farqini o'rganamiz.
Lokal Git'ni GitHub repozitoriysi bilan bog'lashni: git clone, git remote add origin, git push, git fetch (xavfsiz olish) va git pull (fetch+merge)ni, eng muhimi fetch va pull farqi hamda push rad etilganda nima qilishni, origin/main tracking branch va HTTPS/SSH url farqini o'rganamiz.
GitHub sizdan kimligingizni qanday so'rashini va nega oddiy parol ishlamasligini: HTTPS + Personal Access Token (PAT) va SSH kalit yo'llarini, ssh-keygen, ochiq kalitni qo'yish, ssh -T bilan tekshirish, credential helper, git remote set-url va 2FA hamda sirni hech qachon commit qilmaslikni o'rganamiz.
Nega to'g'ridan-to'g'ri main'ga push xavfli ekanini va yechimi β Pull Request'ni: o'z repoda PR oqimini (branch -> push -> PR -> merge) va begona loyiha uchun fork modelini, reviewer/izoh/Approve jarayonini, uch xil merge usuli farqini, Draft PR va branch protection'ni o'rganamiz.
Branch va PR'ni jamoa uchun bitta tartibga β oqimga bog'lashni: GitHub Flow, Git Flow va trunk-based oqimlarini, qaysi birini qachon tanlashni, branch nomlash (feature/login), Conventional Commits (feat:, fix:), main'ni himoyalash va hotfix ssenariysini o'rganamiz.
Uchta "qutqaruvchi" buyruqni: git stash (yarim ishni vaqtincha javonga qo'yish), git tag (relizni v1.0.0 bilan belgilash, lightweight/annotated farqi, semantik versiyalash, GitHub Releases) va git cherry-pick (bittagina commitni boshqa branchga ko'chirish)ni o'rganamiz.
Tarixni chiroyli qilish va "hammasini yo'qotdim!" holatidan qutqarishni: git commit --amend, interaktiv rebase bilan squash/reword/reorder/drop, git push --force-with-lease xavfsiz majburlashni, git reflog bilan o'chgan commit/branch'ni tiklashni, git fsckni va tozalashning oltin qoidasini o'rganamiz.
Loyiha o'sgani sayin uchraydigan uchta muammoni: boshqa repoga bog'liqlik (submodule, .gitmodules), katta binar fayllar (Git LFS, .gitattributes) va bitta repoda ko'p loyiha (monorepo/polyrepo, git subtree)ni β hammasi alohida sinov papkasida tekshirilgan β o'rganamiz.
Jamoa ishini boshqarishni: Issues (xato/vazifa kartochkalari) va hayot sikli, label/milestone/assignee, commit/PR orqali issue'ni avtomatik yopish (Closes #12), GitHub Projects kanban doskasi, .github/ shablonlari va gh (GitHub CLI) bilan ishlashni o'rganamiz.
Kodingizni dunyoga ko'rsatishni: GitHub Pages bilan bepul jonli sayt (ikki turi β username.github.io va loyiha sayti), saytni yoqish, URL tuzilishi, custom domen, Jekyll va Actions orqali deploy, hamda profil README, badge'lar va pin qilingan repolar bilan portfolio yasashni o'rganamiz.
Git/GitHub'ni xavfsiz ishlatishni: sirni (parol, .env) hech qachon commit qilmaslik (va tushib qolsa rotate qilish), imzolangan commit va Verified belgisi (SSH/GPG), 2FA, branch protection, GitHub xavfsizlik vositalari (Dependabot, secret scanning, CodeQL), minimal ruxsat va --force-with-leaseni o'rganamiz.
O'rgangan hamma narsani bitta loyihada birlashtirib jamoa ishini boshidan oxirigacha simulyatsiya qilamiz (init -> commit -> push -> branch -> PR -> review -> merge -> tag -> Pages deploy), vahimali vaziyatlarni tinch hal qilamiz, to'liq buyruq shpargalkasini bitta jadvalda yig'amiz va keyingi yo'lni belgilaymiz.