MELD - diff and merge tool for macOS

MELD je softvér na porovnanie súborov, priečinkov a repozitárov. Pre užívateľov macOS je často používaný na riešenie konfliktov v prostredí Git. Existuje aj mnoho iných programov na riešenie konfliktov, ktoré sú spomenuté v kurze Projektové softvérové systémy (napr. kdiff3 pre Windows), no tieto sú najviac používané. Práve v tomto predmete sme používali spomenuté nástroje na spájanie dvoch rôznych verzii zmien alebo vetiev. Pripravili sme si pre Vás návod, ako treba nakonfigurovať MELD, aby sa automaticky spúšťal z terminálu, keď pracujeme s prostredím Git pri riešení konfliktov.


Stiahneme si aktuálnu verziu MELD aplikácie z nasledovnej stránky: https://github.com/yousseb/meld/releases

a nainštalujeme ho predvoleným spôsobom do priečinku Applications.


Keď už je MELD nainštalovaný, môžeme ho nakonfigurovať do prostredia Git. Znovu máme 2 možnosti.

Návod:

  1. V priečinku User (Vaše meno) si nájdeme skrytý súbor .gitconfig
    a jednoducho doň okopírujeme nasledovný text:
[diff]
  tool = meld
[difftool]
  prompt = false
[difftool "meld"]
  trustExitCode = true
  cmd = open -W -a Meld --args \"$LOCAL\" \"$PWD/$REMOTE\"
[merge]
  tool = meld
[mergetool]
  prompt = false
[mergetool "meld"]
  trustExitCode = true
  cmd = open -W -a Meld --args --auto-merge \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" --output=\"$PWD/$MERGED\"

2. Druhá možnosť je otvoriť si terminál a zadať príkaz

sudo nano ~/.gitconfig

ak máte nastavené užívateľské heslo, tak ho napíšete a spustí sa Vám editor. Ak ste si predtým nič cez Git globálne nenastavovali, bude prázdny a jednoducho doň okopírujte vyššie uvedenú konfiguráciu. Ak tam už niečo iné máte, prejdite do ďalšieho riadku a skopírujte text. Následne stlačíte [control]+[x], spýta sa Vás či chcete uložiť zmeny, stlačíte [y] (yes), znova stlačiť [control]+[x]. Hotovo!


Pri práci v tíme alebo aj keď pracujeme samostatne sa môže stať (a veru sa to stane často), že medzi jednotlivými verziami, ktoré chceme odoslať na vzdialený repozitár sa dostaneme do konfliktu. Tento konflikt je potrebné vyriešiť manuálne, teda sa rozhodnúť, ktorú verziu budeme chcieť používať pri ďalšej práci. Pripravili sme si pre Vás vzorový príklad s popisom.

Keď nastane konflikt, ktorý nie možné vyriešiť automaticky, je potrebné nasledovným príkazom zavolať nástroj na mergovanie.

git mergetool -t meld

alebo

git mergetool --tool=meld

V pracovnom priečinku sa automaticky vytvoria dočasné súbory potrebné na vyriešenie konfliktu a takisto sa automaticky spustí MELD. Dočasný súbor MyGarden.txt_LOCAL (vľavo) je ten z aktuálneho adresára. Teda súbor ktorý sme sa snažili odoslať na vzdialený repozitár ale kvôli konfliktu to nešlo. MyGarden.txt (v strede) je prázdny súbor, do ktorého spájame 2 rôzne verzie súboru. MyGarden.txt_REMOTE (vpravo) je verzia súboru zo vzdialeného repozitára.

Konflikt sa rieši veľmi jednoducho, ideme po riadkoch a vyberáme si verziu, s ktorou chceme ďalej pracovať. Klikáme na šípky buď z LOCAL alebo REMOTE súboru. Vidíme, že MELD zaznamenáva aj prázdne riadky (úplne dole) a tiež ich berie ako rozdiel vo verziách.

Keď sú všetky konflikty vyriešené, riadky svietia namodro.

Stačí stlačiť krížik a vyskočí nasledovné upozornenie, kde sa nás pýta, či chceme uložiť MyGarden.txt, zmeny v dočasných súboroch LOCAL a REMOTE neberie do úvahy, pretože sa automaticky vymažú.

V pracovnom priečinku ostane len MyGarden.txt a MyGarden.txt.orig, čo predstavuje zálohu pôvodného súboru. Ak sme s riešením konfliktu spokojní, môžeme zálohu vymazať a ďalej pracovať s novou verziou nášho súboru.

Ak sa vyskytne viacero konfliktov naraz, po vyriešení prvého, sa automaticky otvorí druhý konflikt, vyrieši sa, zavrie a otvorí sa ďalší, až kým nebudú všetky konflikty z pracovného adresára vyriešené.


Viac sa o riešení konfliktov dozviete na predmete Projektové softvérové systémy.