Sissejuhatus GIT-i liitmiskonflikti lahendamisse

Versioonikontrollisüsteemide üks peamisi töökohti on mitme levitatud arendaja vaheliste konfliktide lahendamiseks tehtavate panuste haldamine. Liitmiskonfliktide lahendamiseks peame kõigepealt mõistma, mis see täpselt on. See tekib sama koodi erinevate versioonide liitmisel ja seda haldab versioonikontrollisüsteem, enamasti siis, kui arendaja kustutab faili, samal ajal kui mõni teine ​​arendaja seda alles modifitseeris, või kui mitu inimest proovivad failis sama rida muuta. Selles artiklis tutvume lähemalt Giti liitmiskonfliktidega, nende põhjustega ja kuidas seda lahendada.

Mis on GIT-i ühendamiskonflikt?

Git on liitmise teinud väga lihtsaks, kuna see integreerib uued muudatused automaatselt, kasutades käsku git merge. Kuid konfliktide korral on konfliktist teadlik ainult ühinev arendaja, teised aga mitte. Mida Git teeb, see peatab liitmisprotsessi ja märgib, et failil on konflikte. Seejärel leiab arendaja konflikti ja lahendab selle. Konfliktid ühendamise ajal võivad tekkida allpool kirjeldatud viisil:

  • Ühendamise ebaõnnestumine

Käimasoleva projekti töökataloogi ootel muudatuste korral võib liitmine ebaõnnestuda, kuna komisjon võib need ühendamise ajal üle kirjutada. Kuid seda saab stabiliseerida mitmesuguste git-käskude abil, näiteks git checkout / stash / reset / sitout.

  • Rike ühendamise ajal

Kui ühendamisel ilmneb tõrge, näitab see, et ühendatava haru ja praeguse haru vahel on vastuolu. Git proovib küll faile ilma konfliktideta liita, kuid kui seda ei õnnestu, jätab selle käsitsi lahendamine teie otsustada.

Kuidas luua failide liitmise konflikti?

Võtame näite GIT-i liitmiskonflikti kuvamiseks / lahendamiseks, kasutades käsurida Git-liidest.

$ 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

Vaatame ridade kaupa, mis ülaltoodud käskude lõigus toimub.

  • git-merge-test loob uue kataloogi ja initsialiseerib uue Giti hoidla.
  • Järgmisena looge tekstifail nimega new_merged.txt, millele on kirjutatud midagi.
  • Lisage äsja tehtud tekst reposse ja kinnitage see.

Nüüd on meil üks hoidla koos ühe haruga ja fail new_merged.txt, milles on mõnda sisu. Seejärel loome uue haru, mis on ühinemisega vastuolus.

$ 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(-)

Selle jaotamiseks teile ülaltoodud read:

  • loob ja kontrollib uusharu nimega newbranch.
  • kirjutab faili new_merged.txt sisu üle.
  • ja võtab vastloodud sisu lõplikult kasutusele.

Uue haruga, mille nimi on üks haru, luuakse kohustus, mis kirjutab uue_merged.txt sisu üle

$ 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(+)

Ülaltoodud käskude jada mitte ainult ei kontrolli peamist haru, lisab sisu saidile new_merged.txt, vaid ka seob selle lõpuks. Nüüd on meie näitel 2 uut kohustust. Üks asub peaharu ja veel üks on uustulnuk. Nüüd ühendage uus haru, et näha, mis juhtub!

$ 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 näitab meile, et konflikt on ilmnenud.

Ühendamise konfliktide lahendamine GIT-is

Vastuolulise faili redigeerimine on üks viis ühendamiskonflikti eemaldamiseks. Lihtsalt avage redaktoris vaidlustatud fail ja eemaldage konfliktijagurid ükshaaval. Pärast redigeerimist saate muudetud sisu lisamiseks kasutada rakendust git add. Uue kohustuse saab luua, täites järgmist:

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

Git tagab konflikti lahendamise ja loob seeläbi uue pühendunud ühinemise, et see lõpuni viia. Git-käsud, mis aitavad lahendada liitmiskonflikte, on järgmised:

git log --merge

Git logi käsuga merge –abort luuakse nimekiri ühendatavate harude vahel vastuolulistest kompromissidest.

git status

See aitab tuvastada vastuolulisi faile.

git diff

See aitab leida erinevusi hoidla või faili olekute vahel. Seda kasutatakse liitmiskonfliktide ennustamiseks ja ennetamiseks. Ühendamise ebaõnnestumisel kasutatakse mõnda tööriista, nagu näiteks allpool.

git reset --mixed

Seda kasutatakse praeguses kataloogis tehtud muudatuste tühistamiseks.

git checkout

Seda kasutatakse failide muudatuste tagasivõtmiseks või sagedamini harude muutmiseks. Ühendamise käigus tekkivate konfliktide korral kasutatakse mõnda allpool toodud tööriista.

git reset

Seda kasutatakse konfliktfailide lähtestamiseks liitmiskonflikti ajal.

git merge --abort

Argbertiumi edastamine git-merge abil võimaldab liitumisprotsessist väljuda ja haru algse oleku taastada.

Git Merge konfliktide lahendamise eelised

  • Seda kasutatakse harude, failide või hoidlate loomiseks, muutmiseks, kustutamiseks ilma konfliktideta.
  • Seda saab kasutada koodi erinevate versioonide liitmiseks.
  • See aitab ka kaugharudes muudatusi teha ja neid kontrollida, vältides samal ajal konflikte.
  • See aitab väljalaskeid hallata ja käsitleda ilma konfliktideta.
  • Hoiab hoidla ja protsessi puhtana ja loetavalt.

Järeldus

Gitil on palju kasutusvõimalusi ja seda kasutavad laialdaselt arendajad, tootehaldurid ja andmeteadlased. Git-käsud on väga tõhusad ja võivad olla väga kasulikud. Konflikt tekib siis, kui kaks erinevat haru üritavad redigeerida failis sama rida või kui fail kustutatakse konkreetses haru, kuid redigeeritakse teises. Git tegeleb enamiku liitmistega oma liitmisfunktsioonidega edukalt, kuid selle saab lahendada ka käsitsi, kasutades selliseid tööriistu nagu git olek, giti lähtestamine, giti väljavõte ja Giti logi.

Soovitatavad artiklid

See on juhend GIT-i liitmiskonflikti lahendamiseks. Siin räägime sellest, kuidas tõhusalt lahendada Git Merge'i konflikte mitmesuguste käskudega koos selle eelistega. Lisateavet leiate ka meie muudest soovitatud artiklitest -

  1. Git Alternatiivid eelistega
  2. Sissejuhatus Giti tööriistadesse
  3. GitHub vs SVN - peamised erinevused
  4. GIT-i intervjuude 11 parimat küsimust
  5. Git Push
  6. Tableau versioonid
  7. Git-kaugkäskude täielik juhend
  8. Giti elutsükli kolm etappi koos töövooga

Kategooria: