Git on hajutatud versiooni juhtimissüsteem - tööriist failide komplekti tehtud muudatuste jälgimiseks või aja jooksul töö koordineerimiseks. Programmeerijad kasutavad seda sageli tarkvara lähtekoodi ja parima osa muutuste kooskõlastamiseks; seda saab kasutada igasuguse sisu jälgimiseks. See on loodud spetsiaalselt kõigi kiiruse ja tõhususega väikeste ja suuremahuliste projektide haldamiseks. See on äärmiselt paindlik, mis tähendab, et inimesed saavad jagada tööd otse oma isiklike hoidlate vahel ja rühmad saavad oma töövooge koordineerida keskse hoidla kaudu. See lihtsalt võimaldab kahel erinevas kohas istuval arendajal iseseisvalt muudatusi teha ja salvestada, ilma keskse hoidlata.
Ühendamine on Gitis levinud tava, mida kasutatakse muutuste integreerimiseks ühest harust teise. Git ühendamine on käsk, mis viib muudatused teise kohta. See võimaldab arendajatel võtta oma iseseisvad koodiridad, mille on loonud Git haru, ja integreerida need ühte haru. See muudab ainult sihtharu, kuni lähteharu ajalugu jääb alles. Git rebase on järjekordne käsk, mida kasutatakse põhimõtteliselt samal eesmärgil, kuid see teeb seda üsna erinevalt. Nad mõlemad teevad ühte ja sama asja - ühendavad kohustusi ühest harust teise, kuid erinevus seisneb selles, kuidas nad seda teevad. Toome välja mõned peamised eristavad punktid, võrreldes neid kahte.
Git-ühendamine on käsk, mis ühendab kaks või enam ajaloo haru. Ühendamine ühendab sageli vaid kahte haru, ehkki Git toetab kolme, nelja või enama haru ühendamist korraga. Git-ühendamist kasutab Git pull, et lisada muudatused ühest harust teise või kokku teisest hoidlast. Ühendamine peab toimuma ühes hoidlas, see tähendab, et kõik ühendatavad harud peaksid asuma samas hoidlas. Ühendamisolukorrad tulenevad tavaliselt kahest või enamast kasutajast, kes üritavad värskendada ühist koodi. Tavaliselt ühendab kasutaja haru teises keskkonnas oma kohaliku hoidla teise haruga. Git-merge integreerib konkreetselt lähteharu sisu sihtharuga. Sihtharu muudetakse, kuni lähteharu jääb.
Giti ümberarvutamine on veel üks alternatiiv liitmisele, mida kasutatakse teise haru integreerimiseks haruga, kus praegu töötate, välja arvatud see, et see hoiab lineaarset sidumisajalugu. Giti rebase eesmärk on viia haru ühest asukohast teise. Kuna kohustused on muutumatud, ei saa neid teisaldada, nii et see eeldab uute muudatuste tegemist samade muudatuste ja metaandmetega. Uuenduspõhimõte muudab põhimõtteliselt ettekujutust sellest, millal ja kus välja töötati kohustuste jada, mille tagajärjel kaotavad arenguajaloo mõned aspektid. See tähendab, et algset kohustust, millel arendus algselt põhines, muudetakse. Ajaloo ümberkirjutamisega hõlmab see tõhusalt kõiki uusi kaptenite haruid. Selle tulemusel loob see uusi kohustusi iga algse haru kohustuse jaoks.
- Ehkki nii ühendamine kui ka taasalustamine on Giti muudatuste integreerimise kõige tavalisemad viisid ja neil on sama eesmärk - ühendada mitu haru üheks -, seisneb erinevus selles, kuidas nad selle saavutavad. Git merge integreerib lähteharu sisu sihtharuga, säilitades samal ajal iga pärimisajaloo järeltulud, samas kui Git rebase ühendab kõik uued kaptenid peaharu, kirjutades ümber ajaloo, luues lähtekoodide haru igale uuele kohustusele.
- Git ühendamise korral lülitate esmalt liidetava haru juurde ja kasutate seejärel ühendamiskäsku ühendatava haru valimiseks. Arvestades, et haru osutab kohustusele ja et kohustus on granulaarsus, millega te seostate, muutub ühendamine käsk liidetakse haru- või pühendustasandil. Rebase on seevastu natuke erinev. Esmalt valite haru, mida hakatakse taasalustama, ja seejärel kasutage käsu rebase, et valida, kuhu see panna.
- Ühendamine loob uue kohustuse, mis tähistab kahe haru ühendamist. See ühendab muutused erinevatest paralleelsetest arengusuundadest (harudest) kokku, luues liitmiskohustuse. Selle eesmärk on ühendada kaks või enam haru koos, sealhulgas kõik muudatused alates praeguse haru lahknemise kohast. Edasiliikumine on Giti vaikimisi ühendamiskäitumine. Rebasing seevastu muudab üksikute kohustusi projekti ajaloo ümberkirjutamise teel, luues igale algsele harule uued kohustused, mille tulemuseks on omakorda lineaarne ajalugu, millel pole lahknevaid harusid.
- Git-liitmine ei muuda ajalugu, säilitades samas haru konteksti, mis tähendab, et olemasolevaid harusid ei muudeta mingil moel. See loob uue kohustuse (välja arvatud juhul, kui see oli kiire edasiliikumine), kuid kohustused jäävad filiaalilt kättesaadavaks. Git rebase seevastu sujuvamaks muudab potentsiaalselt keeruka ajaloo. Kohustused kirjutatakse ümber, vanad versioonid unustatakse ja muudatuste DAG-i muudetakse. Kohustused ei ole enam saavutatavad, kasutades uuesti baasi, mis tähendab, et te ei saa enam avaldatud harusid uuesti hajutada.
Lühidalt, nii ühendamine kui ka taasalustamine on kaks viisi Giti muudatuste integreerimiseks, kuid nad erinevad selle poolest, kuidas nad seda teevad. Ühendamine on üheastmeline operatsioon ühes kohas konfliktide lahendamiseks ja haru kaudu saavutatavad kohustused jäävad juurdepääsetavaks. Rebase seevastu rakendab iga kohustust individuaalselt, kirjutades ümber ajaloo, luues igale allikaringis pühendunud kohustusele uued kohustused. Niisiis, see, mis kunagi oli juurdepääsetav, pole enam juurdepääsetav. Referaas muudab põhimõtteliselt ettekujutust sellest, millal ja kus on välja töötatud kohustuste jada.