Fork — Git hosting platformasida boshqa repositoryning foydalanuvchi yoki tashkilot hisobidagi alohida server nusxasini yaratish mexanizmidir. Fork odatda asl loyihaga bevosita push huquqi bo‘lmagan ishtirokchiga o‘z branchlarini joylash va pull request yuborish imkonini beradi. Bu Gitning asosiy commandi emas, GitHub, GitLab kabi hosting xizmatlari taqdim etadigan hamkorlik tushunchasidir.
Fork va clone
Fork server tomonida yangi repository obyektini yaratadi. Clone esa repositoryni lokal kompyuterga oladi. Odatdagi oqimda avval platformada fork yaratiladi, keyin fork clone qilinadi.
git clone git@host:user/project.git
cd project
git remote add upstream https://host/original/project.git
origin foydalanuvchi forkini, upstream asl loyihani ko‘rsatadi. Bu nomlar konvensiya, Git majburiyati emas.
O‘zgarish yuborish
Contributor forkda feature branch yaratadi, commit qiladi va originga push qiladi. Hosting platformasida fork branchidan upstream branchiga pull request ochiladi. Upstream maintainers review va CI natijasiga qarab o‘z repositorysiga merge qiladi.
Pull request ochilgani contributor forkidagi branchga maintainer avtomatik yozish huquqi oladi degani emas. Platforma “maintainer edits” uchun alohida ruxsat taklif qilishi mumkin.
Upstream bilan sinxronlash
Asl loyiha rivojlangani sari fork ortda qoladi. git fetch upstream yangi commitlarni oladi. Lokal main upstream/main bilan fast-forward yoki reset siyosati asosida yangilanadi, so‘ng origin forkiga push qilinadi.
Feature branch uzoq yashasa yangi upstream o‘zgarishlarini merge yoki rebase qiladi. Forkning web interfeysida sync tugmasi bo‘lishi mumkin, ammo conflictli holat lokal Gitda hal qilinadi.
Xavfsizlik
Forkdan kelgan pull request ishonchsiz kod bo‘lishi mumkin. CI secretlari bunday workflowga odatda berilmaydi. pull_request_target kabi base context triggerlari noto‘g‘ri checkout bilan ishlatilsa contributor kodi yuqori huquqda bajarilishi mumkin.
Maintainer fork branchini lokalga olib test qilganda build script va binarylarni ishonchli deb qabul qilmaydi. Review faqat diff matnini emas, dependency, workflow va generated fayllarni ham qamrab oladi.
Tarmoq va mustaqil fork
Hosting platformasi forklarni repository network sifatida bog‘lashi va commit obyektlarini storage’da bo‘lishishi mumkin. Fork o‘chirilsa yoki private holat o‘zgarsa platforma siyosati uning network aloqasiga ta’sir qiladi.
Ochiq kod loyihasining mustaqil yo‘nalishga ajralishi ham “fork” deb ataladi. Bunday loyiha faqat hosting nusxasi emas; yangi nom, boshqaruv va release yo‘liga ega bo‘lishi mumkin.
Litsenziya va maxfiylik chegarasi
Texnik jihatdan fork yaratish koddan foydalanish huquqini o‘z-o‘zidan bermaydi; ruxsat repository litsenziyasi bilan belgilanadi. Ochiq loyiha forki commit tarixini saqlaydi, shu sababli avval tarixga yozilgan maxfiy kalit keyingi commitda o‘chirilsa ham eski obyektlarda qolishi mumkin. Bunday sir darhol bekor qilinib, zarur bo‘lsa tarix maxsus vosita bilan qayta yoziladi. Xususiy repository forklarining ko‘rinishi va tashkilotdan tashqariga chiqishi hosting platformasi siyosatiga bog‘liq. Xodim kirishi bekor qilinganda unga tegishli fork va pull requestlardagi ma’lumot hayot sikli ham alohida tekshiriladi.
Forkdagi branch nomi upstreamdagi nom bilan bir xil bo‘lishi mumkin, ammo ular mustaqil reference’lardir. Pull request source va target repository hamda branch juftligini aniq ko‘rsatadi. Noto‘g‘ri target tanlansa, o‘zgarish boshqa release yo‘nalishiga yuborilishi mumkin.
Bog‘liq tushunchalar
Git, clone, upstream, origin, pull request, repository hosting, open source