Scenarii complexe de fuzionare

Git avansat

Amanda Crawford-Adamo

Software and Data Engineer

Depozitul pipeline de date pentru zboruri

Un grafic al directorului și fișierelor din depozitul pipeline de date pentru zboruri. Directorul de lucru Git conține 4 fișiere: etl.py, load.py, transform.py și ingest.py. Directorul de date conține fișierul flight_data.csv. Este afișat și folderul git.

Git avansat

Fuzionarea squash în Git

$$

Funcționalitate

  • Creează un singur commit nou pe ramura țintă
  • Combină toate modificările din ramura sursă
    • Adaugă un commit obișnuit cu un singur părinte (spre deosebire de strategia recursivă)
  • Adăugat pe ramura țintă (nu pe ramura funcționalității)
    • Nu păstrează istoricul detaliat al commit-urilor din ramura sursă

$$

Avantaje

  • Istoric curat și liniar
  • Simplifică revizuirea codului pentru funcționalități mari
  • Revenirea la starea anterioară a întregii funcționalități este mai ușoară
Git avansat

Exemplu de fuzionare squash

Ramura data-cleanup diverge din ramura main după al doilea commit. Ramura main are un commit suplimentar. Ramura data-cleanup are două commit-uri suplimentare.

Git avansat

Procesul fuzionării squash

  1. Comutați pe ramura main

    $ git checkout main
    
  2. Creați un commit squash cu toate modificările din data-cleanup

    $ git merge --squash data-cleanup
    
  3. Salvați commit-ul squash în istoricul ramurii main

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

Rezultatul fuzionării squash

Un grafic care arată două ramuri: main și data-cleanup. Ramura main are patru commit-uri. Ramura data-cleanup diverge după ultimul commit din main, cu un commit suplimentar. Ultimul commit din main este un obiect commit cu un singur părinte care conține commit-urile squash din data-cleanup.

Git avansat

Fuzionarea octopus în Git

$$

Funcționalitate

  • Fuzionează trei sau mai multe ramuri simultan
  • Creează un singur commit de fuzionare cu mai mulți părinți
  • Recomandat când ramurile nu intră în conflict

$$

Avantaje

  • Util pentru integrarea simultană a mai multor funcționalități independente
  • Folosit pentru sincronizarea mai multor ramuri de lansare pentru diferite versiuni ale unui proiect
Git avansat

Exemplu de fuzionare octopus

Reprezentarea a patru ramuri de dezvoltare: main, ingestion, transform și load. Ramurile ingestion, transform și load diverge din main după primul commit, fiecare cu un commit suplimentar. Ramura main are și ea un commit suplimentar.

Git avansat

Comenzile fuzionării octopus

Comanda Git Octopus Merge

git merge -s octopus

Exemplu

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

Rezultatul fuzionării octopus

Reprezentarea a patru ramuri de dezvoltare: main, ingestion, transform și load. Ramurile ingestion, transform și load diverge din main după primul commit, fiecare cu un commit suplimentar. Ramura main are cinci commit-uri care includ commit-urile celorlalte ramuri. Ultimul commit de fuzionare are patru părinți: ultimul commit anterior din main și ultimul commit din ramurile ingest, transform și load.

Git avansat

Rezumat

Squash merge

  • Simplifică istoricul, combinând mai multe commit-uri într-unul singur
  • Utilizați squash merge pentru un istoric curat și simplificat
    git merge --squash <source_branch>
    

Octopus merge

  • Păstrează structura ramurilor
  • Fuzionează mai multe ramuri simultan
  • Integrează eficient mai multe dezvoltări paralele
    git merge -s octopus <branch 1> <branch 2> <branch 3>
    
Git avansat

Să exersăm!

Git avansat

Preparing Video For Download...