Jak rozwiązywane są konflikty scalania w Git?
Opublikowany: 2021-09-16Jeś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!
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ć. 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. 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.Czy konflikty scalania w Git mogą być ignorowane?
Czy Git może automatycznie rozwiązywać konflikty scalania?
Jak rozwiązywane są konflikty scalania w Git?