Rozwiązywanie konfliktów

W tym artykule chcę pokazać w jaki sposób rozwiązywać konflikty w plikach z repozytorium. Konflikty powstają, gdy kilku programistów pracuje nad projektem dopisując swój kod do plików już istniejących. Jest to zjawisko naturalne i łatwo to rozwiązywać. W jaki sposób? Zapraszam do lektury :)

Został utworzony plik o takiej treści:

 2011-03-04_110755.png

 Ten plik znajduje się u obu developerów w tym samym stanie i o tej samej zawartości, czyli tak jakbyśmy zaczynali pracę nad świeżym projektem.

W tym artykule mamy 2 developerów – niebieskiego i fioletowego (kolory okienek). Aktualnie pracujemy jako fioletowy developer. Dopisuje on kilka danych do tej funkcji.

 2011-03-04_1109201.png

Zmiany zaznaczone są kolorem czerwonym. Teraz wykonujemy commit.

2011-03-04_111014.png

Dopisujemy wiadomość / komentarz.

2011-03-04_111027.png

Po wykonaniu commitu wysyłamy plik na serwer (push).

 

2011-03-04_1114271.png

Klikamy OK

 

2011-03-04_111113.png

Success. Plik znalazł się w repozytorium. Fioletowy developer zakończył swoją pracę.

W tym czasie nad tym plikiem pracuje developer niebieski. Dopisał on kilka linijek.

2011-03-04_111332.png

Wykonuje commit w swoim lokalnym repozytorium. Bardzo fajnym ułatwieniem jest to, że w okienku pisania wiadomości / komentarza mamy podpowiadanie nazw plików.

 

2011-03-04_111406.png

Klikamy OK

2011-03-04_111418.png

Commit został wykonany. Teraz niebieski developer chce wykonać push na serwer.

 

2011-03-04_111427.png

Klikamy ok i pokazuje nam się okienko z błędem.

2011-03-04_111544.png

Dostajemy informację, że przed wysłaniem powinniśmy zsynchronizować swoje lokalne repozytorium. W takim razie zróbmy to.

2011-03-04_111705.png

W folderze klikamy Prawym Przyciskiem Myszy i wybieramy Git Sync…

2011-03-04_111736.png

 

Wybieramy przycisk Pull w celu pobrania repozytorium.

 

 

 

Jak widać system pokazuje nam konflikt w pliku o nazwie plik.txt . W takim razie, rozwiążmy go.

Aby rozwiązać konflikt klikamy Prawym Przyciskiem Myszy na pliku i z rozwijalnego menu wybieramy Edit conflicts.

 

2011-03-04_111852.png

Następnie pokazuje nam się okno do rozwiązywania konfliktów. Na pierwszy rzut oka wygląda to trochę skomplikowanie, jednak po kilku próbach można opanować sztukę rozwiązywania.

 

2011-03-04_111908.png

Ekran jest podzielony na 3 okienka:

1. Lewe górne – plik w repozytorium

2. Prawe górne – plik w lokalnym repozytorium

3. Dole – połączenie obu plików – ten plik powstanie po rozwiązaniu konfliktu.

 

2011-03-04_112117.png

W dolnym okienku wybieramy klikając Prawy Przycisk Myszy z której części mamy pobrać linijkę lub cały blok (na rysunku nie zostało to przedstawione). Kiedy plik jest gotowy, wybieramy z górnego panelu ikonkę zaznaczoną w czerwonym kwadracie.

 

2011-03-04_112140.png

Automatycznie pojawia nam się okienko do commita z informacją o połączeniu gałęzi i w jakich plikach nastąpiła zmiana.

W ten sposób doszliśmy do końca tego artykułu. W podsumowaniu zbiorę 3 pliki.

Fioletowy developer:

2011-03-04_1109201.png

 

Niebieski developer:

 

2011-03-04_1113321.png

Część wspólna obu developerów (rozwiązanie wg niebieskiego developera):

 

2011-03-04_112156.png