Git mergetool

4

Niedawno napotkałem w Gicie dziwny problem… tak naprawdę jeden z dwóch poważnych, które utrzymywały się przez długi czas (drugi to line-endings które do dziś potrafią mnie w zad uszczypnąć). Mianowicie mój kochany, uwielbiany Git pokazywał mi podczas merge konflikty w każdym jednym pliku, niezależnie od tego czy coś było w nim faktycznie zmieniane czy też nie. Po otwarciu mergetool okazywało się, że nawet jeśli jakieś zmiany nastąpiły to powinny być teoretycznie automatycznie połączone bez najmniejszego problemu.

Rebase dwóch gałęzi “rozjechanych” o miesiąc trwałby w ten sposób dobre parę dni, więc zakasałem rękawy i postanowiłem okoliczności te rozwiązać systemowo – czyli dojść do źródła tej sytuacji i je wyeliminować.

Okazało się – co mnie trochę zdziwiło – że sytuacja ta była efektem niepoprawnej konfiguracji “mergetool” w konfiguracji Gita. Do dziś moim ulubionym narzędziem do diff/merge jest to małe fajne ustrojstwo z pakietu Tortoise i miałem je zdefiniowane tak:

[merge]tool = tortoise

[mergetool “tortoise”]cmd = “TortoiseGitMerge.exe” -base:”$LOCAL” -mine:”$REMOTE”

Spróbowałem też czegoś takiego, ale bez specjalnie zadowalających efektów:

[merge]tool = tortoise

[mergetool “tortoise”]cmd = “TortoiseGitMerge.exe” -base:”$BASE” -theirs:”$REMOTE” -mine:”$LOCAL” -merged:”$MERGED”

Szczególnie ta druga opcja powinna niby działać prawidłowo, ale… Finalnie doszedłem do tego, że najlepiej jest w ogóle przy przekazywanych parametrach nie mieszać, bo Git sam wie co dla niego dobre (mogłem się tego w sumie domyślić wcześniej). Aktualna konfiguracja TortoiseMerge jako mergetool dla Gita wygląda tak i jest okej:

[merge]tool = tortoisemerge

[mergetool “tortoisemerge”]path = tortoisegitmerge.exe

(oczywiście zakładam, że katalog z binarkami pakietu Tortoise jest dodany do PATH).

Nawet jak nikomu się ten tip nie przyda to czuję, że sam tutaj do niego za jakiś czas wrócę.

Share.

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET i współorganizator konferencji Programistok. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook, YouTube.

4 Comments

  1. Pingback: dotnetomaniak.pl

  2. Ogólnie przed własnoręczną konfiguracją mergetool warto najpierw odwiedzić %PROGRAMFILES%\Git\libexec\git-core\mergetools. „Przyjedź do nas, Twój mergetool jest już tutaj od dawna”.