Dasturlash

Maiao: GitHub, GitLab va Gitea uchun Gerrit uslubidagi kod ko'rib chiqish vositasi

26-avgust, 2026, 05:280 ko'rish6 daqiqa o'qish
Maiao: GitHub, GitLab va Gitea uchun Gerrit uslubidagi kod ko'rib chiqish vositasi

Katta funksiyalarni bitta og'ir pull request (PR) ichiga jamlash — bu kod ko'rib chiqish jarayonini sekinlashtiruvchi, xatolarni yashirin qiluvchi va tarixni noaniq qiluvchi odatiy xato. Maiao bu muammoni hal qilish uchun Gerrit platformasida yillar o'tib tekshirilgan stacked diffs (steklangan farqlar) metodologiyasini GitHub, GitLab, Gitea, Forgejo, Bitbucket Cloud va Cursor Origin ga olib keladi. Vosita ochiq manbali, MIT litsenziyasi ostida tarqatiladi va git review buyrug'i orqali har bir commitni alohida PR/MR ga aylantirib, ularni avtomatik bog'laydi.

Nima uchun stacked diffs kerak?

Ancha yillar oldin Google, Facebook va Microsoft ichki vositalarida (Gerrit, Phabricator) joriy etilgan stacked diffs usuli: har bir logik o'zgarish — alohida commit, har bir commit — alohida kod ko'rib chiqish (code review). Bu yondashuv uchta muhim afzallik beradi:

License
  • Granulyar sharhlar: Kichik PR tezroq ko'riladi, mufassir o'zgarishlar orasida tushunarsiz o'zgarishlar yo'q.
  • Toza tarix: Har bir commit bitta maqsadga xizmat qiladi; git log o'qilganda loyiha rivoji aniq ko'rinadi.
  • Oson tuzatish: Kod ko'rib chiqish natijasida kelgan izohlar git commit --fixup orqali tegishli commitga bog'lanadi, stek avtomatik yangilanadi.

Ammo GitHub va GitLab standart interfeyslari hali ham "bitta branch — bitta PR" modeliga mo'ljallangan. Maiao bu cheklovni o'z ustida qamrab, oddiy git buyruqlari bilan ishlash tajribasini saqlab qoladi.

Maiao qanday ishlaydi?

Vosita oddiy git kengaytirmasi (extension) sifatida o'rnatiladi va git review buyrug'ini qo'shadi. Ishlash jarayoni quyidagicha:

GitHub all releases downloads
  1. Siz odatda branch yaratasiz va bir nechta commit qilasiz (masalan: autentifikatsiya, avtorizatsiya, admin endpointlari).
  2. git review chaqirilsa, Maiao har bir commit uchun alohida PR/MR yaratadi.
  3. PR/MRlar ota-bola bog'liqligi (parent-child) bilan steklanadi: ikkinchi PR birinchisiga, uchinchi — ikkinchisiga bog'lanadi.
  4. Agar provayder qo'llab-quvvatlasa (GitHub Stacks, GitLab auto-detected stacks), Maiao native stack ro'yxatdan o'tkazadi — bu UI da stek ko'rinishini va navigatsiyani yaxshilaydi.
  5. Commitlar Change-ID (Gerrit commit-msg hook) orqali kuzatiladi: commit qayta yozilganda (rebase, amend, fixup) Maiao uyni topib, tegishli PR/MR ni yangilaydi.
  6. PR/MR merge qilinganda stek avtomatik rebase qilinadi — keyingi o'zgarishlar asosiy branch ga mos keladi.

Provayderlar va ularning imkoniyatlari

Maiao uzoq ro'yxatdagi Git hosting provayderlari bilan ishlaydi, lekin har birining o'ziga xos xususiyatlari bor:

ProvayderPR/MR turiDraft/WIPNative stacks
GitHubPull RequestAPI maydoniHa (explicit ro'yxatdan o'tkazish)
GitLabMerge RequestDraft: prefiksiHa (target branch dan avto-aniqlash, 20 tagacha MR)
GiteaPull RequestWIP: prefiksiYo'q
Forgejo / CodebergPull RequestWIP: prefiksiYo'q
Bitbucket CloudPull RequestQo'llab-quvvatlanmaydiYo'q
Cursor Origin (beta)Pull RequestAPI maydoniHa (parentPullNumber)

Maiao origin remote URL manzilidan provayderni avtomatik aniqlaydi (masalan: github.com, gitlab.com, codeberg.org, bitbucket.org, origin.cursor.com). O'z serveringizda (self-hosted) ishlasangiz, birinchi ishga tushirishda so'rov yuboriladi va tanlov git config maiao.provider ga saqlanadi.

Native stacks: progresiv yaxshilash

GitHub Stacks API hamma GitHub Enterprise versiyalarda mavjud emas. Maiao bu haqda silently (xabarsiz) o'tib boradi: agar API topilmasa, branch asosidagi steklash (har bir PR ning base branch i oldingi PR bo'ladi) avvaldek ishlaydi. Bu progressive enhancement — yani imkoniyat bor bo'lsa qo'shimcha qulaylik, yo'q bo'lsa ishlash buzilmaydi.

Xohlasangiz, xatti-harakatni sozlashingiz mumkin:

# Make multiple commits
git commit -m "Add user authentication"
git commit -m "Add authorization middleware"
git commit -m "Add admin endpoints"

# Create stacked PRs/MRs for all commits
git review
# Standart: imkon bo'lsa ishlat, yo'q bo'lsa o'tkazib yubor
git config maiao.useNativeStack auto

# Har doim ro'yxatdan o'tkazishga urin, agar bo'lmasa ogohlantir
git config maiao.useNativeStack true

# Butunlay o'chirish
git config maiao.useNativeStack false

Taqqoslash: Maiao vs Graphite vs qo'lda steklash

Eng yaqin raqobatchi — Graphite (gt CLI). Graphite kuchli UI, VS Code integratsiyasi va bulut sinxronizatsiyasi bilan keladi, lekin u kommersiya mahsulot va ba'zi xususiyatlari to'lov chetlagida. Maiao esa:

  • To'liq ochiq manbali va bepul.
  • Hech qanday bulut xizmati talab qilmaydi — barcha ma'lumotlar sizning Git provayderingizda.
  • Oddiy git oqimi (workflow) bilan to'liq mos: commit --fixup, rebase -i, push --force-with-lease hammasi o'zgarishsiz ishlaydi.
  • Bitbucket Cloud, Gitea, Forgejo kabi kamroq qo'llab-quvvatlanadigan platformalar uchun ham yechim beradi.

Qo'lda steklash (har bir commit uchun branch yaratib, PR ochish) kichik loyihalarda ham ishlar, lekin 5-10 commitdan keyin boshqarib bo'lmaydi: rebase, force-push, base branch o'zgarishlari — hammasi qo'lda bajarilishi kerak. Maiao bu rutini avtomatlashtiradi.

# Control via git config (default: auto)
git config maiao.useNativeStack auto   # use when available, skip otherwise
git config maiao.useNativeStack true   # always register; warn if unavailable
git config maiao.useNativeStack false  # disable entirely

Cheklovlar va e'tibor berilishi kerak nuqtalari

  • Bitbucket Cloud da Draft/WIP rejimi va native stacks yo'q — barcha PR darhol ochiq holatda yaratiladi.
  • GitLab da auto-detected stacks 20 tagacha MR gacha cheklangan; undan ortiq steklarda branch-based usul ishlatiladi.
  • Vosita hali Cursor Origin uchun beta holatida.
  • Katta jamoalarda git review ni bir vaqtda bir necha odam ishga tushirsa, race condition (yarash sharti) yuzaga kelishi mumkin — bu push --force-with-lease va Change-ID mexanizmi bilan minimallashtirilgan, lekin to'liq yo'q qilinmagan.
  • O'rnatish uchun Go runtime kerak (yoki tayyor binary), bu ba'zi CI/CD konteynerlarda qo'shimcha qadam talab qilishi mumkin.

Kimga va qanday foyda yetkazadi?

  • Backend/frontend dasturchilari: Katta featurelarni kichik, testlash oson bo'ladigan bo'laklarga bo'lish imkoniyati.
  • Kod ko'rib chiquvchi (reviewer)lar: Har bir PR kichik va maqsadli — sharh yozish vaqti qisqaradi.
  • DevOps / Platform inshoatchilari: CI/CD pipeline har bir PR uchun alohida ishga tushiriladi, xato aniqlash tezroq bo'ladi.
  • Ochiq manba loyihalari: Katta PR lar tashkil qiluvchi to'siqni yo'qotib, yangi ishtirokchilar uchun kirish barierini pastlantiradi.

Boshlash: o'rnatish va birinchi stek

Eng tez yo'l — binary yuklab olish (Linux, macOS, Windows) yoki go install:

go install github.com/runetes/maiao/cmd/maiao@latest
# Keyin:
maiao install  # git review buyrug'ini o'rnatadi

Endi oddiy ish oqimi:

# 1. Yangi branch
git checkout -b feature/user-management

# 2. Kichik, aniq commitlar
git commit -m "Add user authentication"
git commit -m "Add authorization middleware"
git commit -m "Add admin endpoints"

# 3. Barchasini steklash
git review

Natija: uchta PR/MR, har biri o'ziga xizmat qiluvchi o'zgarish, avtomatik bog'langan stek ko'rinishida.

Manba va rivojlanish

Maiao — bu adevinta/maiao ning jamoat fork'i (community fork). Asl mualliflar Adevinta kompaniyasidan ketgan, va asl repositoriy faollasini yo'qotgan. Hozir daimiylik runetes/maiao repositoriyasida davom etmoqda. Loyiha CONTRIBUTING.md orqali hissa qabul qiladi va DISCLAIMER.md da MIT litsenziyasi shartlari keltirilgan.

Xulosa

Maiao — bu stacked diffs falsafasini zamonaviy Git hosting provayderlariga o'tkazuvchi minimalist, kuchli va bepul vosita. U sizning git odatlaringizni o'zgartirmaydi, aksincha — ularni kengaytirib, katta o'zgarishlarni boshqarishni soddalashtiradi. Agar jamoangiz hali ham "bitta branch — bitta og'ir PR" modelida bo'lib yursa, Maiao sinab ko'rish arziydi: kod ko'rib chiqish tezlashtiriladi, tarix tozalanadi, va xatolar oldini olinadi. O'rnating, bir nechta commit qiling, git review deb yozing — farqni o'zingiz hisoblab ko'ring.

Asl manba: github.com

Manba: Hacker News
#git #code-review #stacked-diffs #github #gitlab
Telegram da muhokama qilish