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) կարևոր է Ինտեգրացիան ավելի հազվադեպ է, կարող է լինել ավելի բարդ
Կոնֆլիկտների ռիսկ Փոքր մեծ կոնֆլիկտներ, բայց ավելի շատ մանր, հաճախ Ավելի մեծ կոնֆլիկտներ մեծ ճյուղերի միացման ժամանակ
Ելք ժամանակը արտադրանք Արագ և հաճախ (շարունակական մատակարարում) Ավելի դանդաղ և հազվադեպ ելք
Թեստավորման պահանջներ Բարձր մակարդակի ավտոմատացված թեստավորում Թեստերը կարող են կատարվել ուշացմամբ ցիկլում
Թիմի չափը Հարմար է փոքր և միջին թիմերի համար, բայց ընդլայնելի է կարգապահությամբ Հարմար է մեծ թիմերի համար

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 կոդից