Jednou z výhod používania viacerých vetiev v projekte je transparentnosť a poriadok životného cyklu projektu. Je jedno či vyvíjame malý eshop alebo veľké portálové riešenie, v projekte musí byť poriadok. Zavedením feature, release alebo hotfix vetiev nám dáva lepší prehľad v akom stave sú jednotlivé iterácie projektu, čo je nasadené v produkcii, čo sa práve testuje alebo na akej novej funkcionalite sa práve pracuje. Vývojový proces projektu a orientácia v ňom je jednoduchšia.


Používané vetvy v Morione

  • Develop - najaktuálnejšia a najpoužívanejšia pracovná vetva.
  • Master - Najvyššie položená vetva, ktorá musí reflektovať produkčný kód. Inými slovami, to čo je nasadené na produkcii musí byť v master vetve.
  • Hotfix - produkčné chyby, ktoré je potrebné vyriešiť ihneď sa opravujú na tejto vetve.
  • Release - testovaná verzia, čakajúca na produkčné nasadenie
  • Feature - vetva na vývoj konkrétnej funkcionality


Vývojový proces


Pri vývoji aplikácie používame sémantické verzovanie.


Develop a feature vetva

Vývoj sa začína na develop vetve. Vytváranie novej funkcionality vždy na feauture vetvy. Naraz môže vzniknúť aj viacej feature vetiev. Podmienkou je aby po vyvinutí funkcionality bol kód mergovaný do develop vetvy.


Release vetva

Ak nastane obdobie, kedy sa má začať testovať release, ktorý bude neskoršie nasadení na produkcii, z developu sa vytvorí release vetva. Chyby nájdené počas testovania sa opravujú priamo na tejto vetve. Stabilná verzia sa nasadzuje do produkcie a merguje do master vetvy.


Hotfix vetva

Ak na produkcii vznikol menší problém, z master vetvy sa vytvorí vetva hotfix. Na tejto vetve sa opravujú kritické chyby vzniknuté na produkcii a opatovne nasadzujú na produkciu s mergovaním do master vetvy. Následné je ale potrebné premergovať vetvu do develop vetvy.


Master vetva

Produkčný kód musí vždy reflektovať master vetvu.

Funkcionalita vetiev na rôznej úrovni sa samozrejme dá zabezpečiť štandardnými gitovými príkazmi. My však používame git-flow čo je akási nadstavba nad gitom git-flow

            # Inštalácia Mac
            brew install git-flow

            # Inštalácia Linux Debian
            apt-get install git-flow

            # Inštalácia Fedora
            sudo dnf install gitflow
                            

Potom stačí priamo na už existujúcom git repozitáry

            git flow init
                            

Po zadaní príkazu je potrebné nastaviť názvy jednotlivých vetiev a verzovanie. Default hodnoty zabezpečia nastavenie aké som spomenul vyššie.

            Initialized empty Git repository in ~/project/.git/
            No branches exist yet. Base branches must be created now.
            Branch name for production releases: [master]
            Branch name for "next release" development: [develop]

            How to name your supporting branch prefixes?
            Feature branches? [feature/]
            Release branches? [release/]
            Hotfix branches? [hotfix/]
            Support branches? [support/]
            Version tag prefix? []
                            

Git-flow je len nejaká obálka (wrapper) nad existujúcimi git príkazmi, takže príkaz git flow init nezmení nič na repozitáry okrem vytvorenia vetiev. Ak nechcete používať git-flow tak sa nič nezmení a nie je potrebné nič vymazávať alebo odinštalovať.

            # Vytvorenie feature vetvy
            git flow feature start nazov_novej_funkcionality
                            

Po zadaní príkazu nám vznikne vetva feature/nazov_novej_funkcionality. Do tejto vetvy sa commitujú zmeny.

            # Ukončenie feature vetvy
            git flow release finish nazov_novej_funkcionality
                            

Vykonaný príkaz nám merguje zmeny do develop vetvy a vymaže vytvorenú feature vetvu. Git flow používa na mergovanie príkaz git merge --no-ff feature/nazov_novej_funkcionality takže sa informácie o historických zmenách udržia.

Pri vytváraní releasu máme možnosť vytvoriť tag, čiže verziu releasu. Číslo verzie zadáme manuálne.

            git flow release start 0.1.0

                            

Release vetva sa vytvorí z develop vetvy a otaguje sa v oboch prípadoch hodnotou 0.1.0

            # Ukončenie releasu
            git flow release finish 0.1.0
                            

Automaticky sa merguje release vetva do master vetvy. Vymaže sa release vetva a tiez sa merguje vetva do developu.

            # Fixnutie chyby na master vetve
            git flow hotfix start nazov_chyby

            # Ukončenie hotfixu
            git flow hotfix finish nazov_chyby
                            

Automaticky sa mergne brancha do master vetvy. Zvýši sa verzovanie na hodnotu 0.0.1. Zmerguje sa vetva aj s vetvou develop a nakoniec sa vetva hotfix vymaže.


Záver

Git flow nám pomáha udržiavať git vetvy čisté a uľahšuje celkovú prácu s release menežmentom. Táto úloha sa dá dosiahnuť aj bez použitia git-flow len git príkazmi, ale prečo veci zbytočne komplikovať, keď sa dajú robiť jednoducho a lepšie.


Michal Kalman
Michal Kalman
Softvérový vývojár

Full-stack developer a podnikateľ zameriavajúci sa na platformu Java, Python. Mám dlhoročné profesionálne skúsenosti s vývojom Java/JavaEE aplikácií. Som zakladateľ firmy Morione, ktorá sa venuje návrhom a realizáciou škálovateľných webových aplikácií. Podporujem a vyvíjam viaceré startupy. Vo voľnom čase cestujem po svete, behám po horách, píšem blogy a tvorím kreatívne videá.