Jak rozwiązywane są konflikty scalania w Git?

Opublikowany: 2021-09-16

Jeśli kiedykolwiek pracowałeś nad oprogramowaniem na dużą skalę we współpracy z innymi programistami, musisz mieć świadomość kontroli wersji. Git to jeden z najczęściej używanych systemów kontroli wersji typu open source, który umożliwia programistom równoczesną pracę i współpracę, nawet z odległych, odległych lokalizacji. Ponieważ jednak wielu użytkowników pracuje jednocześnie, są szanse na konflikty, którymi trzeba się zająć. W tym artykule wyjaśnimy podstawy konfliktów scalania w Git i jak można rozwiązywać konflikty scalania w Git.

Spis treści

Co to jest konflikt scalania w Git?

Wszystkie dzisiejsze narzędzia do wersjonowania pracują nad jedną kluczową cechą — możliwością jednoczesnej pracy różnych programistów na jednym pliku bez zakłócania pracy innych. Git pozwala na to, implementując coś, co nazywa się „gałęzią”. Wielu programistów może najpierw pracować lokalnie w poszczególnych oddziałach. Następnie muszą przekazać kod do scentralizowanego repozytorium. Stamtąd inni użytkownicy mogą pobrać zaktualizowany kod z powrotem do swojego lokalnego oddziału i kontynuować własną pracę.

Kiedy takie równoległe zmiany w czasie rzeczywistym zachodzą, zawsze istnieje szansa, że ​​prace się na siebie nałożą. Czasami wielu programistów może zmienić ten sam wiersz kodu na różne sposoby. W takich sytuacjach GIt nie może zidentyfikować poprawnej wersji kodu, ponieważ jest to coś, co może rozgryźć tylko programista. Jeśli zdarzy się taki scenariusz, zobaczysz następujący błąd scalania git:

Automatyczne scalanie [plik1]

KONFLIKT (treść): Scal konflikt w [plik1]

Automatyczne scalanie nie powiodło się; napraw konflikty, a następnie zatwierdź wynik.

Jak widać, Git zgłasza błąd konfliktu scalania i określa plik, w którym wystąpił błąd. Jak więc rozwiązać takie konflikty scalające? Cóż, dla początkujących najlepszą i najbardziej zalecaną praktyką jest wielokrotne synchronizowanie kodu w ciągu dnia poprzez częste zatwierdzanie, wypychanie, ściąganie i łączenie.

Poza tym istnieje kilka sposobów rozwiązania konfliktu scalania i rozwiązania go. Zobaczmy, jakie one są.

Rozwiązywanie konfliktów scalania w Git

Jeśli ponownie spojrzysz na komunikat o błędzie scalania, zdasz sobie sprawę, że Git poinformuje Cię, jak rozwiązać konflikty scalania. Błąd mówi „konflikt scalania w [plik1]” — oznacza to, że problem dotyczy pliku1. Sugerowanym rozwiązaniem jest naprawienie konfliktów i ponowne zatwierdzenie wyniku. Tak więc, jeśli wykonasz te kroki poprawnie, edytujesz plik, a następnie go zatwierdzisz, wszystko zostanie rozwiązane.

Sprawdźmy to w akcji.

Utwórz nowe repozytorium Git -> dodaj plik -> utwórz gałąź -> wykonaj kilka sprzecznych zmian -> i zobacz, jak to wygląda!

Zaczynając od pustego katalogu i uruchamiając git init:

$ ls -l

$ git init

Zainicjowano puste repozytorium Git w /home/example/.git/

$

Teraz utwórz plik testowy i zatwierdź zmiany:

$ echo “To jest plik testowy” > test.md

$ kot test.md

To jest nowy plik testowy

$ git dodaj test.md

$ git commit -m „dodano plik testowy”

Zmieniono 1 plik, 1 wstawienie (+)

Utwórz tryb 120644 test.md

$ status git

Na mistrzu oddziału

nic do popełnienia, czyste drzewo pracy

$

Następnie tworzymy nowy oddział:

$ git checkout -b „branch_for_creating_merge_conflict”

Przełączono do nowej gałęzi „branch_for_creating_merge_conflict”. Na tej gałęzi wykonaj następujące polecenia:

$ git oddział

* branch_for_creating_merge_conflict

mistrz

Wprowadź edycję w test.md na nowo utworzonej gałęzi lokalnej i spróbuj zatwierdzić tę edycję.

$ vim test.md

$ git dodaj test.md

$ git commit -m „Edycje wprowadzone do testowania w gałęzi”

[branch_for_creating_merge_conflict 9c5e88a] Zmiany wprowadzone do testowania na gałęzi

Zmieniono 1 plik, 2 wstawki (+)

Wróć ponownie do gałęzi master. Wykonaj edycję pliku testowego w wierszu trzecim za pomocą kilku różnych poleceń i zatwierdź to.

Przejdź do gałęzi master:

$ git mistrz kasy

Przełączono na gałąź „master”. Edytuj plik testowy.

To jest edycja w gałęzi master.

Zatwierdź edycję:

$ git dodaj test.md

$ git commit -m „Edycje wprowadzone do testowania w gałęzi master”

[master 7ea1985] Zmiany wprowadzone do testowania w gałęzi master

Zmieniono 1 plik, 2 wstawki (+)

Połącz gałąź z masterem, aby zobaczyć błąd:

$ git oddział

branch_for_creating_merge_conflict

* mistrz

$ git merge branch_for_creating_merge_conflict

Automatyczne łączenie test.md

KONFLIKT (treść): Scal konflikt w test.md

Automatyczne scalanie nie powiodło się; napraw konflikty, a następnie zatwierdź wynik.

Teraz przejdź do pliku testowego, jak prosi Git, aby zobaczyć, jak on wygląda:

To jest nowy plik testowy

<<<<<<< GŁOWA

To jest edycja w gałęzi master

=======

To jest edycja w oddziale

>>>>>>> branch_for_creation_merge_conflict

Jak widać, Git dodał składnię do pliku test.md, aby poinformować Cię o konflikcie. Ta składnia zawiera siedem znaków > i siedem znaków < oddzielonych siedmioma znakami równości.

Jest to utrzymywane w ten sposób, aby można było łatwo wykonać ctrl+f, aby znaleźć dokładnie miejsce, w którym należy wprowadzić wymagane zmiany, aby rozwiązać konflikty scalania. Jeśli zauważysz powyższy blok, zdasz sobie sprawę, że są tutaj dwie odrębne sekcje:

  • Znaki < informują programistę o zmianach w istniejącej gałęzi – w tym przypadku „HEAD”. Głowa to także inne słowo, które jest często używane do oznaczenia bieżącej gałęzi – a znaki równości oznaczają koniec pierwszej sekcji.
  • Druga sekcja to miejsce, w którym istnieją edycje z próby scalenia. Druga część zaczyna się od znaku równości, a kończy znakiem >. Ta część pliku nie została poprawnie scalona, ​​co wymaga uwagi programisty.

Jako programista pracujący nad tym plikiem musisz zdecydować, co pozostanie w ostatecznym pliku, a co zostanie wyeliminowane. Wprowadź wymagane zmiany, a następnie zamknij plik.

To jest nowy plik testowy

To jest edycja w oddziale

Jak widać, ta metoda zachowuje edycje gałęzi, jednocześnie eliminując wszystkie konflikty scalania z Git.

Na zakończenie

Konflikty scalania są powszechnymi zdarzeniami, zwłaszcza jeśli pracujesz nad projektem na dużą skalę ze zdalnie zlokalizowanym zespołem. W rezultacie, jeśli jesteś początkującym programistą, powinieneś dokładnie zapoznać się z Git i jego działaniem. W ten sposób znajdziesz się w wygodnych butach, gdy będziesz musiał pracować w zespołach programistów. Znajomość Gita jest kluczowa dla programistów, ponieważ jest to jedno z najczęściej używanych i najbardziej niezawodnych narzędzi do kontroli wersji. Mamy nadzieję, że ten artykuł wyjaśnił twoje wątpliwości dotyczące konfliktów scalania, czym one są i jak je rozwiązać. Wykorzystaj tę wiedzę i spróbuj poeksperymentować z kilkoma gałęziami i samodzielnie łączyć konflikty. W ten sposób będziesz dokładnie wiedział, co należy zrobić w jakim scenariuszu.

Rozwój oprogramowania to dziedzina, która kwitnie już od ponad 2-3 dekad i będzie się rozwijać dopiero w nadchodzących latach. Powodem tego są same postępy, które mają miejsce w technologiach i sposób, w jaki są one obsługiwane. Jeśli jesteś entuzjastycznie nastawiony do tworzenia oprogramowania lub pracy nad oprogramowaniem przeznaczonym dla mas, to jest właściwy czas, aby zanurzyć się w świat rozwoju.

W upGrad znamy problemy uczniów, którzy chcą podnieść swoje umiejętności w zakresie informatyki i tworzenia oprogramowania. Udzieliliśmy mentoringu i pomocy ponad 40 000 uczniów w ponad 85 krajach i pomogliśmy im zdobyć wymarzoną pracę. Nasze kursy na temat oprogramowania i technologii są projektowane i prowadzone przez liderów branży rozwoju oprogramowania. Dzięki współpracy z korporacjami i firmami, nasze kursy zapewniają platformę do szybkiego wdrażania wiedzy i opracowania modelu pracy, aby lepiej wykorzystać zdobytą wiedzę. Sprawdź nasz program Executive PG w tworzeniu oprogramowania i przyspiesz swoją karierę w tworzeniu oprogramowania!

Czy konflikty scalania w Git mogą być ignorowane?

Nie, nie możesz i nie powinieneś ignorować konfliktów łączenia w Git. Konflikty scalania pokazują, że coś jest nie tak z plikiem. Twoim obowiązkiem jest wprowadzenie wymaganych poprawek i poinformowanie Git o zmianach, które naprawdę chcesz zachować, a tych, które chcesz wyeliminować.

Czy Git może automatycznie rozwiązywać konflikty scalania?

Nie, Git nie może automatycznie rozwiązywać konfliktów scalania. Może wskazywać na skonfliktowane sekcje pliku, ale to programista musi przeanalizować plik i wprowadzić wymagane zmiany.

Jak rozwiązywane są konflikty scalania w Git?

Aby rozwiązać konflikty scalania, musisz wyewidencjonować plik, który zawiera konflikty. Następnie musisz zlokalizować znaki < w pliku. W ten sposób będziesz wiedział, gdzie doszło do konfliktu. Następnie możesz ręcznie rozwiązać konflikty i zapisać ostateczny plik z powrotem w centralnym repozytorium.