Middle
Kuidas teie ettevõttes toimub harude ühendamine (merge) või ajaloo ümberkirjutamine (rebase) versioonikontrollis?
sobes.tech AI
Vastus AI-lt
Meie meeskonnas järgime workflows, mis põhinevad Gitil. Põhjalike muudatuste integreerimiseks kasutame kahte peamist lähenemisviisi: merge ja rebase, valides need vastavalt olukorrale ja haru tüübile.
Merge:
- Tavaliselt kasutatakse pikaajaliste harude ühendamiseks, näiteks dev maini või funktsiooniharude integreerimiseks dev-i.
- Loob ühendamise commit'i, mis selgelt näitab, millal toimus muudatuste ühendamine teistest harudest.
- Säilitab kogu commit'i ajaloo, kaasa arvatud kõik harud.
git checkout dev // Liigume sihtharule
git merge feature/new-feature // Funktsiooniharude ühendamine
Rebase:
- Kasutatakse puhta ja sirge ajaloo säilitamiseks funktsiooniharudes enne nende integreerimist (tavaliselt dev-i).
- Viib praeguse haru commit'id üle sihtharu (dev) tippu, mis efektiivselt "kirjutab" ajaloo ümber.
- Lihtsustab ajalugu, vältides merge commit'ide loomist iga väikese funktsiooni või paranduse jaoks.
- Oluline: Ära kunagi tee rebase'i avalikel harudel, millel töötavad teised arendajad, kuna see võib põhjustada konflikte.
git checkout feature/new-feature // Liigume funktsiooniharule
git rebase dev // Viime funktsiooniharude commit'id dev-i tippu
// Kui tekivad konfliktid, lahendame need
git push --force-with-lease // Kasutame --force-with-lease turvaliseks push'iks pärast rebase'i
Meie standardne workflow:
- Uus funktsioon või parandused arendatakse eraldi harul (feature/..., fix/...).
- Aeg-ajalt (enne pull request'i või sünkroniseerimiseks dev-iga) rebase'itakse funktsiooniharust aktuaalse dev-i peale. See aitab varakult konflikte lahendada.
- Pärast arenduse lõpetamist ja koodikontrolli, funktsiooniharust tehakse merge
dev-gano-ff(non-fast-forward) režiimis, et säilitada ühendamise teave. Või harvem, sulatatakse see ühe commit'i sisse enne merge'idev-sse väikeste funktsioonide või paranduste jaoks. - Aeg-ajalt tehakse
dev-st väljaandeidmain-i (tootmis) harusse, alati merge'i teel.
Seega, saavutame tasakaalu commit'ide ajaloo säilitamise (merge) ja puhta arendusharu säilitamise (rebase) vahel.