Git õppetunnid: ühendamine / taasalustamine

Jagatud versioonikontrollisüsteem nimega Git on muutnud seda, kuidas arendajad mõtlevad koodide liitmisele ja hargnemisele, võrreldes varasemate versioonikontrollisüsteemidega, nagu CVS ja SVN.

Giti abil muutusid need toimingud suhteliselt lihtsaks ja kiireks. See süsteem võimaldab arendajatel luua uusi põhifaasist eraldatud funktsioone ja neid hiljem integreerida, kui funktsioon on integreerimiseks valmis.

Kui olete Giti jaoks uus, peaksid järgmised lingid aitama teil kiiresti alustada:

  • Git – lihtne juhend
  • Git põhitõed
  • Git hargnemise põhitõed
  • Edukas Giti hargnemismudel

Gitis on muudatusi ühest haru teise integreerimiseks kaks peamist viisi:

  1. ühendada
  2. rebase

Vaatleme liitmist variantidega -ff ja –no-ff. Märkus: käsku git –no-ff rebase pole.

Kiire demo seadistamine

Enne kui vaatame Giti liitmise kahte viisi, seadkem kõigepealt toimiv Giti hoidla järgmiste käskudega:

1
2
3
4
5
6

mkdir mycode

kaja “foo bar baz” > mycode / foo.txt

git init mycode

CD mycode

lisage foo.txt

git commit -m “Teade edastamine”

Loogem nüüd uus haru nimega “myfeature” ja lülitugem sellele:

1 git kassasse -b müfeature

Nüüd saame muuta faili “foo.txt” meie kohaliku repo haru “myfeature”:

1
2

kaja-e “foo bar baznquux” > foo.txt

git įsipareig -a -m ‘lisatud müfeature’

Oletame, et meie „funktsiooni” muudatus on lõpule viidud ja nüüd tahaksime selle funktsiooni integreerida oma „haru” haru.

Meie graafik näeks välja selline:

1
2
3

   B müra

  /

Meister

Nagu Giti kohta varem öeldud, on meil selleks kaks võimalust: kas ühendada või uuesti luua.

Kuidas kasutada: ühendada

Git merge käsk ühendab kaks või enam haru.

Kõigepealt lülitame tagasi põhimehe juurde, et saaksime ühendada oma põhitegevusega.

1 git kassas kapten

Nüüd saame ühendamise teha, kuid arutame kõigepealt kahte erinevat moodust ühendamise loomiseks.

Sageli on praegune harupea nimetatud kohustuse („müfeature“) esivanem. See on kõige tavalisem juhtum. Selle stsenaariumi korral ei ole kombineeritud ajaloo talletamiseks uut kohustust vaja. Selle asemel värskendatakse git HEAD (koos indeksiga), et osutada nimetatud kohustusele ilma täiendavat ühendamiskohustust loomata.

Git-merge vaikimisi käitumine on võimaluse korral kiiresti edasi-tagasi ühendamine. Selle vaikekäitumise saab selgeks teha valikuga -ff abil või seda käitumist saab suvalise kiirühenduseta edasiliikumise (–no-ff) abil summutada. Kommenteeritava sildi liitmisel loob Git alati liitmiskohustuse ka siis, kui edasiliikumine on võimalik.

Funktsiooni –no-ff kasutamisel näeb keegi, kes git ajalugu vaatab, selgelt filiaali, mille olete välja töötanud. Pange tähele ka seda, kuidas –no-ff-ühendamisel on lõpus täiendav liitmiskohustus.

Allpool on pilt, mis näitab erinevust –no-ff ja -ff ühendamise vahel.

git --no-ff rebase

Nii et teil on nüüd võimalus kasutada ühte järgmistest:

1 ühendada myfeature

Pärast seda käsku näeks meie graafik järgmine:

1 A – B meister

Või saaksime filiaalide ajalugu hoida järgmiselt:

1 git merge – no-ff myfeature

Viimasel juhul näeks meie graafik nüüd välja selline:

1
2
3

  B müra

/

A – C kapten

Ja kui me täidame järgmist git logi käsku:

1 git log –graaf –täielik ajalugu – kõik – päris = formaat: “% h% x09% d% x20% s”

See näitab sarnast graafikut:

1
2
3
4
5

* 5368727 (HEAD, kapten) ühendamise haru ‘myfeature’

|

| * 6267227 (myfeature) lisas myfeature

| /

* ac54e38 Kohustuslik teade

Millist tüüpi ühendamist eelistate, sõltub sellest, kui palju haruinfot soovite ühendamise ajal salvestada.

Kuidas kasutada: git rebase

Teine viis muudatuste integreerimiseks ühest harust teise on teha git rebase.

Kui liitmine ühendab kaks haru, säilitades samal ajal iga sidumisajaloo graafiku, ühendab rebasseerimine harude muutmise ümberkirjutamisega lähteallkonnast, nii et need ilmuvad sihtharu lastena.

Git rebase forward-pordi kohalik kohustub uuendatud ülesvoolu peaga. Rebasing on haru uuele baaskohustusele kolimise protsess.

See näeb välja selline graafik. Oletame, et järgmine ajalugu on olemas ja praegune haru on “müfeatuur”:

1
2
3

      A – B – C müra

     /

D – E – F – G meister

Ja kui me nüüd teeme:

1 git rebase master

Tulemuseks oleks:

1
2
3

        A’ – B’ – C ’müra

       /

D – E – F – G-meister

Haru „master“ sisaldab nüüd haru „myfeature“ muudatusi jaotises „G“ ilma liitmiskohustust loomata. Nii et harude ühendamisega ühendamise asemel integreerib rebasteerimine müfeature haru, ehitades pealiku peale. Tulemuseks on lineaarne ajalugu, mida võib arendajatele hõlpsamini mõista. Git log näitaks nüüd “D – E – F – G master” lineaarset ajalugu.

Konflikti korral peatub git rebase esimesel probleemsel toimepanemisel ja jätab konflikti markerid puusse.

Ühendamine või taasalustamine?

Mõlemat koodi integreerimise meetodit tuleks kasutada siis, kui need sobivad kõige paremini. Selle kohta, millal tuleks teatud meetodit kasutada, on erinevaid arvamusi.

Siin on mõned lingid, mis kirjeldavad olukordi, kus ühte meetodit võiks eelistada teisele:

  • ühendada või uuesti luua?
  • Millal ühendada vs millal taasalustada
  • Giti meeskonna töövood: ühendage või taasalustage?
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me