Jak sprytnie mergować sekwencje TestStanda w repozytorium gita?

systemywbudowane.pl 1 miesiąc temu
Zdjęcie: Jak sprytnie mergować sekwencje TestStanda w repozytorium gita?


Problem

Jeśli kiedykolwiek pracowałeś z TestStandem i gitem znany Ci jest prawdopodobnie podobny widok:

Format sekwencji TestStanda jest niezrozumiały dla domyślnych narzędzi diffowych. Niemożliwe jest więc podejrzenie z poziomu GUI typu SourceTree zmian w plikach sekwencji, nie mówiąc już o ich łatwym mergowaniu.

Jest to szczególnie problematyczne wtedy, gdy więcej niż jedna osoba pracuje na sekwencji testowej i potrzeba te zmiany potem scalić lub odrzucić.

Natywny Diff tool do TestStanda

Z pomocą przychodzi natywny program od National Instruments, który można znaleźć tutaj:

Może on pracować w dwóch trybach:

Diff – czyli porównanie dwóch wersji plików

lub merge, czyli scalenie zmian. Potrzebujemy tutaj wskazać aż cztery pliki: Base, File1, File2, Merged

Chcąc zmergować pliki musimy wiec wskazać manualnie poza dwoma plikami dodatkowo:

Base – czyli ostatni wspólny przodek, inaczej mówiąc ostatnia wspólna wersja, od której zaczynały się robić równoległe zmiany

Merged – czyli plik będący wynikiem scalenia – tu podajemy tylko nazwę, plik zostanie utworzony przez program.

Jeśli nie mamy odpowiednio skonfigurowanego repozytorium, korzystanie z powyższego narzędzia będzie wiązało się z ręcznym checkout-em poszczególnych commitów, a następnie kopiowanie plików do osobnej lokalizacji i manualnego wskazywania ścieżek w powyższym oknie. Potem manualne kopiowanie plików merged do odpowiednich ścieżek… okropność. A jak jeszcze mamy do scalenia kilka plików, robi się z tego dramat.

Co robić, jak żyć?

Skonfiguruj sobie odpowiednio swojego klienta do repozytorium.

SourceTree

Konfiguracja

Przejdź do ustawień: Tools -> Options

W zakładce Diff przechodzimy do sekcji External Diff / Merge:

W Diff command oraz w Merge Command wpisujemy po prostu ścieżkę do FileDifferLauncher.exe z naszego dysku.

Zwróć uwagę na to, by w poleceniu nie znalazł się “cudzysłów”, choćby jeżeli w ścieżce występuje spacja.

W Arguments do Diff wpisujemy:

\"$LOCAL\" \"$REMOTE\"

W Arguments do Merge wpisujemy:

\"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"

na koniec trzeba skasować folder z krzakami w nazwie, w AppData -> Local i uruchomić ponownie program.

(dzięki wielkie, SourceTree)

Korzystanie

Diff

Aby podejrzeć zmiany, nad polem podglądu klikamy w External Diff:

po (dłuższej) chwili otwiera się nasz Diff Tool

Merge

Jeśli chodzi o merge – w oknie commitu, klikamy na plik, z widocznym konfliktem i wybieramy

znów, po dłuższej chwili w tle otworzy się nasze narzędzie, a w SourceTree pokaże się takie okno:

Gdy w naszym Diff Toolu zapiszemy zmergowaną wersję i zamkniemy program, komunikat w SourceTree zniknie, a zmergowany plik będzie gotowy do commitu.

Tortoise

Co jeżeli używasz klasycznego żółwia?

Konfiguracja

Zaczynamy od wejścia w żółwiowe ustawienia, klikamy na Advanced:

Dodajemy następującą linijkę dla rozszerzenia .seq:

podobnie dla mergowania, przycisk Advanced i linijka:

Korzystanie

Diff

Możemy podejrzeć sobie na przykład ostatnie zmiany w pliku. Po prawo-kliku na konkretnym pliku wybieramy opcję:

Merge

Tu też jest sytuacja prosta – przy merge’u pojawia się konflikt. W oknie Resolve klikamy dwukrotnie na nazwę pliku – otworzy to nasze narzędzie do merge’u. Następnie save i zamknięcie programu.

A Ty jakie miałeś przygody związane z mergowaniem projektowego repozytorium?

Daj znać w komentarzu!

Idź do oryginalnego materiału