Mundarija (43)
- Bu darsda
- 1. Nega bu kerak?
- 2. gh ni o'rnatish va kirish
- 2.1 Git emas, alohida dastur
- 2.2 O'rnatish
- 2.3 gh auth login
- 2.4 gh auth status
- 3. Repo bilan ishlash
- 3.1 gh repo view
- 3.2 gh repo clone
- 3.3 gh repo create
- 4. Issue terminaldan
- 4.1 Yaratish
- 4.2 Ro'yxat va ko'rish
- 5. Pull Request terminaldan
- 5.1 Branch, commit, gh pr create
- 5.2 Ro'yxat, ko'rish, holat
- 5.3 Hamkasbning PR'ini tekshirish: gh pr checkout
- 5.4 Ruleset gh ni ham to'xtatadi
- 5.5 gh pr merge
- 6. gh run: avtomatik ishlarni kuzatish
- 6.1 Workflow va run
- 6.2 gh run list
- 6.3 gh run watch
- 6.4 gh run view va loglar
- 7. gh api: hamma narsaga kalit
- 7.1 Nega kerak
- 7.2 O'qish va --jq
- 7.3 Yozish: rulesetni terminaldan yaratish
- 8. Ko'p uchraydigan xatolar
- 8.1 gh: command not found
- 8.2 Repodan tashqarida
- 8.3 "No commits between main and ..."
- 8.4 "no pull requests found for branch"
- 8.5 Repo nomini adashtirish
- 9. Mashqlar
- 1-mashq (oson): Qaysi dastur?
- 2-mashq (o'rta): Bo'sh joylarni to'ldiring
- 3-mashq (qiyin): Malika nimani ko'radi?
- 4-mashq: Portfolio qadami — issue'dan merge'gacha terminalda
- 10. Real ishda
- Xulosa
- Manbalar
GitHub CLI (gh): PR, issue va repolarni terminaldan boshqarish
Qisqacha:
gh— GitHub'ning rasmiy terminal dasturi. Git tarixni boshqaradi,ghesa GitHub saytidagi narsalarni: issue, Pull Request, workflow, repo sozlamalari.gh auth loginbilan bir marta kirasiz, keyingh pr create,gh pr checkout 6,gh pr merge --squash,gh run watchkabi buyruqlar brauzerga chiqmasdan ishlaydi. Qolgan hamma narsa uchungh apibor — u GitHub API'siga to'g'ridan-to'g'ri so'rov yuboradi.
Bu darsda
ghni o'rnatib,gh auth loginjarayonini vagh auth statusnatijasini tushuntira olasiz.- Issue va PR'ni terminaldan yaratasiz, ko'rasiz, hamkasbning PR'ini
gh pr checkoutbilan o'z kompyuteringizda ochasiz. - PR'ni
gh pr mergebilan qo'shasiz va ruleset rad etsa, xabarini o'qiysiz. gh run listvagh run watchbilan avtomatik ishlarni kuzatasiz.gh apibilan istalgan ma'lumotni olasiz va oldingi darsdagi rulesetni terminaldan yaratasiz.
Oldin bilishingiz kerak: Branch himoyasi va rulesets, Pull Request: yaratish, muhokama, merge, Issues, Projects va shablonlar.
1. Nega bu kerak?
Oldingi darsda portfolio'ga bitta qator qo'shdik. Yo'lni sanab ko'ring: terminalda commit va push, brauzerda PR havolasini ochish, sarlavha yozish, Create pull request, keyin Squash and merge, Delete branch, yana terminalga qaytib git pull. Bitta kichik o'zgarish uchun ikki oyna orasida besh-olti marta yugurdik.
Kuniga o'nta PR qiladigan dasturchi uchun bu soatlab vaqt. Undan ham yomoni — diqqat bo'linadi: brauzerga o'tdingiz, Telegram xabari ko'zingizga tushdi, o'n daqiqa ketdi.
GitHub CLI shu yo'lni terminalga olib keladi:
gh pr create --title "Aloqa: Telegram havolasini qo'sh" --body "..."
gh pr merge --squash --delete-branchIkki buyruq — PR ochildi, qo'shildi, branch o'chdi, lokal main yangilandi.
Hayotiy o'xshatish: bank ilovasi va bank bo'limi. To'lovni bo'limga borib ham qilsa bo'ladi — navbat, blankalar, imzo. Ilovada esa o'sha to'lov ikki bosishda bo'ladi. Bank o'sha, qoidalar o'sha, faqat yo'l qisqa. gh — GitHub'ning terminaldagi "ilovasi": sayt bilan bir xil ishlarni qiladi va bir xil qoidalarga (masalan, rulesetga) bo'ysunadi.
2. gh ni o'rnatish va kirish
2.1 Git emas, alohida dastur
GitHub CLI (gh, CLI — command line interface, buyruq satri interfeysi) — GitHub kompaniyasining rasmiy dasturi. U Git'ning qismi emas. Git har qanday serverda ishlaydi — GitHub, GitLab yoki o'zingizning serveringizda. gh esa faqat GitHub bilan gaplashadi.
Farqni yodda tuting:
| Ish | Kim qiladi |
|---|---|
| commit, branch, merge, rebase | git |
| push, pull, fetch | git |
| PR, issue, release, workflow | gh |
| Repo yaratish va sozlamalari | gh (yoki brauzer) |
2.2 O'rnatish
Windows'da rasmiy yo'l — WinGet (Windows'ning o'z paket menejeri). PowerShell'da:
winget install --id GitHub.cli --source wingetmacOS'da — brew install gh, Linux'da — cli.github.com saytidagi tarqatmangizga mos yo'riqnoma.
Diqqat: O'rnatuvchi PATH'ni o'zgartiradi (Muhit o'zgaruvchilari va PATH darsidan tanish). GitHub CLI hujjatiga ko'ra, Windows Terminal'da yangi oyna ochish kerak — yangi tab yetmaydi. Eski oynada
gh: command not foundchiqadi.
Tekshiramiz (Git Bash'da):
gh --versiongh version 2.92.0 (2026-04-28)
https://github.com/cli/cli/releases/tag/v2.92.0Sizda versiya yangiroq bo'lishi mumkin — gh tez-tez yangilanadi. Yangilash: winget upgrade --id GitHub.cli --source winget.
2.3 gh auth login
gh sizning nomingizdan ish qiladi: PR ochadi, merge qiladi. Buning uchun GitHub'ga bir marta kirish kerak:
gh auth loginBuyruq bir nechta savol beradi (savollar matni — gh 2.92 manba kodidan):
Where do you use GitHub?("GitHub'ni qayerda ishlatasiz?") — GitHub.com.What is your preferred protocol for Git operations on this host?("Git qaysi yo'l bilan ulansin?") — SSH kalit sozlagan bo'lsangiz — SSH, aks holda HTTPS.- HTTPS tanlasangiz:
Authenticate Git with your GitHub credentials?("Git ham shu kirish bilan ishlasinmi?") — Yes. Shundagit pushham parol so'ramaydi: Git kalitnighdan oladi. How would you like to authenticate GitHub CLI?("Qanday kirasiz?") — Login with a web browser (brauzer orqali).- Terminal bir martalik kod beradi (
First copy your one-time code: ...) vaPress Enterdeydi. Enter bosasiz, brauzergithub.com/login/devicesahifasini ochadi. Kodni kiritib, ruxsat berasiz. - Terminalda
Logged in as loginchiqadi (logino'rnida — sizning loginingiz).
Parol terminalga yozilmaydi. Brauzer orqali kirganingizdan keyin GitHub gh ga token beradi — SSH kalit va autentifikatsiya darsidagi parol o'rnidagi maxfiy satrning o'zi. gh uni Windows'ning himoyalangan xotirasida (Credential Manager) saqlaydi.
2.4 gh auth status
Kim bo'lib kirganingizni tekshirish:
gh auth statusgithub.com
✓ Logged in to github.com account login (keyring)
- Active account: true
- Git operations protocol: https
- Token: gho_***************************************
- Token scopes: 'gist', 'read:org', 'repo', 'workflow'Chiqishlarda haqiqiy loginni login ga, haqiqiy repo nomini login/login.github.io ga almashtirdik. Biz vaqtinchalik sinov reposida ishladik.
(keyring)— token tizimning himoyalangan xotirasida.Token: gho_****—ghtokenni o'zi yulduzchalar bilan yashiradi. Shunday bo'lishi kerak.Token scopes— token nimaga ruxsat oladi.repo— repolar bilan ishlash,workflow—.github/workflows/dagi fayllarni o'zgartirish (keyingi darsda kerak bo'ladi).
Diqqat: Token — parol bilan teng. Uni chatga, skrinshotga, kodga qo'ymang.
gh auth tokenbuyrug'i tokenni ochiq ko'rsatadi — ekraningizni birov ko'rib turganda ishlatmang. Kompyuterdan voz kechsangiz:gh auth logout.
Kirmagan holatda istalgan buyruq shuni aytadi:
To get started with GitHub CLI, please run: gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.Tarjimasi: "GitHub CLI bilan ishlashni boshlash uchun gh auth login ni ishga tushiring. Yoki GH_TOKEN muhit o'zgaruvchisiga token yozing". Ikkinchi yo'l — avtomatik ishlar uchun (masalan, GitHub Actions ichida), qo'lda ishlash uchun emas.
Tekshirib ko'ring:
gh auth loginda HTTPS va "Authenticate Git with your GitHub credentials? — Yes" tanladingiz. Endigit pushqilsangiz, parol so'raladimi?
Javob
Yo'q. gh o'zini Git uchun "kalit beruvchi" (credential helper) qilib sozlaydi. git push GitHub'ga kirish kerak bo'lganda kalitni gh dan so'raydi. Ya'ni bitta kirish ikkala dastur uchun ishlaydi.
3. Repo bilan ishlash
3.1 gh repo view
Portfolio papkasida turib:
gh repo viewlogin/login.github.io
IlmHamroh 07-qism (Git) darslari uchun vaqtinchalik sinov repo — qism tugagach o'chiriladi
This repository does not have a README
View this repository on GitHub: https://github.com/login/login.github.iogh qaysi repo haqida gapirayotganini o'zi topdi — git remote dagi origin manzilidan. Ikkinchi qator — repo tavsifi (description). Bizning sinov reposimizda shunday yozilgan edi; sizda — GitHub asoslari darsida yozgan tavsifingiz. README bo'lsa, uning matni ham shu yerda chiqadi.
Dastur o'qishi uchun qulay shakl — --json va kerakli maydonlar:
gh repo view --json name,visibility,defaultBranchRef{"defaultBranchRef":{"name":"main"},"name":"login.github.io","visibility":"PUBLIC"}Bu — JSON formati. Deyarli har gh buyrug'ida --json bor. Keyinroq, skript yozishni o'rganganingizda, bu juda qo'l keladi.
Repo sahifasini brauzerda ochish: gh browse. -n flagi ochmaydi, faqat manzilni chiqaradi:
gh browse -nhttps://github.com/login/login.github.io3.2 gh repo clone
Hamkasbingiz Malika portfolio'ingizni o'z kompyuterida ko'rmoqchi. Unga git clone ning qisqa shakli yetadi:
gh repo clone login/login.github.io nusxaCloning into 'nusxa'...To'liq URL o'rniga egasi/nom yetadi. Protokol (SSH yoki HTTPS) gh auth login dagi tanlovingizdan olinadi.
3.3 gh repo create
Yangi repo yaratish ham terminaldan bo'ladi. Masalan, mashqlar papkangiz hali faqat lokal bo'lsa, uning ichida:
gh repo create mashqlar --public --source=. --pushFlaglar (gh repo create --help dan): --public yoki --private — ko'rinish, --source=. — joriy papkadagi lokal repo asos bo'lsin, --push — lokal commitlarni darhol yuborsin. Bu buyruq GitHub'da yangi repo ochadi, origin ni ulaydi va push qiladi — GitHub asoslari darsidagi brauzer yo'lining hammasi bitta qatorda.
Biz bu buyruqni sinov uchun ishga tushirmadik — u haqiqiy akkauntda yangi repo yaratadi. Qachon kerak bo'lsa, o'z akkauntingizda bemalol ishlating.
4. Issue terminaldan
4.1 Yaratish
Portfolio'ning loyihalar sahifasi bo'sh. Buni vazifa sifatida yozib qo'yamiz (Issues darsidagi kabi, lekin terminaldan):
gh issue create --title "Loyihalar: Bahor kartasi yo'q" \
--body "Loyihalar sahifasida hali birorta loyiha yo'q. \
Bahor saytini qo'shish kerak."
Creating issue in login/login.github.io
https://github.com/login/login.github.io/issues/5\ — qator oxirida "buyruq keyingi qatorda davom etadi" degani (HTTP metodlari darsidagi curl misolidan tanish). Issue raqami — #5. Sinov reposida oldin boshqa issue va PR'lar ham bo'lgani uchun raqam 5 chiqdi. Raqam issue va PR uchun umumiy — sizda boshqacha bo'ladi.
--title va --body ni yozmasangiz, gh ularni savol-javob bilan so'raydi. Bu ham qulay.
4.2 Ro'yxat va ko'rish
gh issue list
Showing 1 of 1 open issue in login/login.github.io
ID TITLE LABELS UPDATED
#5 Loyihalar: Bahor kartasi yo'q less than a minute agoStandart holatda faqat ochiq (open) issue'lar. Hammasini ko'rish — gh issue list --state all.
gh issue view 5Loyihalar: Bahor kartasi yo'q login/login.github.io#5
Open • login (Aziz Karimov) opened less than a minute ago • 0 comments
Loyihalar sahifasida hali birorta loyiha yo'q. Bahor saytini qo'shish kerak.
View this issue on GitHub: https://github.com/login/login.github.io/issues/5Holat (Open), muallif, vaqt, izohlar soni va matn. Izoh qoldirish — gh issue comment 5 --body "...", yopish — gh issue close 5.
5. Pull Request terminaldan
5.1 Branch, commit, gh pr create
Issue'ni bajaramiz. Odatdagi Git qadamlari:
git switch -c feature/loyihalar-bahor
git add sayt
git commit -m "Loyihalar: Bahor kartasini qo'sh"
git push -u origin feature/loyihalar-bahorSwitched to a new branch 'feature/loyihalar-bahor'
[feature/loyihalar-bahor 3437065] Loyihalar: Bahor kartasini qo'sh
1 file changed, 2 insertions(+)
remote:
remote: Create a pull request for 'feature/loyihalar-bahor' on GitHub by visiting:
remote: https://github.com/login/login.github.io/pull/new/feature/loyihalar-bahor
remote:
To https://github.com/login/login.github.io.git
* [new branch] feature/loyihalar-bahor -> feature/loyihalar-bahor
branch 'feature/loyihalar-bahor' set up to track 'origin/feature/loyihalar-bahor'.GitHub yana PR havolasini berdi. Lekin endi brauzerga chiqmaymiz:
gh pr create --title "Loyihalar: Bahor kartasini qo'sh" \
--body "Loyihalar sahifasiga birinchi karta. Closes #5"https://github.com/login/login.github.io/pull/6PR #6 ochildi. gh o'zi tushundi: joriy branch — feature/loyihalar-bahor, maqsad — standart branch main. Boshqa maqsad kerak bo'lsa — --base.
Closes #5 — Issues darsidagi kalit so'z: PR merge bo'lganda issue #5 avtomatik yopiladi.
Foydali flaglar:
--fill— sarlavha va matnni commit xabaridan oladi. Bitta commitli PR uchun qulay.--draft— qoralama PR (Pull Request darsidagi kabi).--web— formani brauzerda ochadi, agar uzun tavsifni u yerda yozmoqchi bo'lsangiz.
5.2 Ro'yxat, ko'rish, holat
gh pr list
Showing 1 of 1 open pull request in login/login.github.io
ID TITLE BRANCH CREATED AT
#6 Loyihalar: Bahor kartasini qo'sh feature/loyihalar-bahor less than a minute agogh pr view 6Loyihalar: Bahor kartasini qo'sh login/login.github.io#6
Open • login (Aziz Karimov) wants to merge 1 commit into main from feature/loyihalar-bahor • less than a minute ago
+2 -0 • No checks
Loyihalar sahifasiga birinchi karta. Closes #5
View this pull request on GitHub: https://github.com/login/login.github.io/pull/6+2 -0 — ikki qator qo'shilgan, hech biri o'chirilmagan. No checks — PR'da avtomatik tekshiruv yo'q. Buni boshqa buyruq ham tasdiqlaydi:
gh pr checks 6no checks reported on the 'feature/loyihalar-bahor' branchTarjimasi: "branch uchun hech qanday tekshiruv natijasi kelmagan". Hozircha bu to'g'ri. Keyingi darsda har PR'da npm run check avtomatik ishlaydigan qilamiz — shunda bu buyruq yashil yoki qizil natija ko'rsatadi.
Hamma PR'laringiz bir joyda:
gh pr status
Relevant pull requests in login/login.github.io
Current branch
#6 Loyihalar: Bahor kartasini qo'sh [feature/loyihalar-bahor]
Created by you
#6 Loyihalar: Bahor kartasini qo'sh [feature/loyihalar-bahor]
Requesting a code review from you
You have no pull requests to review
Uchta bo'lim: joriy branch'ning PR'i, siz ochganlar va sizdan review kutayotganlar. Jamoada uchinchi bo'lim har kuni ertalab ochiladi.
5.3 Hamkasbning PR'ini tekshirish: gh pr checkout
Code review darsida aytgan edik: yaxshi reviewer kodni faqat o'qimaydi, ishga tushirib ham ko'radi. Buning uchun PR branchini o'z kompyuteriga olish kerak. Malikaning nusxasida:
cd ../nusxa
gh pr checkout 6
git log --oneline -3From https://github.com/login/login.github.io
* [new branch] feature/loyihalar-bahor -> origin/feature/loyihalar-bahor
Switched to a new branch 'feature/loyihalar-bahor'
branch 'feature/loyihalar-bahor' set up to track 'origin/feature/loyihalar-bahor'.
3437065 (HEAD -> feature/loyihalar-bahor, origin/feature/loyihalar-bahor) Loyihalar: Bahor kartasini qo'sh
a2a3d58 (origin/main, origin/HEAD, main) Aloqa: Telegram havolasini qo'sh (#4)
3fbf72b Deploy: Pages workflow'ini qo'shBitta buyruq ikki ishni qildi: git fetch (branchni olib keldi) va git switch (unga o'tdi). Branch nomini bilish shart emas — PR raqami yetadi. (3fbf72b — sinov reposidagi qisqa nomli Pages commiti, Branch himoyasi darsida aytganimizdek; sizda u Deploy: sayt/ ni Pages'ga yuklaydigan workflow qo'sh.) Endi Malika Live Server'da loyihalar sahifasini ochib ko'radi.
gh pr diff 6 — o'zgarishni terminalda ko'rsatadi, xuddi git diff kabi. gh pr review 6 --approve — tasdiqlash, --request-changes -b "..." — o'zgartirish so'rash, --comment -b "..." — izoh.
5.4 Ruleset gh ni ham to'xtatadi
Oldingi darsda yolg'iz loyihada "Required approvals: 1" xavfli ekanini aytgan edik. Endi haqiqiy xabarni ko'ramiz. Rulesetda tasdiqlar sonini vaqtincha 1 qildik va merge'ga urindik:
gh pr merge 6 --squashX Pull request login/login.github.io#6 is not mergeable: the base branch policy prohibits the merge.
To have the pull request merged after all the requirements have been met, add the `--auto` flag.
To use administrator privileges to immediately merge the pull request, add the `--admin` flag.Tarjimasi: "PR #6 ni qo'shib bo'lmaydi: asosiy branch siyosati merge'ni taqiqlaydi". Keyingi ikki qator — ikki maslahat:
--auto— "talablar bajarilganda o'zi merge qilsin". PR kutib turadi, tasdiq kelgach GitHub uni o'zi qo'shadi.--admin— admin huquqi bilan chetlab o'tish. Bizning rulesetda bypass ro'yxati bo'sh — bu flag ham yordam bermaydi. Shunday bo'lishi kerak.
Xo'p, o'zimiz tasdiqlaymiz-chi?
gh pr review 6 --approvefailed to create review: GraphQL: Review Can not approve your own pull request (addPullRequestReview)Tarjimasi: "review yaratilmadi: o'z PR'ingizni tasdiqlay olmaysiz". GraphQL — gh GitHub bilan gaplashadigan API turlaridan biri, uning nomi xabarda shunchaki ko'rinib qoladi. Mana shuning uchun yolg'iz loyihada tasdiqlar soni 0 bo'ladi. Rulesetni 0 ga qaytardik.
5.5 gh pr merge
gh pr merge 6 --squash --delete-branch✓ Squashed and merged pull request login/login.github.io#6 (Loyihalar: Bahor kartasini qo'sh)
From https://github.com/login/login.github.io
* branch main -> FETCH_HEAD
a2a3d58..115b100 main -> origin/main
Updating a2a3d58..115b100
Fast-forward
sayt/loyihalar/index.html | 2 ++
1 file changed, 2 insertions(+)
✓ Deleted local branch feature/loyihalar-bahor and switched to branch main
✓ Deleted remote branch feature/loyihalar-bahorBitta buyruq to'rt ish qildi:
- GitHub'da PR'ni squash usulida qo'shdi (
mainda yangi commit115b100). - Lokal
mainni yangiladi — bugit pullning o'zi (Updating ... Fast-forward). - Lokal branchni o'chirib,
mainga o'tkazdi. - GitHub'dagi branchni o'chirdi.
Oldingi darsdagi brauzer va terminal orasidagi yugurish — bitta qatorda. Usul flaglari: --squash, --rebase, --merge. Bizning rulesetda chiziqli tarix yoqilgan — --merge "Merge commits are not allowed" bilan qaytadi.
Issue holatini tekshiramiz:
gh issue view 5Loyihalar: Bahor kartasi yo'q login/login.github.io#5
Closed • login (Aziz Karimov) opened less than a minute ago • 0 comments
...Closed — Closes #5 ishladi. (Pastki qatorlar oldingisi bilan bir xil, ... bilan qisqartirdik.)
Butun sikl bitta rasmda:
flowchart LR
A["gh issue create<br/>#5"] --> B["git switch -c<br/>commit, push"]
B --> C["gh pr create<br/>#6"]
C --> D["gh pr checkout 6<br/>hamkasb sinaydi"]
D --> E["gh pr review"]
E --> F["gh pr merge<br/>--squash"]
F --> G["issue #5<br/>yopildi"]Nimaga qarang: chap uchdan o'ng uchgacha hamma qadam terminalda. Brauzer faqat ixtiyoriy — uzun muhokama yoki rasmni ko'rish uchun.
Tekshirib ko'ring:
gh pr merge 6 --squash --delete-branchdan keyingit pullyozish kerakmi?
Javob
Yo'q. Chiqishdagi Updating a2a3d58..115b100 va Fast-forward — bu gh ichida bajarilgan pull. gh lokal main ni ham yangiladi va unga o'tkazdi. Faqat boshqa kompyuterdagi nusxalar (masalan, Malikanikida) eski holatda qoladi — u yerda git pull kerak.
6. gh run: avtomatik ishlarni kuzatish
Remote darsida portfolio'ga .github/workflows/pages.yml faylini ko'chirgan edingiz. U har main ga push'da saytni Pages'ga joylaydi. Bu avtomatik ish GitHub serverida bajariladi. Uni brauzerdagi Actions bo'limida kuzatish mumkin — yoki terminalda.
6.1 Workflow va run
Ikki so'z:
- Workflow — avtomatik ish "retsepti":
.github/workflows/dagi YAML fayl. Bizda bittasi —Pages. - Run — retseptning bir marta bajarilishi. Har push yangi run boshlaydi.
gh workflow listNAME STATE ID
Pages active 371805243pages.yml da workflow_dispatch qatori bor. U "qo'lda ishga tushirish mumkin" degani. Saytni push'siz qayta joylash kerak bo'lsa:
gh workflow run pages.yml✓ Created workflow_dispatch event for pages.yml at main
https://github.com/login/login.github.io/actions/runs/36818467242
To see the created workflow run, try: gh run view 36818467242
To see runs for this workflow, try: gh run list --workflow="pages.yml"6.2 gh run list
gh run list --workflow pages.yml --limit 3STATUS TITLE WORKFLOW BRANCH EVENT ID ELAPSED AGE
* Pages Pages main workflow_dispatch 36818467242 7s less than a minute ago
✓ Pages Pages main workflow_dispatch 36818286675 18s about 2 minutes ago
X Pages Pages main workflow_dispatch 36818018330 6s about 6 minutes agoBirinchi ustun — holat: * — ketyapti, ✓ — muvaffaqiyatli, X — xato. EVENT — runni nima boshlagan: push yoki qo'lda (workflow_dispatch). ID — run raqami, keyingi buyruqlar uchun kerak.
Pastki X — bizning sinovdagi haqiqiy xato: o'sha paytda akkauntda Actions vaqtincha to'xtatilgan edi. Bunday run'ning sababini gh run view ko'rsatadi.
6.3 gh run watch
gh run watch 36818467242 --exit-statuswatch holatni har 3 soniyada yangilaydi: qadamlar birin-ketin * dan ✓ ga o'tadi. Oxirgi ekran:
✓ main Pages · 36818467242
Triggered via workflow_dispatch less than a minute ago
JOBS
✓ deploy in 11s (ID 110228635689)
✓ Set up job
✓ Run actions/checkout@v7
✓ Run actions/configure-pages@v6
✓ Run actions/upload-pages-artifact@v5
✓ Run actions/deploy-pages@v5
✓ Post Run actions/checkout@v7
✓ Complete job
ANNOTATIONS
- "The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
deploy: .github#1
✓ Run Pages (36818467242) completed with 'success'deploy — pages.yml dagi ishning (job) nomi, ostida uning qadamlari. --exit-status — run xato bilan tugasa, gh ham xato kodi bilan chiqadi (Exit code darsi). Skriptda foydali: gh run watch ... --exit-status && echo tayyor.
ANNOTATIONS — GitHub'ning eslatmasi: ubuntu-latest belgisi 2026-yil 19-oktabrdan Ubuntu 26 ga o'tadi. Xato emas, ma'lumot.
6.4 gh run view va loglar
gh run view 36818467242 --logBu — run'ning to'liq jurnali (log), har qatori ish, qadam va vaqt bilan. U uzun — bizda 250 qatordan ortiq. Eng muhim qatorlari (qisqartirilgan):
deploy Run actions/upload-pages-artifact@v5 2026-10-01T05:10:00.4592009Z Artifact github-pages has been successfully uploaded! Final size is 1213 bytes. Artifact ID is 11142780849
deploy Run actions/deploy-pages@v5 2026-10-01T05:10:06.6641029Z Reported success!
deploy Complete job 2026-10-01T05:10:06.9317386Z Evaluated environment url: https://login.github.io/sayt/ papkasi arxivlanib yuklandi (1213 bayt — sinovdagi kichik sayt), joylash muvaffaqiyatli, oxirida — sayt manzili. Xato bo'lganda faqat qizil qadamlar logi kerak: gh run view <ID> --log-failed. Xatodan keyin qayta ishga tushirish — gh run rerun <ID>, faqat yiqilgan ishlarni — gh run rerun <ID> --failed (gh run rerun --help dan).
7. gh api: hamma narsaga kalit
7.1 Nega kerak
gh da yuzlab buyruq bor, lekin GitHub'ning hamma imkoniyati uchun emas. Masalan, ruleset uchun alohida gh ruleset create yo'q. Buning uchun gh api bor.
API (Application Programming Interface — dasturiy interfeys) — dasturlar bir-biri bilan gaplashadigan "eshik". GitHub saytidagi har tugma aslida GitHub API'siga so'rov yuboradi. gh api shu so'rovni siz uchun yuboradi: manzil yozasiz, javob JSON bo'lib qaytadi. Kirish tokeni o'zi qo'shiladi.
Bu HTTP metodlari darsidagi so'rovlarning o'zi. GET — o'qish (standart), POST — yaratish, PUT — almashtirish, DELETE — o'chirish.
7.2 O'qish va --jq
Kim bo'lib kirganman?
gh api user --jq .loginlogin--jq — javobdan kerakli qismni ajratish. .login — "JSON ichidagi login maydoni". Usiz user javobi o'nlab maydonli katta JSON bo'lardi.
Repo haqida:
gh api "repos/{owner}/{repo}" \
--jq '.full_name, .visibility, .default_branch'login/login.github.io
public
main{owner} va {repo} — gh ning maxsus belgilari: joriy papkadagi repodan o'zi qo'yadi. Qo'shtirnoq Git Bash'da {} buzilmasligi uchun.
Rulesetlar ro'yxati:
gh api "repos/{owner}/{repo}/rulesets" \
--jq '.[] | .name + " — " + .enforcement'main himoyasi — active.[] — "massivning har elementi", | — natijani keyingi qadamga uzatish (pipe kabi), + — matnlarni ulash. jq tili katta, lekin shu uchta belgi ko'p ishga yetadi.
Qaysi qoidalar main ga ishlayapti?
gh api "repos/{owner}/{repo}/rules/branches/main" --jq '.[].type'deletion
non_fast_forward
required_linear_history
pull_requestOldingi darsdagi to'rtta qoida.
7.3 Yozish: rulesetni terminaldan yaratish
Oldingi darsda rulesetning JSON shaklini ko'rgan edik va "uni terminaldan ham yaratamiz" degan edik. Shu JSON'ni ruleset.json fayliga saqlang va:
gh api --method POST "repos/{owner}/{repo}/rulesets" \
--input ruleset.json --jq '{id, name, enforcement, source_type}'{
"enforcement": "active",
"id": 24289032,
"name": "main himoyasi",
"source_type": "Repository"
}--method POST— yangi narsa yaratish.--input ruleset.json— so'rov tanasi shu fayldan.--jq '{...}'— javobdan faqat to'rt maydon.source_type: Repository— ruleset shu reponing o'ziniki (tashkilotniki emas).
Ruleset yaratildi, uning raqami (id) bor. O'zgartirish — --method PUT ".../rulesets/24289032", o'chirish — --method DELETE. Bir xil faylni landing papkasida ham ishga tushirsangiz — ikkinchi repo ham himoyalanadi. Brauzerdagi o'nta bosish o'rniga — bitta buyruq.
Diqqat:
gh apiqudratli va to'g'ridan-to'g'ri ishlaydi: "Ishonchingiz komilmi?" degan savol yo'q.DELETEso'rovi bilan repo ham, ruleset ham bir zumda o'chadi. Yozuvchi so'rovni yuborishdan oldin manzilni ikki marta o'qing.
8. Ko'p uchraydigan xatolar
8.1 gh: command not found
O'rnatgandan keyin eski terminal oynasi PATH'ning eski holatini eslaydi. Yangi oyna oching.
8.2 Repodan tashqarida
cd ~
gh pr listfailed to run git: fatal: not a git repository (or any of the parent directories): .gitgh joriy repoga git orqali qaraydi. Repo papkasiga o'ting yoki repo nomini ayting: gh pr list -R login/login.github.io.
8.3 "No commits between main and ..."
pull request create failed: GraphQL: No commits between main and feature/aloqa-telegram (createPullRequest)Tarjimasi: "main va branch orasida commit yo'q". Branch'da yangi commit yo'q — u main bilan bir joyda. Ko'p sabab: commit qilishni unutgansiz yoki o'zgarish boshqa branch'da qolgan. git log --oneline main..HEAD bo'sh chiqsa — aynan shu.
8.4 "no pull requests found for branch"
no pull requests found for branch "feature/aloqa-telegram"Joriy branch uchun PR hali ochilmagan (yoki boshqa branch'dasiz). PR raqamini aniq yozing: gh pr view 6.
8.5 Repo nomini adashtirish
gh repo'ni origin dan oladi. Fork qilingan repoda upstream ham bo'lsa, gh birinchi marta qaysi biri bilan ishlashni so'raydi. Xato tanlangan bo'lsa: gh repo set-default bilan qayta tanlang.
9. Mashqlar
Javoblarni mashqlar reposida 07/34-gh/javoblar.md ga yozib, 07/34: gh mashqlari javoblarini qo'sh bilan commit qiling.
1-mashq (oson): Qaysi dastur?
Har ish uchun git yoki gh ni tanlang:
- Branch yaratish.
- PR ochish.
- Issue'ni yopish.
- Commitlarni GitHub'ga yuborish.
- Hamkasbning PR'ini o'z kompyuteringizda ochish.
Yechim
git(git switch -c). 2.gh(gh pr create). 3.gh(gh issue close). 4.git(git push). 5.gh(gh pr checkout) — u ichidagit fetchvagit switchni chaqiradi.
Qoida: tarix bilan ishlash — git, GitHub saytidagi narsalar — gh.
2-mashq (o'rta): Bo'sh joylarni to'ldiring
Malika feature/menyu-manti branchida ishlayapti va issue #12 ni bajardi. PR ochib, uni squash bilan qo'shmoqchi:
git push -u origin feature/menyu-manti
gh pr --title "Menyu: manti narxini qo'sh" \
--body " #12"
gh pr -- --delete-branchIshora: «Pull Request terminaldan» bo'limidagi buyruqlar va kalit so'z.
Yechim
create, Closes, merge, squash. Closes #12 — PR merge bo'lganda issue #12 ni yopadi. --delete-branch — merge'dan keyin branchni ikkala joyda o'chiradi va main ga o'tkazadi.
3-mashq (qiyin): Malika nimani ko'radi?
Malika o'z kompyuterida (nusxa papkasida) main da turibdi. Siz PR #6 ni gh pr merge 6 --squash --delete-branch bilan qo'shdingiz. Malika:
git branch
git log --oneline -1- Malikada
feature/loyihalar-bahorbranchi bormi? - Uning
maini yangi commitni ko'rsatadimi? - U nima qilishi kerak?
Ishora: gh pr merge faqat siz turgan papkadagi lokal repo'ni yangiladi («gh pr merge» bo'limidagi to'rt ish).
Yechim
- Ha, agar u
gh pr checkout 6qilgan bo'lsa.--delete-branchfaqat sizning lokal branchingizni va GitHub'dagi branchni o'chiradi — Malikaning kompyuteriga tegolmaydi. - Yo'q. Uning
mainia2a3d58da qoladi — u halifetchqilmagan. - To'rt buyruq:
git switch main
git pull
git branch -D feature/loyihalar-bahor
git fetch --prune-D — chunki squash commit uning branchidagi 3437065 emas (Branch himoyasi darsidagi -d ogohlantirishi). git fetch --prune — GitHub'da o'chirilgan branchlarning lokal xotiradagi nusxasini (origin/feature/...) tozalaydi.
4-mashq: Portfolio qadami — issue'dan merge'gacha terminalda
Portfolio'ning "Men haqimda" sahifasiga bitta yangi paragraf qo'shing — butun sikl gh bilan.
gh auth status— kirganmisiz?gh issue create— sarlavha:Haqimda: o'qiyotgan kursim haqida yoz.feature/haqimda-kursbranchi, o'zgarish,npm run check, commit (Haqimda: kurs haqida paragraf qo'sh), push.gh pr create— matnidaCloses #N(N — issue raqami).gh pr viewvagh pr checks— nima deydi?gh pr merge --squash --delete-branch.gh issue view N—Closedmi?
Yechim
gh auth status
gh issue create --title "Haqimda: o'qiyotgan kursim haqida yoz" \
--body "Men haqimda sahifasida kurs haqida paragraf yo'q."
git switch -c feature/haqimda-kurs
# sayt/haqimda/index.html ga paragraf qo'shing
npm run check
git commit -am "Haqimda: kurs haqida paragraf qo'sh"
git push -u origin feature/haqimda-kurs
gh pr create --fill --body "Closes #7"
gh pr view
gh pr checks
gh pr merge --squash --delete-branch
gh issue view 7#7 o'rniga gh issue create bergan raqamni yozing. gh pr checks hozircha no checks reported deydi — avtomatik tekshiruv keyingi darsda qo'shiladi. Shuning uchun 3-qadamdagi npm run check ni qo'lda ishga tushiring. Oxirida git log --oneline -1 da ... (#8) ko'rinishidagi squash commit turadi.
--fill bilan --body birga: sarlavha commit xabaridan olinadi, matn esa siz yozgan.
10. Real ishda
- Ko'p dasturchi kuni
gh pr statusbilan boshlanadi: kimdir review kutyaptimi, mening PR'im qayerda. - Review jarayoni:
gh pr checkout+ lokal sinov +gh pr review— ko'p jamoalarda standart yo'l. - Skriptlar va avtomatika:
ghvagh apiGitHub Actions ichida ham ishlaydi (GH_TOKENbilan). Reliz yaratish, issue'ga belgi qo'yish, PR'ga izoh yozish — hammasi skript bilan. - AI yordamchilari ham GitHub bilan ko'pincha aynan
ghorqali ishlaydi: PR ochadi, CI natijasini o'qiydi. - Intervyuda kamdan-kam so'raladi, lekin birinchi ish haftangizda albatta kerak bo'ladi.
Xulosa
git— tarix,gh— GitHub saytidagi narsalar: issue, PR, workflow, repo.gh auth login— bir marta, brauzer orqali; token tizim xotirasida,gh auth statusbilan tekshiriladi.- Asosiy sikl:
gh issue create→ branch va push →gh pr create→gh pr checkout(review) →gh pr merge --squash --delete-branch. ghham rulesetga bo'ysunadi:base branch policy prohibits the merge; o'z PR'ingizni tasdiqlab bo'lmaydi.gh api— qolgan hamma narsa uchun:--jqbilan javobni filtrlash,--methodva--inputbilan yaratish.
Keyingi dars: GitHub Actions: birinchi CI workflow — har push va PR'da npm run check avtomatik ishlaydigan qilamiz va uni rulesetga majburiy tekshiruv qilib qo'shamiz.
Manbalar
- GitHub CLI qo'llanmasi: cli.github.com/manual —
gh auth login,gh pr create,gh pr merge,gh api - GitHub CLI: "Installing gh on Windows" — github.com/cli/cli (docs/install_windows.md)
- GitHub Docs: "About GitHub CLI", "REST API endpoints for rules" — docs.github.com
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!