Karmaşık Birleştirme Senaryoları

İleri Seviye Git

Amanda Crawford-Adamo

Software and Data Engineer

Uçuş veri hattı deposu

Uçuş seyahat veri hattı depo dizini ve dosyalarının grafiği. Git çalışma dizininde 4 dosya var: etl.py, load.py, transform.py ve ingest.py. Data dizininde flight_data.csv veri klasörü bulunuyor. Ayrıca git klasörü de gösteriliyor.

İleri Seviye Git

Git’te squash birleştirme

$$

İşlev

  • Hedef dalda tek, yeni bir commit oluşturur
  • Kaynak daldaki tüm değişiklikleri birleştirir
    • Tek ebeveynli normal bir commit ekler (recursive stratejiden farklı)
  • Hedef dala eklenir (feature dalına değil)
    • Kaynak dalın ayrıntılı commit geçmişini korumaz

$$

Avantajlar

  • Temiz ve doğrusal geçmiş
  • Büyük özelliklerin kod incelemesini basitleştirir
  • Tüm özelliği geri almak daha kolaydır
İleri Seviye Git

Squash birleştirme örneği

Data-cleanup dalı, ikinci commit’ten sonra main dalından ayrılıyor. Main dalında ek bir commit var. Data-cleanup dalında iki ek commit bulunuyor.

İleri Seviye Git

Squash birleştirme süreci

  1. Main dalına geçin

    $ git checkout main
    
  2. Data-cleanup değişikliklerinin tümünü squash commit yapın

    $ git merge --squash data-cleanup
    
  3. Squash commit’i main geçmişine ekleyin

    $ git commit -m "Implement and optimize data cleanup"
    
İleri Seviye Git

Squash birleştirme sonucu

İki dalı gösteren bir grafik: main ve data-cleanup. Main üzerinde dört commit var. Feature dalı, main'in en son commit’inden sonra ayrılıyor ve kendi dalında ek bir commit içeriyor. Main’in son commit’i, data-cleanup’taki ek commit’lerin sıkıştırılmış halini içeren tek ebeveynli bir commit nesnesi.

İleri Seviye Git

Git octopus merge

$$

İşlev

  • Üç veya daha fazla dalı aynı anda birleştirir
  • Birden çok ebeveynli tek bir birleştirme commit’i oluşturur
  • Dallar birbiriyle çakışmıyorsa en uygundur

$$

Avantajlar

  • Bağımsız birden çok özelliği aynı anda entegre etmek için kullanışlıdır
  • Bir projenin farklı sürümleri için birden çok sürüm dalını eşzamanlamakta kullanılır
İleri Seviye Git

Octopus merge örneği

Dört geliştirme dalının gösterimi: main, ingestion, transform ve load. Ingestion, transform ve load dalları, ilk commit’ten sonra main’den ayrılıyor ve her birinde ek bir commit var. Main dalında da bir ek commit bulunuyor.

İleri Seviye Git

Octopus merge komutları

Git Octopus Merge Komutu

git merge -s octopus

Örnek

$ 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.
...
İleri Seviye Git

Octopus merge sonucu

Dört geliştirme dalının gösterimi: main, ingestion, transform ve load. Ingestion, transform ve load dalları ilk commit’ten sonra main’den ayrılıyor ve her birinde ek bir commit var. Main dalında, diğer dalların commit’lerini içeren toplam beş commit bulunuyor. Son birleştirme commit’i dört ebeveyne sahip: main’in önceki en son commit’i ile ingest, transform ve load dallarının en son commit’leri.

İleri Seviye Git

Özet

Squash merge

  • Geçmişi basitleştirir, birden çok commit’i tek commit’te birleştirir
  • Temiz, sade bir geçmiş için squash birleştirme kullanın
    git merge --squash <source_branch>
    

Octopus merge

  • Dal yapısını korur
  • Birden çok dalı aynı anda birleştirir
  • Paralel geliştirmeleri verimli biçimde entegre eder
    git merge -s octopus <branch 1> <branch 2> <branch 3>
    
İleri Seviye Git

Hadi pratik yapalım!

İleri Seviye Git

Preparing Video For Download...