Jamoa bilan ishlash: fork va Pull Request
Ochiq kodli (open source) loyihalar va professional jamoalar bir necha dasturchi bir kod ustida ishlashini talab qiladi. Buning uchun GitHub maxsus ish oqimini taklif etadi: fork, branch, Pull Request va code review. Ushbu darsda ushbu jamoaviy oqimni bosqichma-bosqich o'rganamiz β bu bilan har qanday loyihaga hissa qo'sha olasiz.
git buyruqlari ular bilan birga ishlatiladi. Kurs playground'ida bu amallar ishlamaydi β quyidagi bloklar statik misol va bosqichma-bosqich tavsif sifatida keltiriladi.Fork nima?
Fork β bu boshqa birovning GitHub omborini o'z akkauntingizga to'liq nusxalash. Fork qilinganda, o'sha loyihaning aynan nusxasi sizning GitHub profilingizda paydo bo'ladi va u butunlay sizga tegishli bo'ladi β istagancha o'zgartirasiz, asl loyihaga ta'sir qilmaydi.
Fork nima uchun kerak? Chunki ochiq kodli loyihalarga har kim to'g'ridan-to'g'ri push qila olmaydi β faqat loyiha egalari. Fork esa quyidagi imkonni beradi:
- Loyihaning o'z nusxangizni olasiz va unga bemalol o'zgartirasiz;
- O'zgarishlaringizni Pull Request orqali asl loyihaga taklif qilasiz;
- Asl loyiha egalari sizning taklifingizni ko'rib chiqadi, muhokama qiladi va ma'qul bo'lsa qabul qiladi.
Fork qilish oson: GitHub'da loyiha sahifasining o'ng yuqorisidagi Fork tugmasini bosasiz. Bir necha soniyada nusxa github.com/sizning-nomingiz/loyiha manzilida paydo bo'ladi.
upstream va origin: ikki remote
Fork bilan ishlaganda ikki masofaviy ombor bilan aloqada bo'lasiz. Bu tushunchalar dastlab chalkash tuyulishi mumkin, shuning uchun aniq ajratamiz:
- origin β sizning fork'ingiz (
github.com/sizning-nomingiz/loyiha). Bunga siz push qilasiz; - upstream β asl (original) loyiha (
github.com/asl-muallif/loyiha). Bundan siz yangilanishlarni olasiz, lekin push qila olmaysiz.
Fork'ingizni klonlaganingizdan so'ng, asl loyihani upstream nomi bilan qo'shasiz:
# 1. O'z fork'ingizni klonlaymiz (origin avtomatik sozlanadi)
$ git clone https://github.com/sizning-nomingiz/loyiha.git
$ cd loyiha
# 2. Asl loyihani upstream sifatida qo'shamiz
$ git remote add upstream https://github.com/asl-muallif/loyiha.git
# 3. Tekshiramiz
$ git remote -v
origin https://github.com/sizning-nomingiz/loyiha.git (fetch)
origin https://github.com/sizning-nomingiz/loyiha.git (push)
upstream https://github.com/asl-muallif/loyiha.git (fetch)
upstream https://github.com/asl-muallif/loyiha.git (push)
Issue (muammo) yaratish
Issue β bu loyihada biror muammoni, xatoni yoki takliο¬ni muhokama qilish uchun ochiladigan yozuv. Kod yozishdan oldin ko'pincha issue orqali muammoni bayon qilish yaxshi odat β bu jamoaga nima ustida ishlayotganingizni bildiradi.
Issue GitHub'ning Issues bo'limida yaratiladi. Yaxshi issue quyidagilarni o'z ichiga oladi:
- Aniq sarlavha β masalan "Login tugmasi mobil ekranda ko'rinmayapti";
- Muammoning tavsifi β nima kutilgan va nima sodir bo'lyapti;
- Takrorlash qadamlari β muammoni qanday qayta hosil qilish mumkin;
- Muhit β brauzer, operatsion tizim, versiya (agar tegishli bo'lsa).
Pull Request (PR) nima?
Pull Request (qisqacha PR) β bu "iltimos, mening o'zgarishlarimni loyihangizga qabul qiling" degan rasmiy so'rov. Siz o'z branch'ingizda kod yozasiz, uni fork'ingizga push qilasiz va GitHub'da asl loyihaga PR ochasiz.
PR β jamoaviy ishning markaziy vositasi. U shunchaki kodni birlashtirish emas, balki:
- Muhokama maydoni β muallif va boshqalar o'zgarishlaringizni izohlaydi, savol beradi;
- Kod ko'rib chiqish (review) β tajribali dasturchilar kodni tekshiradi va yaxshilash taklif qiladi;
- Avtomatik tekshiruvlar β testlar va tekshiruvlar (CI) avtomatik ishga tushadi;
- Tarix β nima uchun, qachon va kim tomonidan o'zgartirilgani saqlanadi.
PR ochish oqimi: to'liq bosqichma-bosqich
Endi butun jarayonni boshidan oxirigacha ko'ramiz. Faraz qilaylik, siz ochiq kodli loyihaga xato tuzatishini qo'shmoqchisiz:
1-qadam. Loyihani GitHub'da Fork qiling (fork tugmasini bosing).
2-qadam. Fork'ingizni kompyuteringizga klonlang va upstream'ni qo'shing:
$ git clone https://github.com/sizning-nomingiz/loyiha.git
$ cd loyiha
$ git remote add upstream https://github.com/asl-muallif/loyiha.git
3-qadam. O'zgarish uchun yangi branch yarating. Hech qachon to'g'ridan-to'g'ri mainda ishlamang β har bir ish alohida branch'da:
$ git switch -c fix-login-button
Switched to a new branch 'fix-login-button'
4-qadam. Kodni o'zgartiring, so'ng commit qiling:
# ... kodni tuzatamiz ...
$ git add .
$ git commit -m 'Login tugmasi mobil ekrandagi xatosini tuzatdim'
5-qadam. Branch'ni o'z fork'ingizga (origin) push qiling:
$ git push -u origin fix-login-button
To https://github.com/sizning-nomingiz/loyiha.git
* [new branch] fix-login-button -> fix-login-button
6-qadam. GitHub'ga o'ting. Push'dan keyin GitHub odatda "Compare & pull request" tugmasini ko'rsatadi. Uni bosing, PR uchun aniq sarlavha va tavsif yozing, so'ng Create pull request tugmasini bosing.
7-qadam. PR ochildi. Endi loyiha egalari uni ko'rib chiqadi. Ular izoh qoldirishi, o'zgartirish so'rashi yoki darhol qabul qilishi mumkin.
Kod ko'rib chiqish (code review)
Code review (kod ko'rib chiqish) β bu PR'dagi kodni boshqa dasturchilar tomonidan tekshirilishi. Bu β sifatli dasturchilikning muhim qismi. Review paytida:
- Ko'rib chiquvchi kodning har bir qatoriga izoh qoldira oladi;
- Xatolar, yaxshilash imkoniyatlari yoki uslub muammolari ko'rsatiladi;
- Muallif izohlarga javob beradi va kerakli tuzatishlarni kiritadi;
- Hammasi joyida bo'lsa, ko'rib chiquvchi PR'ni Approve (ma'qullash) qiladi.
GitHub'da review uch xil xulosaga ega bo'ladi:
- Approve β kod yaxshi, birlashtirishga tayyor;
- Request changes β o'zgartirish kerak, birlashtirishdan oldin tuzatilsin;
- Comment β shunchaki fikr bildirish, aniq qaror bermasdan.
Review muvaffaqiyatli tugagach, muallif Merge pull request tugmasini bosadi va sizning kodingiz asl loyihaga qo'shiladi. Tabriklaymiz β siz loyihaga hissa qo'shdingiz!
upstream bilan sinxronlash
Vaqt o'tishi bilan asl loyiha (upstream) rivojlanadi β boshqalar yangi kod qo'shadi. Sizning fork'ingiz esa eskiradi. Yangi ishga kirishishdan oldin fork'ingizni asl loyiha bilan sinxronlash muhim. Bu quyidagicha qilinadi:
# 1. main branch'ga o'tamiz
$ git switch main
# 2. Asl loyihadan (upstream) yangilanishlarni olamiz
$ git fetch upstream
# 3. upstream/main ni o'z main'imizga birlashtiramiz
$ git merge upstream/main
# 4. Yangilangan main'ni o'z fork'imizga (origin) yuboramiz
$ git push origin main
Endi fork'ingizning maini asl loyiha bilan bir xil holatda. Yangi funksiya uchun branch ochishdan oldin doim shu sinxronlashni bajaring β bu keyingi konfliktlarni kamaytiradi.
git switch -c yangi-branch.Xulosa
- Fork β boshqa loyihaning o'z akkauntingizdagi to'liq nusxasi;
- origin β sizning fork'ingiz (push qilasiz), upstream β asl loyiha (yangilanish olasiz);
- Issue β muammo, xato yoki taklifni muhokama qilish uchun yozuv;
- Pull Request (PR) β o'zgarishlaringizni asl loyihaga qabul qilishni so'rovchi rasmiy taklif;
- Code review β kodni boshqalar tekshiradi: Approve, Request changes yoki Comment;
- PR oqimi: fork → clone → yangi branch → commit → push → PR ochish → review → merge;
git fetch upstream+git merge upstream/mainβ fork'ni asl loyiha bilan sinxronlash.
Jamoaviy ish oqimini o'rgandingiz β endi dunyodagi istalgan ochiq kodli loyihaga hissa qo'sha olasiz. Keyingi darsda Git'ning foydali vositalarini β .gitignore, undo va stash'ni o'rganamiz.