- Published on
Git: remote repozitoriyga push va pull qilish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
HozirgΠ°ΡΠ° qilingan barcha o'zgarishlar faqat local (kompyuterdagi) repozitoriyda saqlangan edi. Remote repozitoriy (masalan, GitHub-dagi versiya) bu o'zgarishlardan hali xabardor emas. Bu darsda push va pull β local va remote repozitoriyalarni sinxronlash usullari ko'riladi.
Asosiy tushunchalar
- Push β local commit-larni remote repozitoriyga yuborish
- Pull β remote repozitoriydagi commit-larni local versiyaga olib kelish
Push: Local repo β Remote repo (GitHub)
Pull: Remote repo (GitHub) β Local repo
Clone β repozitoriyni birinchi marta kompyuterga ko'chirish, bir martalik amal. Push va pull esa β kundalik ish jarayonida doimiy ravishda qaytarilib turadigan amallar.
Standart ish jarayoni
Loyiha ustida ishlashda odatdagi ketma-ketlik:
o'zgartirish β stage qilish β commit qilish β push qilish
Bu jarayon kun davomida bir necha marta takrorlanadi: stage β commit β push β stage β commit β push.
"Ahead" va "behind" holatlari
Source Control panelida branch holati ko'rsatiladi:
- Ahead (N commit) β local versiya remote-dan N ta commit oldinda, ya'ni hali push qilinmagan o'zgarishlar bor
- Behind (N commit) β local versiya remote-dan N ta commit ortda, ya'ni remote-da bor, lekin local-da yo'q o'zgarishlar bor
Bu holat faqat joriy branch uchun amal qiladi β har bir branch o'zining ahead/behind holatiga ega.
Push qilish
Xcode-da commit qilingandan so'ng push amali bajariladi. Tizim qaysi branch-ga push qilinishini so'raydi β odatda joriy ishlanayotgan branch tanlanadi.
Push qilingandan so'ng:
- Local va remote versiyalar bir xil commit-da bo'ladi
- Source Control panelidagi "ahead" raqami yo'qoladi
- GitHub-da o'zgarishlar ko'rinadi β har bir fayl uchun oxirgi commit ma'lumoti yangilanadi
Commit tarixi
GitHub-dagi yoki Git Kraken-dagi commit tarixida barcha commit xabarlari ko'rinadi. Bu boshqa dasturchilar uchun ham ochiq bo'ladi, shuning uchun:
- Faqat shaxsiy ishlatiladigan, hali remote-ga push qilinmagan commit-larda tezkorlik uchun qisqa yoki "iflos" xabarlar qabul qilinishi mumkin
- Remote repozitoriyga push qilinadigan commit-lar uchun aniq va tushunarli xabarlar yozish tavsiya etiladi (masalan, "feature: ..." yoki "fix: ..." formatida)
Commit-larni "squash" qilish va birlashtirish (merging) β bu mavzular alohida ko'rib chiqiladi.
Pull qilish
Boshqa joydan (yoki boshqa dasturchi tomonidan) remote repozitoriyga yangi commit qo'shilganda, local versiya bundan avtomatik xabardor bo'lmaydi. Bu holatda pull kerak bo'ladi.
Konflikt holati
Agar local versiyada remote-da yo'q commit bo'lsa va remote-da local-da yo'q commit bo'lsa (ikkala tomon ham mustaqil o'zgargan bo'lsa), push qilishga urinishda quyidagi xato chiqishi mumkin:
The local repository is out of date.
Make sure all changes have been pulled
before you can push to this branch.
Bu holat local branch bir vaqtning o'zida remote-dan bitta commit ortda va bitta commit oldinda bo'lganda yuz beradi.
Yechim β avval pull, keyin push
1. Integrate β Pull (Main branch-dan)
2. Git avtomatik ravishda remote o'zgarishlarni local versiyaga birlashtiradi
3. Endi local tarix to'liq β push qilish mumkin
Agar ikkala tomondagi o'zgarishlar bir-biriga zid kelmasa, Git ularni avtomatik birlashtiradi (merge qiladi), qo'shimcha aralashuvsiz.
Tavsiya etiladigan odat
Ish boshlanishidan oldin, ayniqsa boshqa odamlar bilan ishlanadigan loyihalarda, avval pull qilib local versiyani remote bilan tenglashtirish tavsiya etiladi. Bu kelajakda konfliktlar ehtimolini kamaytiradi.
Xulosa
Bu darsda o'rganildi:
- Push β local commit-larni remote-ga yuborish
- Pull β remote commit-larni local-ga olib kelish
- Ahead / Behind β local va remote branch orasidagi farq ko'rsatkichlari
- Standart jarayon: stage β commit β push
- Konflikt yuzaga kelganda β avval pull, keyin push
- Git ziddiyatsiz o'zgarishlarni avtomatik birlashtira oladi
Keyingi darslarda branching va merging mavzulari ko'rib chiqiladi.