Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

12. diel - Git - Kolízia medzi konármi

V predchádzajúcom kvíze, Kvíz - Skúmanie histórie, správa a zlučovanie vetiev v Gitu, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.

V dnešnom Git tutoriále sa budeme zaoberať kolíziami pri zlučovaní vetiev. Vysvetlíme si, kedy kolízie vznikajú. Na praktických príkladoch sa naučíme, ako rôzne typy kolízií najlepšie vyriešiť.

Všetky príkazy budeme vykonávať v našom naklonovanom repositári Laravel z lekcie Git – Základy – Dokončenie. Otvoríme príkazový riadok a pomocou príkazu cd laravel sa do repositára presunieme.

Kolízie medzi konármi

Kolízie vznikajú pri zlučovaní dvoch vetiev. Kolízia nastane, keď sa dve vetvy pokúša upraviť rovnakú časť kódu alebo súbor súčasne a Git nedokáže rozhodnúť, ktorú verziu použiť.

Kolízie môžu vzniknúť z nasledujúcich dôvodov:

  • úpravy rovnakého riadku kódu,
  • zmazanie alebo premenovanie súborov,
  • zmeny v rôznych častiach rovnakého súboru.
Ak dôjde ku kolízii, Git označí súbory, v ktorých sa konflikt vyskytol. Súbory sú označené ako nevyriešené zmeny alebo unmerged paths. V takom prípade je na vývojári vyriešiť konflikt a určiť, ktoré zmeny majú byť zachované. Riešenie kolízií je dôležitou súčasťou správy verzií v Gitu a nevyhnutné pre koordináciu vývoja projektu v tíme.

Keď narazíme na kolíziu pri zlučovaní, spustením príkazu git status by sme si zobrazili výpis súborov, ktoré ho spôsobili. Napríklad, ak by obe naše vetvy upravili rovnakú časť súboru README.md, zobrazila by sa táto varovná správa:

Typy kolízií

Konflikty môžu nastať v dvoch prípadoch: Na začiatku procesu zlúčenia alebo počas neho.

Zlyhanie zlúčenia pri spustení

Tento typ kolízie nastáva v prípade, keď prebiehajúce zmeny v pracovnom adresári, alebo v pracovnej oblasti projektu, by boli prepísané commity, ktoré sa práve zlučujú. Tento problém vzniká kvôli existujúcim lokálnym zmenám. Na odstránenie tejto situácie a prevzatie kontroly nad miestnym stavom slúžia príkazy git checkout, git commit a git reset.

Pri zlyhaní zlúčenia pri spustení sa zobrazí nasledujúca správa:

Zlyhanie počas zlučovania

Kolízia typu zlyhania počas zlučovania hovorí, že došlo ku konfliktu medzi aktuálnou cieľovou vetvou a zlučovanou vetvou. Pri tomto type kolízie sa zobrazí nasledujúca správa:

Identifikácia konfliktov pri zlučovaní vetiev

Na nasledujúcom príklade si ukážeme, ako taká kolízia môže vzniknúť. Naučíme sa namiesto kolízie identifikovať a opraviť.

Príklad

Začneme tým, že sa prepneme do vetvy feature príkazom:

Vetva feature sme zakladali v lekcii Git - Zlučovanie vetiev. Pokiaľ ju nemáte, založte si ju príkazom git checkout -b feature.

Teraz vykonáme editáciu súboru README.md a vytvoríme commit:

Nasledovne sa prepneme na vetvu 10.x, vykonáme editáciu súboru README.md a vytvoríme commit:

V poslednom kroku zlúčime vetvy feature s vetvou 10.x:

Hlásenie o kolízii

Po spustení príkazu git merge nastane kolízia a vypíše sa nám nasledujúca správa:

Správa nám označuje, že došlo ku kolízii v súbore README.md a automatické zlúčenie zlyhalo. Teraz sa pozrieme na nezlúčené vetvy. Spustite príkaz git status, aby sme získali nasledujúci výpis o stave repositára:

Výpis nám hovorí:

  • On branch 10.x: Nachádzame sa na vetve 10.x
  • Your branch is ahead of 'origin/10.x' by 5 commits.: Lokálna vetva má o 5 commitov viac, než vzdialená vetva origin/10.x.
  • You have unmerged paths.: Existujú súbory, ktoré nemožno automaticky zlúčiť. Je potrebné ručne vyriešiť konflikty v týchto súboroch.
  • Unmerged paths:: Existujú súbory so zmenami, ktoré je potrebné ručne zlúčiť.
  • both modified: README.md: Súbor README.md bol upravený oboma vetvami a spôsobil kolíziu.
Vidíme, že súbor README.md spôsobil kolíziu. Keďže cieľová a zlučovaná vetva obsahuje zmeny, Git nevie akú verziu súboru použiť, a preto vyvolal kolíziu.
Nájdenie miesta kolízie

Miesto, kde došlo ku kolízii si popíšeme. Otvoríme súbor README.md príkazom cat alebo type:

Miesto, kde došlo ku kolízii pri zlúčení je označené týmito vizuálnymi znakmi:

Značky ======= označujú stred kolízie. Obsah medzi týmito značkami a riadkom HEAD predstavuje obsah existujúci v aktuálnej cieľovej vetve, na ktorý odkazuje ukazovateľ HEAD.

Riešenie kolízie

Pokiaľ sa stretneme s kolíziou, je dôležité ju správne vyriešiť. Najbežnejším postupom je upraviť súbor, v ktorom došlo ku kolízii a určiť, ktoré zmeny majú byť zachované.

V našom prípade sa bude jednať o súbor README.md. Otvoríme ho v editore a nájdeme nasledujúce konfliktné značky:

Pre vyriešenie kolízie je nutné odstrániť konfliktné značky a upraviť obsah tak, aby zodpovedal požadovanému výsledku zlúčenia. Súbor README.md upravíme tak, aby boli prítomné úpravy z oboch vetiev. Koniec súboru README.md bude vyzerať nasledovne:

Upravený súbor uložíme a vykonáme commit pre uloženie vykonaných zmien:

Po vytvorení commitu je kolízia úspešne vyriešená a zmeny sú zaznamenané v repositári. Zlúčenie vetiev sa automaticky dokončí po vytvorení commitu.

V nasledujúcom kvíze, Kvíz - Git, si vyskúšame nadobudnuté skúsenosti z kurzu.


 

Predchádzajúci článok
Kvíz - Skúmanie histórie, správa a zlučovanie vetiev v Gitu
Všetky články v sekcii
Git
Preskočiť článok
(neodporúčame)
Kvíz - Git
Článok pre vás napísal Filip Studený
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
.
Aktivity