„Git“ yra paskirstytos versijos kontrolės sistema - įrankis, skirtas stebėti rinkmenų pakeitimus ar koordinuoti darbą bėgant laikui. Programuotojai ją dažnai naudoja norėdami suderinti programinės įrangos šaltinio kodo pakeitimus ir geriausią jų dalį; jis gali būti naudojamas bet kokio tipo turiniui stebėti. Jis yra specialiai suprojektuotas viskam nuo mažų iki didelių apimties projektų, atliekant maksimalų greitį ir efektyvumą. Tai ypač lanksti reikšmė, kad asmenys gali dalintis darbu tiesiogiai tarp savo asmeninių saugyklų, o grupės gali koordinuoti savo darbo eigą per centrinę saugyklą. Tai tiesiog leidžia dviem kūrėjams, sėdintiems dviejose skirtingose vietose, savarankiškai atlikti ir įrašyti pakeitimus, visi be centrinės saugyklos.
Sujungimas yra įprasta „Git“ praktika, naudojama integruoti pokyčius iš vienos šakos į kitą. „Git“ sujungimas yra komanda, kuri vykdo pakeitimus kitoje vietoje. Tai leidžia kūrėjams paimti savarankiškas kodo eilutes, kurias sukūrė „Git“ šaka, ir integruoti jas į vieną šaką. Tai tik keičia tikslinę šaką, kol išlieka šaltinio šakos istorija. „Git rebase“ yra dar viena komanda, naudojama iš esmės tuo pačiu tikslu, išskyrus tai, kad ji daro ją skirtingai. Jie abu daro tą patį dalyką - įtraukia įsipareigojimus iš vienos šakos į kitą, tačiau skirtumas yra tas, kaip jie tai daro. Mes išryškiname keletą svarbiausių skiriamųjų taškų, palygindami du.
„Git merge“ yra komanda, suvienijanti dvi ar daugiau įsipareigojimo istorijos šakų. Sujungimas dažnai jungia tik dvi atšakas, nors „Git“ palaiko trijų, keturių ar daugiau filialų sujungimą tuo pačiu metu. „Git“ sujungimas naudojamas „Git pull“, kad būtų galima įtraukti pakeitimus iš vienos šakos į kitą arba iš viso į kitą saugyklą. Sujungimas turi vykti vienoje saugykloje, ty visos šakos, kurias reikia sujungti, turėtų būti toje pačioje saugykloje. Sujungimo situacijas paprastai sukelia du ar daugiau vartotojų, bandančių atnaujinti bendrą kodą. Dažniausiai vartotojas sujungia filialą į kitą filialą savo vietiniame saugykloje vietinėje aplinkoje. „Git merge“ specialiai integruoja šaltinio šakos turinį su tiksline šaka. Tikslinė šaka keičiama, o šaltinio šaka išlieka.
„Git rebase“ yra dar viena alternatyva sujungimui, naudojama integruoti kitą filialą su filialu, kuriame šiuo metu dirbate, išskyrus tai, kad jis saugo linijinę įsipareigojimo istoriją. „Git rebase“ tikslas yra perkelti filialą iš vienos vietos į kitą. Kadangi įpareigojimai yra nekintami, jų negalima perkelti, todėl tai reiškia naujų įsipareigojimų sudarymą su tais pačiais pakeitimais ir metaduomenimis. Pakartotinis pakeitimas iš esmės keičia supratimą, kada ir kur buvo padaryta įsipareigojimų seka, todėl kai kurie vystymosi istorijos aspektai prarandami. Tai reiškia, kad pradinis įsipareigojimas, kuriuo iš pradžių buvo grindžiama plėtra, bus pakeistas. Perrašydamas istoriją, jis efektyviai įtraukia visus naujus įsipareigojimus į pagrindinę šaką. Dėl to jis sukuria naujus įsipareigojimus kiekvienam pirminės šakos įsipareigojimui.
- Nors sujungimas ir atnaujinimas yra labiausiai paplitę būdai integruoti pokyčius Git ir jie atlieka tą patį tikslą - sujungti kelias atšakas į vieną - skirtumas yra tas, kaip jie to pasiekia. „Git merge“ sujungia šaltinio šakos turinį su tiksline šaka, išsaugant kiekvieno įsipareigojimo istorijos protėvius, tuo tarpu „Git rebase“ įtraukia visus naujus pagrindinės šakos įsipareigojimus, perrašydamas istoriją, sukurdamas naujus įsipareigojimus kiekvienam šaltinio filialui..
- Sujungdami „Git“, pirmiausia perjunkite į sujungiamą šaką ir paskui naudokite sujungimo komandą, norėdami pasirinkti filialą, į kurį norite sujungti. Atsižvelgiant į tai, kad šaka nurodo įpareigojimą, o kad įsipareigojimas yra detalumas, su kuriuo jūs susiejate, tai susijungimas komanda sujungiama šakos ar įsipareigojimo lygiu. Kita vertus, „Rebase“ yra kiek kitokia. Pirmiausia pasirenkate šaką, kuriai reikia sukurti bazinę bazę, tada naudokite rebase komandą, kad pasirinktumėte, kur ją dėti.
- Sujungus sukuriamas naujas įsipareigojimas, reiškiantis dviejų atšakų susiliejimą. Tai sujungia pokyčius iš skirtingų lygiagrečių vystymosi linijų (šakų) kartu sukuriant jungimosi įsipareigojimą. Tikslas yra sujungti dvi ar daugiau filialų kartu, įskaitant visus pokyčius, atsirandančius nuo dabartinės šakos atskyrimo taško. Greitasis pirmyn yra numatytasis „Git“ suliejimo elgesys. Kita vertus, rebasingas keičia individualius įsipareigojimus, perrašydamas projekto istoriją, sukurdamas naujus įsipareigojimus kiekvienam pradiniame filiale, o tai savo ruožtu lemia linijinę istoriją, kurioje nėra skirtingų skyrių.
- Git suliejimas nekeičia istorijos, išsaugant šakos kontekstą, ty esamos šakos niekaip nepakeičiamos. Tai sukuria naują įsipareigojimą (nebent tai buvo greitas sujungimas), tačiau šie įsipareigojimai išlieka pasiekiami. Kita vertus, „Git rebase“ supaprastina galimai sudėtingą istoriją. Įsipareigojimai perrašomi, senosios versijos pamirštos, keičiamas taisymų DAG. Įsipareigojimai nebepasiekiami su „rebase“ reikšme, kad nebegalite atnaujinti paskelbtų šakų.
Trumpai tariant, sujungimas ir atnaujinimas yra du Git pokyčių integravimo būdai, tačiau jie skiriasi tuo, kaip jie tai daro. Sujungimas yra vieno žingsnio operacija vienoje vietoje konfliktams išspręsti, o įsipareigojimai, kuriuos buvo galima pasiekti iš šakos, lieka prieinami. Kita vertus, „Rebase“ pakartoja kiekvieno įsipareigojimo pakartojimą, perrašydamas istoriją, sukurdamas naujus įsipareigojimus kiekvienam šaltinio filiale. Taigi, kas kadaise buvo pasiekiama, nebegalima pasiekti. Pakartotinis pakeitimas iš esmės keičia supratimą apie tai, kada ir kur buvo sukurta įsipareigojimų seka.