IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

7. diel - Git - Správa vetiev

V minulej lekcii, Git - Skúmanie histórie - Dokončenie, sme dokončili skúmanie histórie. Zaoberali sme sa zoznamom všetkých vetiev, detailmi commitu, sledovaním a odstránením vykonaných zmien.

V dnešnom Git tutoriále sa budeme zaoberať vetvením. Vysvetlíme si, prečo sa nimi zaoberáme a čo nám do vývoja prinášajú. Ukážeme si, ako sa s vetvami pracuje.

Zase si všetky príkazy budeme skúšať v našom naklonovanom repositári Laravel z lekcie Git – Základy – Dokončenie. Otvoríme terminál MinTTY a pomocou príkazu cd laravel sa do repositára presunieme.

Čo je to vetva

Vetvy sú jedným z najdôležitejších konceptov v Gite. V Gite sú vetvy vytvárané pre oddelenie vývoja od hlavného vývojového stromu projektu. Každá vetva predstavuje samostatný vývojový smer, v ktorej môžeme vykonávať zmeny nezávisle na iných vetvách. To umožňuje rôznym členom tímu pracovať na rôznych funkciách alebo opravách chýb súčasne bez toho, aby sa navzájom ovplyvňovali.

Vetvy sú iba ukazovatele na commit. Keď vytvoríme vetvu, Git vytvorí nový ukazovateľ. Nemení históriu úložiska.

Nasledujúci obrázok ukazuje, ako jednotlivé vetvy ovplyvňujú vývoj projektu:

Vetvenie projektu - Git

Tento prístup k vývoju softvéru zníži možnosť začlenenia chybového kódu do hlavnej verzie kódovej základne.

V Gitu vetva označuje nový bod v histórii projektu. Tento bod obsahuje vlastnú verziu kódu alebo kópiu projektu a vyvíja sa nezávisle na hlavnom vývojovom strome.

Typy vetiev

Existujú dve hlavné kategórie vetiev:

  • hlavná vetva,
  • funkčné vetvy.

Vďaka nezávislosti vetiev je možné paralelne pracovať na rôznych funkciách v projekte. Po dokončení zmien je možné vetvu s danou funkciou zlúčiť späť do hlavnej vetvy alebo hlavnej verzie kódu, čím sa nové zmeny integrujú do hlavného vývoja. Týmto spôsobom je zaistené, že iba testovaný a overený kód je začlenený do hlavného vývoja.

Hlavná vetva

Predvolená, alebo hlavná vetva, predstavuje stabilnú verziu projektu. Väčšinou sa nazýva Master alebo Main.

Názov hlavnej vetvy je možné nastaviť v inštalátore Gitu, alebo ju môžeme premenovať.

Funkčné vetvy

Funkčné vetvy, alebo feature branches, sú vytvárané za účelom implementácie nových funkcií alebo opravy chýb. Po dokončení práce v týchto vetvách môžeme vykonať zlúčenie späť do hlavnej vetvy.

Výhody vetiev

Vetvenie v Gite nám prináša niekoľko kľúčových výhod, ako napríklad:

  • paralelný vývoj,
  • izolácia zmien,
  • experimentovanie,
  • ľahké spravovanie verzií,
  • spätné zlúčenie (Merge).

Tieto výhody prispievajú k efektívnemu a ľahkému vývoju softvérových projektov. Poďme sa na ne pozrieť bližšie.

Paralelný vývoj

Paralelný vývoj umožňuje tímu pracovať na rôznych častiach projektu alebo opravách súčasne. Zvyšuje produktivitu a urýchľuje vývojový cyklus.

Izolácia zmien

Izoláciou zmien do vetiev umožňuje vývojárom pracovať nezávisle na sebe a izolovať svoje zmeny od ostatných častí projektu. Tým sa minimalizuje riziko konfliktov, ktoré by mohli nastať pri spoločnej práci na rovnakých súboroch. Izolácia zmien tiež zaisťuje, že jedna časť projektu nemôže nechcene narušiť funkčnosť inej časti.

Experimentovanie

Vývoj v experimentálnych vetvách umožňuje vývojárom testovať nové funkcie a nápady bez ohrozenia hlavného vývoja projektu. Experimentovanie v oddelených vetvách dáva vývojárom možnosť iteratívne pracovať na nových funkciách a zároveň udržiavať hlavnú kódovú základňu v stabilnom stave.

Ľahké spravovanie verzií

Vďaka vetvám je možné sledovať kompletnú históriu projektu a ľahko identifikovať, aké zmeny boli vykonané, kto ich vykonal a kedy. Kompletné údaje o histórii projektu:

  • uľahčujú identifikáciu chýb,
  • umožňujú tímu spätne obnoviť predchádzajúce verzie projektu,
  • znižujú riziko straty dát,
  • zaisťujú bezpečnosť projektu.

Spätné zlúčenie (Merge)

Po dokončení prác na vetve je možné vykonať spätné zlúčenie (merge) zmien z tejto vetvy späť do hlavnej vetvy. Táto funkcia umožňuje integrovať novú funkcionalitu alebo opravy chýb do hlavného projektu a zároveň udržať históriu zmien transparentnú a dobre organizovanú.

Spätné zlúčenie je kľúčové pre začlenenie nových funkcií do hlavného produktu a pre udržanie konzistencie a stability projektu.

Správa vetiev

Pre správu vetví v Gite je základným nástrojom príkaz git branch. Pomocou tohto príkazu môžeme vetvy:

  • zobraziť,
  • vytvoriť,
  • premenovať,
  • zmazať.

Zobrazenie vetiev

Na zobrazenie všetkých vetiev v repositári slúži príkaz git branch. My si ho teraz vyskúšame v našom repositári laravel. Príkazom git branch vypíšeme zoznam všetkých vetiev v repositári:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch
* 10.x
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Skúsme si znova zobraziť vetvy, tentoraz však vrátane vetiev na vzdialenom repositári. Na to slúži atribút -a alebo --all. Zadajme teda príkaz git branch --all, čím dostaneme tento výpis:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch --all
* 10.x
  remotes/origin/10.x
  remotes/origin/3.0
  remotes/origin/5.0
  ...
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

* značí, na ktorej vetve sa nachádzame

A nakoniec si zobrazme iba vetvy zo vzdialeného úložiska pomocou atribútu -r alebo --remotes. Zadajme príkaz git branch -r, ktorým sa vypíše nasledujúci zoznam vetiev:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch --remotes
  origin/10.x
  origin/3.0
  origin/5.0
  origin/5.1
  origin/5.2
  ...
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Vytvorenie novej vetvy

Nové vetvy tvoríme príkazom git branch <branch_name>. Rovnako ako commit, každá vetva má vlastný identifikátor alebo hash a unikátny názov. Vytvorme si vetvu s názvom test spustením príkazu git branch test:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch test
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Vytvorili sme novú vetvu s názvom test, ktorá je kópiou hlavnej vetvy 10.x Vetva test obsahuje rovnaké súbory, ako aj rovnakú históriu commitov.

Našu novo vytvorenú vetvu test si zobrazme príkazom git branch, ktorý nám vypíše:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch
* 10.x
  test
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Premenovanie vetvy

Ak chceme premenovať existujúcu vetvu, použijeme príkaz git branch -m <branch_name> <new_branch_name>. Premenujme vetvu test na feature príkazom git branch -m test feature:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch -m test feature
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

A opätovným spustením príkazu git branch si overme premenovanie vetvy:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch
* 10.x
  feature
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Zmazanie vetvy

Pokiaľ náš repositár obsahuje vetvy, ktoré už nepotrebujeme, môžeme ich zmazať príkazom git branch -d <branch_name>. Zmažme teda našu vetvu feature príkazom git branch -d feature, ktorý nám oznámi odstránenie vetvy:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch -d feature
Deleted branch feature (was 7fe97a16).
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Zmazanie vetvy si overme príkazom git branch, ktorý vráti nasledujúci výstup:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch
* 10.x
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Vetvy na vzdialenom repositári by sme odstránili príkazom git push origin --delete <branch_name>.

Prepínanie medzi vetvami

Pri práci na projekte môžeme mať rôzne vývojové vetvy. Príkaz git checkout <branch_name> nám umožňuje ľahko prepínať medzi týmito vetvami. Pri prepnutí na inú vetvu sa nám pracovný priestor automaticky aktualizuje na poslednú verziu danej vetvy.

Je dôležité mať na pamäti, že príkaz git checkout môže prepísať existujúce zmeny v pracovnom adresári. Pri použití tohto príkazu je potrebné starostlivo sledovať výstupy a vykonávať zálohy, aby sme minimalizovali riziko straty dát.

Vytvorenie novej vetvy

Rovnako ako pri príkaze git branch, môžeme nové vetvy zakladať aj príkazom git checkout. Pomocou príkazu git checkout -b <new_branch_name>, vytvoríme novú vetvu a Git nás automaticky prepne na túto vetvu.

Teraz vytvoríme novú vetvu s názvom prod príkazom git checkout -b prod:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git checkout -b prod
Switched to a new branch 'prod'

IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (prod)
$

Overme si založenie vetvy prod príkazom git branch, ktorý nám vypíše:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (prod)
$ git branch
  10.x
* prod
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (prod)
$

Prepínanie vetiev

Príkaz git checkout umožňuje vývojárom rýchlo prepínať medzi existujúcimi vetvami v repositári príkazom git checkout <branch_name>. Tým je možné ľahko pracovať na rôznych častiach projektu a integrovať nové zmeny do hlavnej vetvy.

Teraz sa prepneme späť do vetvy 10.x príkazom git checkout 10.x:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (prod)
$ git checkout 10.x
Switched to branch '10.x'
Your branch is behind 'origin/10.x' by 4 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Podľa toho, kedy sme naklonovali repositár, môžeme naraziť na nasledujúce varovania:

MINGW64:/c/mygit/laravel
Switched to branch '10.x'
Your branch is behind 'origin/10.x' by 4 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

Toto varovanie naznačuje, že naša lokálna vetva 10.x zaostáva za vzdialenou vetvou origin/10.x o 4 commity a môže byť rýchlo posunutá dopredu. A ďalej aby sme aktualizovali náš lokálny repositár príkazom git pull. Tento príkaz si vysvetlíme neskôr a teraz ho nepoužijeme.

Obnovenie súborov

Na obnovenie súborov do stavu z predchádzajúcich commitov alebo vetiev slúži príkaz git checkout <branch_name> -- <file_name>.

Prezeranie vetiev zo vzdialených úložísk

Pri práci s tímom je bežné používať vzdialené úložiská. Každé vzdialené úložisko môže obsahovať vlastné vetvy. Obsah týchto vetiev načítame príkazom git fetch --all.

Povedzme, že si chceme pozrieť vetvu 3.0. Po zadaní príkazu git checkout 3.0 sa nám vypíše nasledujúce potvrdenie:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git checkout 3.0
Switched to a new branch 3.0
branch 3.0 set up to track origin/3.0.

IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (3.0)
$

Tento výstup nám hovorí:

  • Switched to a new branch 3.0 - prešli sme na novú vetvu s názvom 3.0,
  • branch 3.0 set up to track origin/3.0 - naša lokálna vetva 3.0 sleduje vzdialenú vetvu origin/3.0.

Presvedčme sa o úspešnom stiahnutí vetvy 3.0 zo vzdialeného repositára príkazom git branch, ktorý nám zobrazí zoznam všetkých vetiev:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (3.0)
$ git branch
  10.x
* 3.0
  prod

IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (3.0)
$

Novšie verzie systému Git umožňujú prezerať vzdialené vetvy ako miestne vetvy príkazom git checkout <remote_repository_branch_name>. V starších verziách Gitu musíme vytvoriť novú vetvu založenú na vzdialenej vetve príkazom git checkout <new_branch_name> origin/<remote_repository_branch_name>.

V budúcej lekcii, Git - Zlučovanie vetiev, sa budeme zaoberať zlučovaním vetiev. Preberieme si typy zlúčenia fast-forward merge a 3-way merge, ktoré si vyskúšame na našom repozitári.


 

Predchádzajúci článok
Git - Skúmanie histórie - Dokončenie
Všetky články v sekcii
Git
Preskočiť článok
(neodporúčame)
Git - Zlučovanie vetiev
Článok pre vás napísal Patrik Valkovič
Avatar
Užívateľské hodnotenie:
1 hlasov
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity