Middle
Сиздин компанияңызда версия көзөмөл системасында филиалдарды бириктирүү (merge) же тарыхты кайра жазуу (rebase) кандай болот?
sobes.tech AI
AIден жооп
Биздин командада биз workflows, Gitке негизделген. Өзгөртүүлөрдү интеграциялоо үчүн биз эки негизги ыкманы колдонобуз: merge жана rebase, алардын ар бири кырдаал жана шылуунун түрүнө жараша тандалат.
Merge:
- Узак мөөнөттүү шылууну бириктирүү үчүн колдонулат, мисалы, dev менен main, же функциялык шылууну devке интеграциялоо.
- Бириктирүү коммитин түзөт, ал кайсы учурда башка шылуунун өзгөртүүлөрү кошулганынын так көрсөтмөсү болот.
- Бардык коммиттердин тарыхын сактайт, анын ичинде бардык тармакташууларды.
git checkout dev // Максаттуу шылууну тандоо
git merge feature/new-feature // Функциялык шылууну бириктирүү
Rebase:
- Функциялык шылуунун таза жана түз тарыхын сактоо үчүн колдонулат, адатта, алардын интеграциясына чейин (көбүнчө devке)
- Учурдагы шылуунун коммиттерин максаттуу (dev) шылуунун үстүнө которот, effectively "rewrite" тарыхын түзөт.
- Тарыхты жөнөкөйлөтөт, ар бир кичинекей функция же оңдоого мерж-коммиттерден качуу.
- Маанилүү: Эч качан rebase жасабагыла коомдук шылуундарда, башка иштеп жаткан иштеп чыгуучулардын үстүндө, анткени бул конфликттерди түзөт.
git checkout feature/new-feature // Функциялык шылууну тандоо
git rebase dev // Функциялык шылуунун коммиттерин devдин үстүнө которуу
// Эгер конфликттер пайда болсо, аларды чечүү
git push --force-with-lease // rebaseден кийин коопсуз push үчүн --force-with-lease колдонобуз
Биздин стандарттык workflow:
- Жаңы функция же оңдоо өзүнчө шылуунда иштелип чыгат (feature/..., fix/...).
- Жыл сайын (pull request алдында же dev менен синхрондоо үчүн) функциялык шылуун rebase кылынат актуалдуу devге. Бул эрте конфликттерди чечүүгө жардам берет.
- Иштөө аяктагандан жана кодду карап чыгандан кийин, функциялык шылуун биригет
devмененno-ff(non-fast-forward) режиминде, бириктирүү маалыматын сактоо үчүн. Анын ордуна, кээде, кыска функциялар же оңдоолор үчүн, мерж алдында бир коммитке сквош кылынат. devтен мезгил-мезгили менен релиздер жасалатmain(өндүрүш) шылуунуна, ар дайым merge аркылуу.
Ошентип, биз commit тарыхын сактоо (merge) менен таза иштеп жаткан шылуунду сактоо (rebase) ортосунда баланс табабыз.