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