Sobes.tech
Middle

Ինչպե՞ս է ձեր ընկերությունում տեղի ունենում ճյուղերի միավորում (merge) կամ պատմության վերականգնում (rebase) տարբերակային կառավարման համակարգում։

sobes.tech AI

Պատասխան AI-ից

Մեր թիմում մենք հետևում ենք workflows, որոնք հիմնված են Git-ի վրա: Թե՞մ փոփոխությունները ինտեգրելու համար մենք օգտագործում ենք երկու հիմնական մոտեցում՝ merge և rebase, որոնք ընտրում ենք իրավիճակից և ճյուղի տեսակից կախված:

Merge:

  • Հաճախ կիրառվում է երկարատև ճյուղերի միացման համար, օրինակ՝ dev-ը main-ին կամ ֆիչեր-ճյուղերի ինտեգրացիայի համար՝ dev-ում:
  • Ստեղծում է միացման commit, որը հստակ ցույց է տալիս, երբ տեղի է ունեցել փոփոխությունների միացում այլ ճյուղերից:
  • Պահպանում է ամբողջ պատմությունը, ներառյալ բոլոր ճյուղավորումները:
git checkout dev  // Փոխվում ենք նպատակային ճյուղը
git merge feature/new-feature  // Կատարում ենք ֆիչեր-ճյուղի միացում

Rebase:

  • Օգտագործվում է մաքուր և ուղիղ պատմություն պահելու համար՝ ֆիչեր-ճյուղերում մինչև դրանց ինտեգրացիան (հաճախ՝ dev-ում):
  • Թեկուզում է ներկայիս ճյուղի կոմիտները վերևում՝ նպատակային (dev) ճյուղի, ինչը effectively "rewrite" է պատմությունը:
  • Պարզեցնում է պատմությունը՝ խուսափելով merge-կոմմիտներից՝ յուրաքանչյուր փոքր ֆիչեր կամ ուղղում:
  • Կարևոր: Երբեք rebase չկատարել հանրային ճյուղերի վրա, որոնց վրա աշխատում են ուրիշ ծրագրավորողներ, քանի որ դա կարող է առաջացնել կոնֆլիկտներ:
git checkout feature/new-feature  // Փոխվում ենք ֆիչեր-ճյուղը
git rebase dev  // Թեկուզում ենք ֆիչեր-ճյուղի կոմիտները՝ վերևում՝ dev-ի
// Եթե անհրաժեշտ է՝ լուծում ենք կոնֆլիկտները
git push --force-with-lease  // Օգտագործում ենք --force-with-lease՝ անվտանգ push-ի համար rebase-ից հետո

Մեր ստանդարտ workflow:

  1. Նոր ֆիչեր կամ ուղղում զարգանում է առանձին ճյուղում (feature/..., fix/...).
  2. Ժամանակ առ ժամանակ (pull request-ի առաջ կամ՝ սինխրոնիզացիայի համար dev-ի հետ) ֆիչեր-ճյուղը rebase է կատարվում актуալ dev-ի վրա՝ early resolve կոնֆլիկտները:
  3. Թարմացումների ավարտից հետո և code review-ից հետո, ֆիչեր-ճյուղը միավորվում է dev-ի հետ no-ff (non-fast-forward) ռեժիմով՝ պահպանելու համար միացման տեղեկությունը:
  4. dev-ից ժամանակ առ ժամանակ կատարվում են ռելիզներ main (արտադրական ճյուղ)՝ միշտ merge-ի միջոցով:

Այսպիսով, մենք հավասարակշռում ենք commit-ների պատմությունը պահպանելու (merge) և մաքուր զարգացող ճյուղը պահելու (rebase) միջև։