Komplexa merge-scenarier

Avancerad Git

Amanda Crawford-Adamo

Software and Data Engineer

Repo för flygresedata-pipeline

En graf över katalogstrukturen för ett repo med flygresedata. Git-arbetskatalogen innehåller fyra filer: etl.py, load.py, transform.py och ingest.py. Datakatalogen innehåller datafilen flight_data.csv. Git-mappen visas också.

Avancerad Git

Git squash-merge

$$

Funktionalitet

  • Skapar en enda ny commit på målgrenen
  • Kombinerar alla ändringar från källgrenen
    • Lägger till en vanlig commit med en förälder (till skillnad från rekursiv strategi)
  • Läggs till på målgrenen (inte feature-grenen)
    • Bevarar inte den detaljerade commit-historiken för källgrenen

$$

Fördelar

  • Ren och linjär historik
  • Förenklar kodgranskning av stora funktioner
  • Enklare att återställa hela funktionen
Avancerad Git

Exempel på squash-merge

Grenen data-cleanup förgrenar sig från main-grenen efter den andra commiten. Main-grenen har en ytterligare commit. data-cleanup har två ytterligare commits.

Avancerad Git

Processen för squash-merge

  1. Checka ut main-grenen

    $ git checkout main
    
  2. Skapa en squash-commit av alla ändringar i data-cleanup

    $ git merge --squash data-cleanup
    
  3. Lägg till squash-commiten i main-grenens historik

    $ git commit -m "Implement and optimize data cleanup"
    
Avancerad Git

Resultat av squash-merge

En graf som visar två grenar: main och data-cleanup. Main har fyra commits. Feature-grenen förgrenar sig efter main-grenens senaste commit och har en ytterligare commit. Main-grenens senaste commit är ett commit-objekt med en förälder som innehåller de sammanslagda commits från data-cleanups ytterligare commits.

Avancerad Git

Git octopus-merge

$$

Funktionalitet

  • Slår ihop tre eller fler grenar samtidigt
  • Skapar en enda merge-commit med flera föräldrar
  • Passar bäst när grenar inte konfliktar med varandra

$$

Fördelar

  • Användbart för att integrera flera oberoende funktioner samtidigt
  • Används för att synkronisera flera release-grenar för olika versioner av ett projekt
Avancerad Git

Exempel på octopus-merge

En illustration av fyra utvecklingsgrenar: main, ingestion, transform och load. Grenarna ingestion, transform och load förgrenar sig från main efter den första commiten, med en ytterligare commit vardera. Main-grenen har också en ytterligare commit.

Avancerad Git

Kommandon för octopus-merge

Git octopus-merge-kommando

git merge -s octopus

Exempel

$ git merge -s octopus ingest transform load
Trying simple merge with ingest
Trying simple merge with transform
Trying simple merge with load
Merge made by the 'octopus' strategy.
...
Avancerad Git

Resultat av octopus-merge

En illustration av fyra utvecklingsgrenar: main, ingestion, transform och load. Grenarna ingestion, transform och load förgrenar sig från main efter den första commiten, med en ytterligare commit vardera. Main-grenen har fem commits som innehåller commits från de övriga grenarna. Det sista merge-commit-objektet har fyra föräldrar: main-grenens tidigare senaste commit samt den senaste commiten från grenarna ingest, transform och load.

Avancerad Git

Sammanfattning

Squash-merge

  • Förenklar historiken genom att kombinera flera commits till en
  • Använd squash-merge för en ren och överskådlig historik
    git merge --squash <source_branch>
    

Octopus-merge

  • Bevarar grenstrukturen
  • Slår ihop flera grenar samtidigt
  • Effektiv integrering av flera parallella utvecklingslinjer
    git merge -s octopus <branch 1> <branch 2> <branch 3>
    
Avancerad Git

Nu kör vi en övning!

Avancerad Git

Preparing Video For Download...