Sobes.tech
Middle

Trunk-Based Development və Feature Branching yanaşmaları arasındakı fərqlər nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Kriteriya Trunk-Əsaslı İnkişaf (TBD) Funksiya Filialları (FB)
Əsas filial Bir əsas filial (trunk/main/master) Bir neçə uzunömürlü filiallar (develop, release, master)
Birleştirmə tezliyi Çox tez (gündə ən az bir dəfə) Nadir (funksiya tamamlandıqdan sonra)
Funksiya filiallarının ölçüsü Çox qısa müddətlidir (bir neçə dəqiqədən saatlara qədər) Uzunömürlü (günlərdən həftələrə qədər)
İnteqrasiya Davamlı inteqrasiya (CI) vacibdir Daha az tez baş verir, daha mürəkkəb ola bilər
Münaqişə riski Kiçik münaqişələr, lakin daha çox kiçik və tez-tez Böyük münaqişələr böyük filialların birləşməsində olur
Yayım vaxtı Sürətli və tez-tez (davamlı çatdırılma) Daha yavaş və daha az tezliklə
Test tələbləri Yüksək avtomatlaşdırma səviyyəsi Testlər daha sonra həyata keçirilə bilər
Komanda ölçüsü Kiçik və orta komandalar üçün uyğundur, intizamla genişlənir Böyük komandalar üçün uyğundur

Trunk-Əsaslı İnkişaf:

  • Kiçik dəyişikliklərin əsas filialda tez-tez inteqrasiya olunmasına yönəlib.
  • Sərt disiplin, avtomatlaşdırılmış testlər və funksional bayraqlar tələb edir.
  • Böyük birləşmələrlə əlaqəli riskləri azaldır.

Funksiya Filialları:

  • Hər funksiya ayrı filialda inkişaf etdirilir.
  • Yalnız funksiya tamamlandıqdan sonra birləşdirilir.
  • Əgər filiallar uzun müddət yaşayarsa, "suya batma" və mürəkkəb münaqişələrə səbəb ola bilər.

TBD üçün nümunə kod (sadələşdirilmiş):

// İnkişaf birbaşa main/trunk-də həyata keçirilir
public class FeatureA {
    public void doStuff() {
        // A funksiyasının kodu
    }
}

// Digər bir inkişafçı demək olar ki, eyni zamanda main/trunk-ə commit edir
public class FeatureB {
    public void doOtherStuff() {
        // B funksiyasının kodu
    }
}

FB üçün nümunə kod (sadələşdirilmiş):

// İnkişafçı 1 feature/A filialında işləyir
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // A funksiyasının kodu
    }
}

// İnkişafçı 2 feature/B filialında işləyir
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // B funksiyasının kodu
    }
}

// A funksiyası tamamlandıqdan sonra, filial develop-ə merge edilir
// git checkout develop
// git merge feature/A

// B funksiyası tamamlandıqdan sonra, filial develop-ə merge edilir
// git checkout develop
// git merge feature/B // Konfliktlər ola bilər