Middle
Kaip jūsų įmonėje vyksta šakų sujungimas (merge) arba istorijos perrašymas (rebase) versijų valdymo sistemoje?
sobes.tech AI
Atsakymas iš AI
Mūsų komandoje mes laikomės workflows, pagrįstų Git. Norėdami integruoti pakeitimus, naudojame du pagrindinius metodus: merge ir rebase, pasirenkant juos priklausomai nuo situacijos ir šakos tipo.
Merge:
- Paprastai naudojamas ilgalaikių šakų sujungimui, pavyzdžiui, dev į main arba funkcijų šakų integracijai į dev.
- Sukuria sujungimo commit'ą, kuris aiškiai rodo, kada įvyko pakeitimų sujungimas iš kitų šakų.
- Išlaiko visą commit'ų istoriją, įskaitant visas šakotuvės.
git checkout dev // Pereiname į tikslinę šaką
git merge feature/new-feature // Atliekame funkcijos šakos sujungimą
Rebase:
- Naudojamas švarios ir tiesios istorijos išlaikymui funkcijų šakose iki jų integracijos (dažniausiai į dev).
- Perkelia dabartinės šakos commit'us į tikslinės (dev) šakos viršų, efektyviai "perrašydamas" istoriją.
- Supaprastina istoriją, vengiant merge commit'ų kiekvienai mažai funkcijai ar pataisymui.
- Svarbu: Niekada nevykdykite rebase viešose šakose, kuriose dirba kiti kūrėjai, nes tai gali sukelti konfliktus.
git checkout feature/new-feature // Pereiname į funkcijos šaką
git rebase dev // Perkeliame funkcijos šakos commit'us į dev viršų
// Jei kyla konfliktų, juos išsprendžiame
git push --force-with-lease // Naudojame --force-with-lease saugiam push po rebase
Mūsų standartinis workflow:
- Nauja funkcija ar pataisymas vystosi atskiroje šakoje (feature/..., fix/...).
- Laikas nuo laiko (prieš pull request arba sinchronizuojant su dev) funkcijos šaka rebase'ina į aktualų dev. Tai padeda anksti išspręsti konfliktus.
- Baigus vystymą ir atlikus kodo peržiūrą, funkcijos šaka sujungiama su
devnaudojantno-ff(non-fast-forward), kad išsaugotų sujungimo informaciją. Arba, rečiau, suklijuojama į vieną commit'ą prieš mūšį įdevmažoms funkcijoms ar pataisymams. - Iš
devperiodiškai daromi leidimai įmain(produkcinę šaką), visada naudojant merge.
Taip mes pasiekiame balansą tarp commit'ų istorijos išsaugojimo (merge) ir švarios vystymosi šakos išlaikymo (rebase).