Tortoise SVN – interaktywny commit

Z jednej z prezentacji nt. GIT-a dowiedziałem się, że posiada on coś co nazywa się Interactive staging. Pomyślałem, że czegoś takiego brakuje mi w codziennej pracy z duetem SVN/Tortoise SVN. Jak się jednak okazało i w Tortoise SVN od ostatniej wersji jest odpowiadająca temu funkcjonalność.

Zacznę od wyjaśnienia, co to jest Interactive staging i do czego jest przydatny. Gdy rozpoczynamy pracę nad poprawą błędu, otwieramy jakiś plik, a tam warningi, wężyki (podkreślenia, VS nazywa je squiggles), a na prawym marginesie roi się od komunikatów Resharpera wypadałoby coś z tym zrobić przy okazji robienia samej poprawki. Stosując się do zasady Boy Scout Rule powinniśmy zostawić “obozowisko” w stanie lepszym niż je zastaliśmy. Jednak wtedy przy commitcie czasem okazuje się, że więcej zmian wynika z samego sprzątania, niż z poprawki błędu. Gdy za jakiś czas ktoś będzie chciał sprawdzić co zostało zmienione w ramach poprawki i spojrzy na diff-a zobaczy mnóstwo zmian i ciężko będzie mu znaleźć samą poprawkę. Spróbujcie zlokalizować ją w poniższym diffie.

diff_bez_rozbicia_na_poprawke_i_czyszczenie_kodu

W takich sytuacjach przydaje się możliwość podzielenia zmian (poprawki, sprzątanie) na więcej niż jeden commit.

W Tortoise SVN ta możliwość ukrywa się pod nazwą “Restore after commit”. Gdy jesteśmy gotowi do wrzucenia modyfikacji do repozytorium klikamy prawym przyciskiem myszy na pliku, który chcemy commitować w N częściach i wybieramy pozycję “Restore after commit”.

restore_after_commit

Ikona przy pliku zmieni się na taką samą jak w menu kontekstowym. Następnie klikamy dwukrotnie plik, aby otworzyło się narzędzie prezentujące różnice w pliku w postaci graficznej. Tutaj wybieramy zmiany, które chcemy oddać, lub inaczej, wycofujemy te, których nie chcemy oddać w następnym commit-cie i zapisujemy plik (gdy o tym zapomnimy wszystko poleci do repozytorium za jednym razem!)

wybor_zmian_do_commita

Po pozostawieniu tylko poprawki diff prezentuje się jak poniżej – commitujemy.

diff_po_wybraniu_tylko_poprawki_do_pierwszego_commita

Teraz pozostaje nam oddać resztę zmian w pliku. Inaczej niż zwykle, gdy sprawdzimy status przed chwilą wysłanego do repozytorium pliku okazuje się, że nadal jest zmodyfikowany – TortoiseSVN odtworzył stan sprzed wyboru zmian do pierwszego commita, ale uwzględniając, że część zmian trafiła już do repozytorium. Robimy drugiego commita.

drugi_commit_Boy_Scout_Rule

Czerwonym obwódką zaznaczyłem, że nie zmienia się już nic w zakresie poprawki. Po wszystkim historia pliku wygląda tak – moim zdaniem lepiej.

historia_pliku_po_dwoch_commitach

A jak to zrobić w GIT? – 7.2 Git Tools – Interactive Staging.

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Google

Komentujesz korzystając z konta Google. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s