Uvod u rješavanje sukoba spajanja u GIT-u

Upravljanje doprinosima za rješavanje sukoba između više distribuiranih programera jedan je od glavnih zadataka sustava kontrole verzija. Da bismo riješili sukobe spajanja, prvo moramo razumjeti što je to točno. Nastaje tijekom spajanja različitih verzija istog koda i njime upravlja sustav kontrole verzija, uglavnom kada programer obriše datoteku dok je neki drugi programer još uvijek modificirao nju ili kada više ljudi pokušava promijeniti istu liniju u datoteci. U ovom ćemo članku saznati više o sukobima u spajanju Gita, onome što ga uzrokuje i kako se može riješiti.

Što je sukob spajanja u GIT-u?

Git je spajanje učinio vrlo jednostavnim jer automatski integrira nove promjene pomoću naredbe git spajanja. Ali u slučaju sukoba, samo je programer koji se spaja svjestan sukoba, dok ostali nisu svjesni. Dakle, ono što Git čini jest, zaustavlja proces spajanja i označava datoteku kao sukob. Tada programer pronalazi i rješava sukob. Sukobi tijekom spajanja mogu se dogoditi na dolje opisane načine:

  • Neuspjeh u pokretanju spajanja

U slučaju promjena u radnoj mapi trenutnog projekta, spajanje može uspjeti jer bi ih prepisivači mogli prebrisati tijekom spajanja. Ali može se stabilizirati pomoću različitih git naredbi poput git checkout / stash / resetiranje / počiniti.

  • Neuspjeh tijekom spajanja

Ako dođe do kvara tijekom spajanja, to znači da postoji sukob između grane koja se spaja i trenutne grane. Iako Git pokušava spojiti datoteke bez sukoba, ali ako to ne može učiniti, na vama je da je ručno riješite.

Kako stvoriti sukob spajanja datoteka?

Uzmimo primjer za prikaz / rješavanje sukoba spajanja u GIT-u pomoću sučelja Git naredbenog retka.

$ mkdir git-merge-test
$ cd git-merge-test
$ git init
$ echo "Mess with this content" > new_merged.txt
$ git add new_merged.txt
$ git commit -am"Committed the earlier content"
(master (root-commit) d58f73b) Committed the earlier content
1 file changed, 1 insertion(+)
create mode 200548 new_merged.txt

Pogledajmo red po red što se događa u gornjem isječku naredbi.

  • git-merge-test stvara novu mapu i inicijalizira novo Git spremište.
  • Zatim stvorite tekstualnu datoteku new_merged.txt s nečim napisanim na njoj.
  • Dodajte tek napravljeni tekst u repo i zatim ga obvezajte.

Sada imamo novo spremište s jednom glavnom ogrankom i datotekom new_merged.txt s nekim sadržajem. Zatim stvaramo još jednu granu koja će se sukobiti s spajanjem.

$ git checkout -b newbranch
$ echo "New content" > new_merged.txt
$ git commit -am"Same named file is edited to cause a conflict"
(newbranch 6282319) Same named file is edited to cause a conflict
1 file changed, 1 insertion(+), 1 deletion(-)

Da bismo vam to dodali, gornji retci:

  • stvara i provjerava novu granu pod nazivom nova brana.
  • prepisuje sadržaj nove datoteke_merged.txt.
  • i na kraju izvrši novostvoreni sadržaj.

S novom branchom nazvanom jedna grana, stvara se obveza koja prepisuje sadržaj u new_merged.txt

$ git checkout master
Switched to branch 'master'
$ echo "Append" >> new_merged.txt
$ git commit -am"Content appended new_merged.txt"
(master 24fbe3c) Content appended new_merged.txt
1 file changed, 1 insertion(+)

Gornji slijed naredbi ne samo da provjerava matičnu granu, dodaje sadržaj new_merged.txt, već ga i na kraju obavezuje. Sada naš primjer ima 2 nove obveze. Jedan je u matičnoj branši, a još jedan u novoj branši. Sada git spojite novu granu da vidite što se događa!

$ git merge newbranch
Auto-merging new_merged.txt
CONFLICT (content): Merge conflict in new_merged.txt
Automatic merge failed; fix conflicts and then commit the result.

Git nam pokazuje da se pojavio sukob.

Rješavanje sukoba spajanja u GIT-u

Uređivanje sukobljene datoteke jedan je od načina uklanjanja sukoba spajanja. Samo otvorite konfliktnu datoteku u uređivaču i uklonite razdjelnike sukoba jednu po jednu. Jednom uređenima možete dodati git add za dodavanje izmijenjenog sadržaja. Nova obveza može se stvoriti izvršenjem:

git commit -m "merged and resolved the conflict in "

Git osigurava rješavanje sukoba i na taj način stvara novo počinjeno spajanje kako bi ga se finaliziralo. Neke od Git naredbi koje pomažu u rješavanju sukoba spajanja jesu:

git log --merge

Spajanje –povezano prosljeđeno naredbom git log daje popis naredbi u sukobu između grana koje se spajaju.

git status

To pomaže u prepoznavanju sukobljenih datoteka.

git diff

Pomaže u pronalaženju razlika između stanja spremišta ili datoteke. Koristi se za predviđanje i sprečavanje sukoba spajanja. Neki alati poput onih datih u nastavku koriste se prilikom pokretanja neuspjeha spajanja.

git reset --mixed

Koristi se za poništavanje promjena u trenutnom imeniku.

git checkout

Koristi se za poništavanje promjena u datotekama ili češće za promjenu grana. Neki alati poput onih datih u nastavku koriste se kada sukobi nastaju tijekom spajanja.

git reset

Koristi se za resetiranje sukobljenih datoteka tijekom sukoba spajanja.

git merge --abort

Argument –abort s git spajanjem omogućava izlaz iz procesa spajanja i vraćanje grane u prvobitno stanje.

Prednosti rješavanja sukoba Git Merge

  • Koristi se za stvaranje, izmjenu, brisanje grana, datoteka ili spremišta bez sukoba.
  • Može se koristiti za spajanje različitih verzija koda.
  • Također pomaže u uvođenju promjena i odjavi udaljene grane uz istovremeno izbjegavanje sukoba.
  • Pomaže u upravljanju izdanjima i bez rješavanja sukoba.
  • Čuva da je spremište i postupak čist i čitljiv.

Zaključak

Git ima mnogo koristi i široko ga koriste programeri, menadžeri proizvoda i znanstvenici s podacima. Git naredbe vrlo su učinkovite i mogu biti vrlo korisne. Sukob u git-u nastaje kada dvije različite grane pokušaju urediti istu liniju u datoteci ili se datoteka izbriše u određenoj grani, ali uređuje u drugoj. Git uspješno ruši većinu spajanja sa značajkama spajanja, ali također se može riješiti ručno pomoću alata kao što su status gita, resetiranje gita, odjavljivanje gita i Git log.

Preporučeni članci

Ovo je vodič za rješavanje sukoba spajanja u GIT-u. Ovdje smo raspravljali o tome kako učinkovito riješiti Git Merge Conflicts pomoću različitih naredbi, zajedno s njegovim prednostima. Možete i proći naše druge predložene članke da biste saznali više -

  1. Git alternative s prednostima
  2. Uvod u Git alate
  3. GitHub vs SVN - najbolje razlike
  4. Top 11 pitanja o intervjuu GIT-u
  5. Git Push
  6. Verzije Tableaua
  7. Kompletni vodič za daljinsku naredbu Gita
  8. Tri faze životnog ciklusa Git s tijekom rada

Kategorija: