Złożone scenariusze scalania

Zaawansowany Git

Amanda Crawford-Adamo

Software and Data Engineer

Repozytorium potoku danych lotniczych

Wykres katalogu i plików repozytorium potoku danych lotniczych. Katalog roboczy Git zawiera 4 pliki: etl.py, load.py, transform.py i ingest.py. Katalog data zawiera plik flight_data.csv. Widoczny jest również folder .git.

Zaawansowany Git

Scalanie squash w Git

$$

Działanie

  • Tworzy jeden nowy commit na gałęzi docelowej
  • Łączy wszystkie zmiany z gałęzi źródłowej
    • Dodaje zwykły commit z jednym rodzicem (w odróżnieniu od strategii recursive)
  • Dodawany do gałęzi docelowej (nie do gałęzi funkcji)
    • Nie zachowuje szczegółowej historii commitów gałęzi źródłowej

$$

Zalety

  • Przejrzysta i liniowa historia
  • Upraszcza przegląd kodu dla dużych funkcji
  • Łatwiejsze cofanie całej funkcji
Zaawansowany Git

Przykład scalania squash

Gałąź data-cleanup odgałęzia się od main po drugim commicie. Gałąź main ma jeden dodatkowy commit. Gałąź data-cleanup ma dwa dodatkowe commity.

Zaawansowany Git

Proces scalania squash

  1. Przełącz się na gałąź main

    $ git checkout main
    
  2. Utwórz commit squash ze zmian gałęzi data-cleanup

    $ git merge --squash data-cleanup
    
  3. Zatwierdź commit squash w historii gałęzi main

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

Wynik scalania squash

Wykres przedstawiający dwie gałęzie: main i data-cleanup. Gałąź main zawiera cztery commity. Gałąź data-cleanup odgałęzia się od najnowszego commitu main i zawiera dodatkowy commit. Najnowszy commit gałęzi main to pojedynczy obiekt zawierający spłaszczone commity gałęzi data-cleanup.

Zaawansowany Git

Scalanie octopus w Git

$$

Działanie

  • Scala trzy lub więcej gałęzi jednocześnie
  • Tworzy pojedynczy commit scalający z wieloma rodzicami
  • Najlepszy, gdy gałęzie nie powodują konfliktów

$$

Zalety

  • Przydatne do jednoczesnej integracji wielu niezależnych funkcji
  • Stosowane do synchronizacji gałęzi wydań różnych wersji projektu
Zaawansowany Git

Przykład scalania octopus

Schemat czterech gałęzi: main, ingestion, transform i load. Gałęzie ingestion, transform i load odgałęziają się od main po pierwszym commicie, każda z dodatkowym commitem. Gałąź main ma również jeden dodatkowy commit.

Zaawansowany Git

Polecenia scalania octopus

Polecenie Git Octopus Merge

git merge -s octopus

Przykład

$ 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.
...
Zaawansowany Git

Wynik scalania octopus

Schemat czterech gałęzi: main, ingestion, transform i load. Gałęzie ingestion, transform i load odgałęziają się od main po pierwszym commicie, każda z dodatkowym commitem. Gałąź main zawiera pięć commitów scalonych z pozostałych gałęzi. Ostatni commit scalający ma czterech rodziców: poprzedni commit main oraz najnowsze commity gałęzi ingest, transform i load.

Zaawansowany Git

Podsumowanie

Scalanie squash

  • Upraszcza historię, łącząc wiele commitów w jeden
  • Stosuj do uzyskania przejrzystej, liniowej historii
    git merge --squash <source_branch>
    

Scalanie octopus

  • Zachowuje strukturę gałęzi
  • Scala wiele gałęzi jednocześnie
  • Efektywna integracja wielu równoległych prac
    git merge -s octopus <branch 1> <branch 2> <branch 3>
    
Zaawansowany Git

Czas na ćwiczenia!

Zaawansowany Git

Preparing Video For Download...