Sobes.tech
Middle

Trunk-Based Development ve Özellik Dalı Yaklaşımları arasındaki farklar nelerdir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kriter Trunk Tabanlı Geliştirme (TBD) Özellik Dalı (FB)
Ana Dal Bir ana dal (trunk/main/master) Birkaç uzun ömürlü dal (develop, release, master)
Birleştirme Sıklığı Çok sık (günde en az bir kez) Nadiren (özellik tamamlandıktan sonra)
Özellik Dalları Boyutu Çok kısa ömürlü (dakikalar ila saatler) Uzun ömürlü (günler ila haftalar)
Entegrasyon Sürekli Entegrasyon (CI) anahtar önemdedir Daha az sıklıkta gerçekleşir, daha karmaşık olabilir
Çatışma Riski Daha az büyük çatışma, ama daha fazla küçük ve sık Büyük çatışmalar, büyük dalların birleştirilmesinde artar
Yayınlama Süresi Hızlı ve sık (sürekli teslimat) Daha yavaş ve daha az sıklıkta
Test Gereksinimleri Yüksek otomasyon seviyesi Testler daha sonra yapılabilir
Takım Büyüklüğü Küçük ve orta ölçekli takımlar için uygundur, disiplinle ölçeklenebilir Büyük takımlar için uygundur

Trunk Tabanlı Geliştirme:

  • Küçük değişikliklerin ana dala sık sık entegre edilmesine odaklanır.
  • Sıkı disiplin, otomatik testler ve özellik bayrakları gerektirir.
  • Büyük birleştirmelerdeki riskleri azaltır.

Özellik Dalları:

  • Her özellik ayrı bir dalda geliştirilir.
  • Sadece özellik tamamlandıktan sonra birleştirilir.
  • Uzun süre yaşayan dallarda değişikliklerin "boğulmasına" ve karmaşık çatışmalara yol açabilir.

TBD için örnek kod (basitleştirilmiş):

// Geliştirme doğrudan main/trunk üzerinde yapılır
public class FeatureA {
    public void doStuff() {
        // Özellik A kodu
    }
}

// Başka bir geliştirici neredeyse aynı anda main/trunk'e commit yapar
public class FeatureB {
    public void doOtherStuff() {
        // Özellik B kodu
    }
}

FB için örnek kod (basitleştirilmiş):

// Geliştirici 1 feature/A dalında çalışıyor
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // Özellik A kodu
    }
}

// Geliştirici 2 feature/B dalında çalışıyor
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // Özellik B kodu
    }
}

// Özellik A tamamlandıktan sonra, dal develop'e merge edilir
// git checkout develop
// git merge feature/A

// Özellik B tamamlandıktan sonra, dal develop'e merge edilir
// git checkout develop
// git merge feature/B // Çakışmalar olabilir