Fejlesztés epic branch használatával
1. Miért/Mikor használunk epic brancheket?
Az epic branchek használatát részben az indokolja, hogy vannak olyan komplex feature fejlesztések, amelyek csak egyben
mergelhetőek vissza a develop branchre.
Ez kifejtve azt jelenti, hogy bár az epic branchből további feature branchek ágazhatnak le, (hiszen a komplex fejlesztés
valószínűleg további részfeladatokra bontható), de ezek az epic-ből ágazó feature branchek önmagukban nem feltétlenül
hordoznak üzletileg értéket, ezért nem mergelhetőek vissza önállóan a develop-ra.
Ezen kívül az epic branchek használatát az is indokolhatja, ha szeretnénk, hogy már azelőtt elkezdődhessen az epichez
tartozó feature fejlesztés, mielőtt konkrét döntés születne arról, hogy az melyik jövőbeli alkalmazásverzióba fog bekerülni.
2. Az epic branch nyitása/megszűnése
2.1 epic branch nyitása
Az epic branch nyitható develop de bizonyos esetekben release branchekből is.
epic branch nyitása release branchből
Előfordulhat, hogy az üzleti igény szerint egy epicben leírt funkció a 8.0.0 verzióba kellene, hogy kerüljön.
Ilyenkor, amennyiben a release/8.0.0 branch már elkészült, és a develop branchen már a 9.0.0 verzióhoz tartozó
fejlesztések zajlanak, akkor az említett epic fejlesztéshez szükséges epic branchet a release/8.0.0 branchből kell nyitni.
2.2 epic branch megszűnése
Amikor az epic branchhez tartozó összes fejlesztés elkészült:
- merge request nyitása szükséges,
- abba a branchbe kell mergelni amelyiken annak a verziónak a fejlesztése zajlik, amelyikben az epic fejlesztést is szállítani szeretnénk
- squash-olni kell a commitokat, hogy a
developvagyreleasebranchre a merge után 1 darab commit kerüljön.
Commitok megtartása az epic branchen
Felmerülhet a projekten, hogy nem szeretnénk squasholni az epic-hez tartozó commitokat amiatt, hogy a Git history-ban megmaradjanak az epicből nyíló feature branchek merge commitjai. Bizonyos esetekben ennek valóban lehetnek előnyei, de olyannyira megnehezítheti az epic branch karbantartását (pl.: a rebease-eket a célbranch-el), hogy a Semi ajánlás mindenképp a commitok squasholása az epic branchen.
release branchből nyitott epic branch mergelése develop-ra
Előfordulhat, hogy az üzleti igény szerint egy epicben leírt funkció a 8.0.0 verzióba kellene, hogy kerüljön.
Ilyenkor, amennyiben a release/8.0.0 branch már elkészült, és a develop branchen már a 9.0.0 verzióhoz tartozó
fejlesztések zajlanak, akkor az említett epic fejlesztéshez szükséges epic branchet a release/8.0.0 branchből kell nyitni.
Amennyiben az a döntés születik, hogy az epicben leírt funkció mégsem kerül be a 8.0.0 verzióba, hanem a 9.0.0 verzióba kell kerüljön, akkor az epic branchet a develop-ra kell mergelni.
Értelemszerűen, ha az epic branch mergelése előtt időközben elkészült a release/9.0.0 branch, és a develop branchen már a 10.0.0 verzióhoz tartozó fejlesztések zajlanak, akkor a fent említett epic branchet a release/9.0.0-ra kell mergelni.
epic branch mergelése
Általánosan megfogalmazva az epic branchet mindig abba a branchbe kell visszamergelni, amelyiken annak a verziónak a fejlesztése zajlik, amelyikben az epic fejlesztést is szállítani szeretnénk.
A gyakorlatban:
- Ha az epic fejlesztést tartalmazni kívánt verzióhoz már létezik
releasebranch, akkor abba areleasebranchbe kell mergelni azepicbranchet. - Ha az epic fejlesztést tartalmazni kívánt verzióhoz tartozó fejlesztések a
develop-on zajlanak akkor adevelop-ra kell mergelni azepicbranchet.
3. Az epic fejlesztéséhez tartozó feature branchek nyitása/megszűnése
3.1 Az epic fejlesztéshez tartozó feature branch nyitása
Az epic-hez tartozó részfeladatokat feature brancheken szükséges lefejleszteni. Ezeket a feature brancheket minden esetben az epic branchből kell nyitni.
3.2 Az epic fejlesztéshez tartozó feature branch megszűnése
Amennyiben a fejlesztés elkészült:
- merge request nyitása szükséges,
- a
featurebranchet minden esetben azepicbranchre kell mergelni, - squash-olni kell a commitokat, hogy az
epicbranchre a merge után 1 darab commit kerüljön.
4. Az epic branch karbantartása
Mivel az epic branchen hosszabb ideig tart a fejlesztés, így fokozatosan lemarad a cél branchez képest.
Épp ezért célszerű az epic branchet rendszeres időközönként rebase-elni a célbranchre, hogy ne a mergelés előtt kelljen
bonyolult rebase-elést végezni. Ilyenkor squash-oljuk is az aktuálisan epic branchen lévő commitokat, ezáltal is könnyítve
a rebaset.
Amennyiben a célbranch-hez képest jelentős lemaradásban van az epic branchünk, vagy összetett conflictok feloldása szükséges
a rebase során, akkor célszerű a célbranchből egy ideiglenes branchet létrehozni, amit rebaselhetünk az epic branchre,
és a rebase végeztével ezt az ideiglenes branchet mergeljük az epic branchre.
Példa az epic branch célbranchre történő rebaselésére ideiglenes branchet használva
Tegyük fel, hogy az epic branchet a develop-ból nyitottuk.
A rebase lépései:
- Ideiglenes branch létrehozása a célbranchből (jelen esetben
develop-ból), amit pusholjunk is a remote repositoryba: -
(Opcionális) Amennyiben számos committal le van maradva az
Aepicbranch a célbranchez (develop) képest, célszerű a célbranch commitjait squash-olni, mielőtt belekezdünk a rebase-be.commitok-számaértelemszerűen adevelop-changes-temporarybranch,epicbranch-hez képesti commitjainak számát jelenti. Pl.: Ha 5 commit található rajta, akkor a parancs:git rebase -i HEAD~5. -
Ideiglenes branch rebaselése az
epic-re: - Az esetleges conflictok feloldása.
- A rebase eredményének pusholása:
- Merge request nyitása, és az
develop-changes-temporarybranch mergelése azepicbranchre. -
Az eddigi lépések eredménye az lesz, hogy a
develop-ra bekerült fejlesztések átkerülnek azepicbranch-re. Azonban, mielőtt azepicbranchet mergelni tudnánk adevelop-ra, azepicbranchet is rebaselni kell adevelop-ra.Amennyiben az
epicbranch commitjait squasholjuk, úgy ez a második rebase könnyebben véghezvihető, ugyanis a conflictokat már feloldottuk adevelop-changes-temporarybranch rebaselése során, így azepicbranch rebaselése során már elegendő azepic-ből érkező módosításokat elfogadnunk. Fontos, hogy ez csak akkor igaz, ha az epic branchen található commitokat squasholjuk a rebase előtt!
feature branchek rebase-elése, az epic branchek rebase-elése után
Miután az epic branchet rebase-eljük a célbranchre, az epic branchből ágazó feature brancheket is rebaselnünk kell az epic branchre.
Az, hogy rebase szükséges onnan is észrevehető, hogy a feature branchünkön olyan commitok jelennek meg, amelyek valójában már mergelve vannak az epic branchre.
Ilyenkor a feature rebase során azzal szembesülhetünk, hogy olyan kódban is conflictot kell feloldanunk, amelyet valójában nem érintettek a feature branchen zajló fejlesztéseink.
Ebben az esetben NE ijedjünk meg, hanem amennyiben a kérdéses kódban nem végeztünk a feature branchen módosítást, egyszerűen fogadjuk el az epic branchen lévő állapotot (hiszen az már rebaselve van).
Fontos azonban, hogy azoknál a kódoknál amelyek valóban módosultak a feature branchen történő fejlesztés során, továbbra is fel kell oldanunk a conflictokat.