Git er et distribueret versionskontrolsystem - et værktøj til at spore ændringer foretaget i et sæt filer eller koordinere arbejde over tid. Det bruges ofte af programmerere til at koordinere ændringer til softwarekildekoden og den bedste del; det kan bruges til at spore enhver form for indhold overhovedet. Det er specielt designet til at håndtere alt fra små til store volumenprojekter med den største hastighed og effektivitet. Det er ekstremt fleksibelt, hvilket betyder, at enkeltpersoner kan dele arbejde direkte mellem deres personlige lagre, og grupper kan koordinere deres arbejdsgang gennem et centralt arkiv. Det gør det nemt for to udviklere, der sidder to forskellige steder, at foretage og registrere ændringer uafhængigt, alt uden et centralt arkiv.
Fusion er en almindelig praksis i Git, der bruges til at integrere ændringer fra en gren til en anden. Git merge er en kommando, der overfører ændringer til et andet sted. Det giver udviklere mulighed for at tage deres uafhængige kodelinjer oprettet af Git-grenen og integrere dem i en enkelt gren. Dette ændrer kun målgrenen, mens historien om kildegrenen forbliver. Git-rebase er endnu en kommando, der grundlæggende bruges til det samme formål, bortset fra at det gør det helt anderledes. De gør begge de samme ting - inkorporerer forpligtelser fra en gren i en anden - men forskellen ligger i, hvordan de gør det. Vi fremhæver nogle vigtige skelnen, der sammenligner de to.
Git-fusion er en kommando, der forener to eller flere begå historikgrene. En fusion forener ofte kun to grene, skønt Git understøtter sammenlægning af tre, fire eller flere grene på samme tid. Git-fletning bruges af Git pull til at inkorporere ændringer fra en gren til en anden eller fra et andet depot helt. Fusion skal ske inden for et enkelt depot, hvilket betyder, at alle de grene, der skal fusioneres, skal være til stede i samme depot. Flettsituationer skyldes typisk to eller flere brugere, der prøver at opdatere den fælles kode. Oftest fusionerer en bruger en gren i en anden gren i deres lokale depot i et lokalt miljø. Git-fusion integrerer specifikt indholdet af en kildegren med en målgren. Målgrenen ændres, mens kildegrenen forbliver.
Git-rebase er endnu et alternativ til fusion, der bruges til at integrere en anden gren med den filial, hvor du arbejder i øjeblikket, bortset fra at det holder en lineær engagementhistorik. Formålet med Git-rebase er at flytte en gren fra et sted til et andet. Da forpligtelser er uforanderlige, kan de ikke flyttes, så dette indebærer, at der foretages nye forpligtelser med de samme ændringssæt og metadata. En rebase ændrer fundamentalt forestillingen om hvornår og hvor en række forpligtelser blev udviklet, hvilket resulterer i, at nogle aspekter af udviklingshistorien går tabt. Dette betyder, at den oprindelige forpligtelse, som udviklingen oprindeligt var baseret på, vil blive ændret. Det integrerer effektivt alle de nye forpligtelser i mastergrenen ved at omskrive historien. Som et resultat skaber det nye forpligtelser for hver begå i den originale gren.
- Selv om både fusion og rebase er de mest almindelige måder at integrere ændringer i Git og de tjener det samme formål - at kombinere flere grene i en - ligger forskellen i, hvordan de opnår det. Git-fletning integrerer indholdet af en kildegren med en målgren, samtidig med at bevarelsen af stamtavlen til hver begivenhedshistorie, hvorimod Git rebase inkorporerer alle de nye forpligtelser i hovedgrenen ved at omskrive historikken ved at oprette nye forpligtelser for hver begå i kildegrenen.
- Med Git-fletning skifter du først til den gren, der skal slås sammen, og derefter bruges fletningskommandoen til at vælge en gren, der skal flettes. I betragtning af at en gren peger på en forpligtelse, og at en forpligtelse er den granularitet, som du forbinder ændringer med, er fusionen kommando fusioneres på filial- eller forpligtelsesniveau. Rebase er på den anden side lidt anderledes. Først skal du vælge en gren, der skal omklassificeres, og derefter bruge rebase-kommandoen til at vælge, hvor den skal placeres.
- Fusion skaber et nyt engagement, der repræsenterer fusionen mellem to grene. Det integrerer ændringer fra forskellige parallelle udviklingslinjer (grene) sammen ved at oprette en fusionskommission. Formålet er at knytte to eller flere grene sammen, inklusive alle ændringer siden punktet med divergens i den nuværende gren. Spol fremad er standardfletningsadfærd i Git. Genfasning på den anden side ændrer individuelle forpligtelser ved at omskrive projekthistorik ved at oprette nye forpligtelser for hver engagement i den oprindelige gren, hvilket igen resulterer i lineær historie uden divergerende grene.
- Git-fusion ændrer ikke historikken, mens konceptet for grenen bevares, hvilket betyder, at de eksisterende grene ikke ændres på nogen måde. Det opretter en ny forpligtelse (medmindre det var en hurtig fremadgående fusion), men forpligtelserne forbliver tilgængelige fra grenen. Git-rebase strømline på den anden side en potentielt kompleks historie. Forpligtelser skrives om, gamle versioner er glemt, og DAG for revisioner ændres. Forpligtelser kan ikke længere nås med rebase, hvilket betyder, at du ikke længere er i stand til at omklassificere publicerede grene.
Nå, i et nøddeskal, er både fusion og rebase de to måder at integrere ændringer i Git på, men de er forskellige i, hvordan de gør det. Fletning er en et-trins operation med et sted at løse konflikter, og de forpligtelser, der kunne nås fra grenen, er stadig tilgængelige. Rebase, på den anden side, genanvender hvert engagement hver for sig ved at omskrive historien ved at oprette nye forpligtelser for hver begå i kildegrenen. Så hvad der engang var tilgængeligt kan ikke længere nås. En rebase ændrer fundamentalt forestillingen om hvornår og hvor en række forpligtelser blev udviklet.