3-way merge tool Git-hez – P4Merge

By | 2013. január 14.

Aki már dolgozott verziókövető rendszerekkel, tudja, hogy amikor kódot írunk, ráadásul nem egyedül, hanem csapatban fejlesztünk, óhatatlan, hogy egy másik fejlesztő belenyúl egy olyan file-ba, amit mi írtunk és fordítva, netán párhuzamosan dolgozunk rajta. Ebből adódóan az illetőnél is és nálam is két különböző verzió létezik. És ekkor még csak két emberről beszéltünk. Amikor ezeket a különböző verziókat kell egybe varázsolni, na ezt hívják merge-ölésnek. Abban az esetben, ha ritkán töltjük le a lokális gépünkre az éppen aktuális állapotot a project-ből, akkor sokkal nagyobb az esély sok conflict-ot kell megoldanunk (amikor különböző verziókból kell kitalálni, hogy mi kell a közös, végleges verzióba). Ezért ajánlatos sűrűn „git pull„-ozni. Az alap merge eszköz nem egy nagy durranás a Git-ben. Persze használható, de csak két utas és nem annyira felhasználóbarát.

2-way vs. 3-way

De mi a különbség a két-, illetve a három utas összefésülő eszköz között? Nagyon egyszerű a válasz. A két utasnál csak azt látjuk, hogy mi van abban a verzióban, ami nálunk a lokális gépünkön (Local) található és mi van a szerveren található (Remote) változatban. A 3-way verziónál kapunk egy kis extrát. A program azt is megmutatja az előbbi kettőn kívül, hogy mi volt az eredeti verzió (Base, Original), ami a Local és a Remote előtt volt. Ez által kapunk egy remek támpontot, hogy mire is lesz szükségünk a két másik változatból.

Letöltés

Az általam eddig legjobban használható és talán legkönnyebben integrálható, valamint nem utolsó sorban platformfüggetlen merge tool, a Perforce által kínált ingyenes P4Merge. Figyelem! Csak a merge tool ingyenes! Minden egyéb más szoftver a csomagban fizetős, de nekünk arra szerencsére nem lesz szükségünk.

Töltsük le a program megfelelő változatát a következő oldalról:

http://www.perforce.com/downloads/complete_list

Számomra egy 32 bites Windows-os verzióra lesz szükség és egy Mac-es 64 bites változatra a P4Merge: Visual Merge Tool -ból.

Telepítés

Miután letöltöttük, telepítsük és állítsuk is be.

Windows

Alapvetően teljesen egyszerű, next-next-finish ez is. Csak egy lépés van, ahol be kell állítani, hogy mely komponenseket szeretnénk telepíteni.

Amikor kész a telepítés, indítsuk el a Git Bash-t és adjuk ki a következő parancsokat (Az útvonal változhat, attól függően, hogy hova telepítettük):

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge
git config --global difftool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global diff.tool p4merge

Kész is.

OSX

Megnyitjuk a dmg file-t, majd a megjelenő ablakból a p4merge.app -ot telepítjük (belehúzzuk az Applications mappába).

Hozzunk létre a felhasználói fiókunkba egy .gitconfig nevű file-t, ha még nem létezne, de nagy valószínűséggel már ott van, hiszen a korábbi Git config parancsokat ebben tárolja. Másoljuk bele ezt:

[merge]
keepBackup = false
tool = p4merge

[mergetool "p4merge"]
cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
keepTemporaries = false
trustExitCode = false
keepBackup = false

Készen is vagyunk!

Használat

A Git Bash-ben vagy OSX-en a terminálban merge konflict esetén kiadjuk a következő parancsot:

git mergetool

És már indul is!

Hasonló cikkek

Windows 10 és a Synology megosztott mappák esete Korábban már írtam arról, hogy a Windows 10 mennyire ellene van az SMB 1.0-nak egy ideje. Ez azóta csak jobban szigorodott. Valamikor az év elején kia...
Git repository költöztetés Néha előfordul olyan eset, hogy egy komplett repot át kell költöztetni egy másik Git szerverre. Ilyenkor jön a fejvakarás, hogy nehogy elszúrjunk vala...
Git kliens konfigurálása Mac-en és Windows-on Az előző post-ban a Git szerver telepítésének menetét mutattam be, valamint létrehoztunk egy test nevű repo-t. Most azt nézzük meg, hogy hogyan tudjuk...
NodeJs NPM – A nyakkendős modulraktáros A előző NodeJs postban a modulokat taglaltam. Most nézzük meg, hogy mi van, ha nem mi írunk magunknak, hanem már előre elkészített modul-csomagokat sz...