Sobes.tech
Middle

რა განსხვავებებია Trunk-Based Development და Feature Branching მიდგომებს შორის?

sobes.tech AI

პასუხი AI-სგან

კრიტერიუმი Trunk-Based Development (TBD) Feature Branching (FB)
ძირითადი ფილიალი ერთი ძირითადი ფილიალი (trunk/main/master) რამდენიმე ხანგრძლივი ფილიალი (develop, release, master)
შეთანხმების სიხშირე ძალიან ხშირი (მინიმუმ დღეში ერთხელ) იშვიათი (ფუნქციის დასრულების შემდეგ)
ფუნქციური ფილიალების ზომა ძალიან მოკლე ხანგრძლივობა (რამოდენიმე წუთიდან საათებამდე) ხანგრძლივი (დღეებიდან კვირებამდე)
ინტეგრაცია უწყვეტი ინტეგრაცია (CI) მნიშვნელოვანია ინტეგრაცია იშვიათია, შეიძლება იყოს რთული
კონფლიქტების რისკი ნაკლები დიდი კონფლიქტები, მაგრამ მეტი პატარა, ხშირი მეტი დიდი კონფლიქტები დიდი ფილიალების შერწყმაზე
გამოსვლის დრო სწრაფი და ხშირი გამოშვება (continuous delivery) უფრო ნელი და იშვიათი გამოშვება
ტესტირების მოთხოვნები მაღალი დონის ავტომატიზებული ტესტირება ტესტები შეიძლება შესრულდეს მოგვიანებით ციკლში
გუნდს ზომა შესაფერისია მცირე და საშუალო გუნდებისთვის, მაგრამ მასშტაბირებადი წესრიგით შესაფერისია დიდ გუნდებისთვის

Trunk-Based Development:

  • ყურადღება გამახვილებულია მცირე ცვლილებების ხშირი ინტეგრაციაზე პირდაპირ ძირითადი ფილიალში.
  • მოითხოვს მკაცრ წესრიგს, ავტომატურ ტესტებს და ფუნქციურ ფლაგებს გამოშვების მართვისთვის.
  • ამცირებს დიდ შერწყმებთან დაკავშირებულ რისკებს.

Feature Branching:

  • თითოეული ფუნქცია მუშავდება ცალკეულ ფილიალში.
  • შერწყმა ხდება მხოლოდ ფუნქციის დასრულების შემდეგ.
  • შეიძლება გამოიწვიოს "გაფლანგვა" ცვლილებებით და რთული კონფლიქტებით, თუ ფილიალები დიდხანს ცოცხლობენ.

სიმპლიფიცირებული კოდი TBD-ისთვის:

// განვითარება პირდაპირ მიმდინარეობს main/trunk-ში
public class FeatureA {
    public void doStuff() {
        // ფუნქციის A კოდი
    }
}

// სხვა დეველოპერი თითქმის ერთდროულად კომიტს აკეთებს main/trunk-ში
public class FeatureB {
    public void doOtherStuff() {
        // ფუნქციის B კოდი
    }
}

სიმპლიფიცირებული კოდი FB-ისთვის:

// დეველოპერი 1 მუშაობს feature/A ფილიალზე
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // ფუნქციის A კოდი
    }
}

// დეველოპერი 2 მუშაობს feature/B ფილიალზე
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // ფუნქციის B კოდი
    }
}

// ფუნქცია A დასრულების შემდეგ, ფილიალი იწერება develop-ში
// git checkout develop
// git merge feature/A

// ფუნქცია B დასრულების შემდეგ, ფილიალი იწერება develop-ში
// git checkout develop
// git merge feature/B // შესაძლებელია კონფლიქტები ფაილში ფუნქცია A-დან