Middle
Sizning kompaniyangizda versiya nazorati tizimida filiallarni birlashtirish (merge) yoki tarixni yozib olish (rebase) qanday amalga oshiriladi?
sobes.tech AI
AIdan javob
Jamoamizda, biz Git asosida ishlash oqimini qabul qilamiz. O'zgarishlarni integratsiya qilish uchun biz ikki asosiy yondashuvni qo'llaymiz: merge va rebase, ularni vaziyat va tarmoq turiga qarab tanlaymiz.
Merge:
- Umuman olganda, uzoq umr ko'radigan tarmoqlarni birlashtirish uchun qo'llaniladi, masalan, dev va main, yoki funktsiya tarmoqlarini dev ga integratsiya qilish uchun.
- Boshqa tarmoqlardan o'zgarishlar qachon birlashtirilganligini aniq ko'rsatadigan merge commit yaratadi.
- Barcha commit tarixini, barcha ajralishlarni saqlaydi.
git checkout dev // Maqsad tarmog'iga o'tamiz
git merge feature/yangi-funksional // Funktsiya tarmog'ini birlashtiramiz
Rebase:
- Funktsiya tarmoqlarida toza va chiziqli commit tarixini saqlash uchun ishlatiladi, odatda dev ga integratsiyadan oldin.
- Joriy tarmoq commitlarini maqsad tarmoqning eng yuqori qismiga o'tkazadi, tarixni "yangi yozadi".
- Tarixni soddalashtiradi, har bir kichik funktsiya yoki tuzatish uchun merge commitlarini oldini oladi.
- Muhim: Boshqalar ishlayotgan ommaviy tarmoqlarda rebase qilmaslik kerak, chunki bu o'zgarishlarni pullashda konfliktlarga olib kelishi mumkin.
git checkout feature/yangi-funksional // Funktsiya tarmog'iga o'tamiz
git rebase dev // Funktsiya commitlarini dev ning eng yuqori qismiga o'tkazamiz
// Zarur bo'lsa, konfliktlarni hal qilamiz
git push --force-with-lease // Rebase'dan so'ng xavfsiz push uchun --force-with-lease ni ishlatamiz
Bizning standart ish oqimimiz:
- Yangi funktsiya yoki tuzatish alohida tarmoqda (feature/..., fix/...) ishlab chiqiladi.
- Davriy (pull requestdan oldin yoki dev bilan sinxronlashtirish uchun) funktsiya tarmog'i hozirgi dev ga rebase qilinadi. Bu erta bosqichda konfliktlarni hal qilishga yordam beradi.
- Ishlab chiqish va kodni ko'rib chiqish tugagach, funktsiya tarmog'i
no-ffbilandevga birlashtiriladi, bu birlashtirish haqida ma'lumotni saqlab qoladi. Yoki, kamroq hollarda, juda kichik funktsiyalar yoki tuzatishlar uchun,devga birlashtirishdan oldin bitta commitga squash qilinadi. devdan muntazam ravishdamainga chiqarishlar amalga oshiriladi ( ishlab chiqarish tarmog'i), har doim merge yordamida.
Shu tarzda, biz commit tarixini saqlash (merge) bilan toza rivojlanish tarmog'ini saqlash (rebase) o'rtasida muvozanat yaratamiz.