Feature branch

En feature branch är en kopia av den huvudsakliga kodbasen där en enskild utvecklare eller ett team av mjukvaruutvecklare kan arbeta med en ny funktion tills den är färdig.

Vad är en feature branch?

En feature branch är en kopia av den huvudsakliga kodbasen där en enskild utvecklare eller ett team av mjukvaruutvecklare kan arbeta med en ny funktion tills den är färdig.

När många utvecklare arbetar i samma kodbas är det viktigt att ha en strategi för hur individer samarbetar. För att undvika att skriva över varandras ändringar skapar utvecklare sina egna kopior av kodbasen, så kallade branches. Om man följer liknelsen med ett träd kallas huvudbranchen ibland för stammen (trunk). Processen att införliva ändringarna från en individuell kopia i huvudstammen kallas merge (sammanslagning).

Utvecklingsprocessen med feature branches

Vid utveckling med feature branches slår enskilda utvecklare eller team inte samman sin branch förrän en funktion är färdig, och arbetar ibland i veckor eller månader i taget på en separat kopia. Denna långa tidsperiod kan göra sammanslagningsprocessen svår eftersom stammen eller master sannolikt har ändrats på grund av att andra utvecklare har slagit samman sina branches. Detta kallas för en merge-konflikt.

Utveckling med feature branches och sammanslagning av källkod hanteras i versionskontrollprogram som Git, mest känt som tjänsten Github. Huvudbranchen och feature branches finns i detta kodrepository (eller repo) och utvecklare gör checkout av kod för att skapa en ny branch att arbeta från.

När ändringarna i koden är gjorda skapar utvecklaren en så kallad pull request, det vill säga en begäran om att andra utvecklare i teamet ska göra en kodgranskning för att säkerställa att den lokala branchen inte innehåller några fel, och att den inte heller kommer att orsaka några fel när den slås samman med huvudbranchen. När en branch har granskats noggrant kan den slås samman med huvudbranchen och bli en del av det centrala repot.

Git branch-utveckling är en metod för att hantera många utvecklare som arbetar utifrån samma kodbas. Moderna team förlitar sig ofta på kontinuerlig integration och trunk-baserad utveckling för att undvika problem med buggfixar och merge-konflikter som uppstår från branching-modellen för kodutveckling. Detta hjälper till att förebygga problem med att flera personer arbetar på samma kodbas, och håller en detaljerad logg över vilken kodbit som lades till av vem, när och var. Denna process kallas även rebasing.

Vad du kan göra vid problem med en feature branch

En av fördelarna med att utveckla i en feature branch är att den inte påverkar din huvudkod förrän du slår samman den. Med ett git-arbetsflöde kan du gå tillbaka till tidigare versioner med hjälp av versionskontrollfunktionerna.

Här är ett par vanliga git-funktioner för att diagnostisera och rulla ut en hotfix

  • Använd git pull för att ladda ner den senaste koden från huvudbranchen. Om du hämtar från huvudbranchen är detta kommando synonymt med git pull master origin.

  • Använd git push för att skicka tillbaka koden du har uppdaterat till din utvecklingsbranch.

  • Git branch var sannolikt kommandot du körde för att skapa en branch från din huvudbranch.

  • Git checkout låter dig växla till olika versioner av en branch. Detta talar om för Git vilken version du vill registrera ändringar på innan du skickar tillbaka dem.

  • Git merge är i princip motsatsen till en git branch, och låter dig slå samman dina ändringar tillbaka i huvudkoden du branchade från samt städa upp genom att ta bort din branch.

Med hjälp av dessa kommandon kan devops-teamet utvärdera sitt utvecklingsarbete och använda versionskontrollsystemet för att felsöka specifika versioner och rulla tillbaka vid behov. Om du befinner dig i en organisation med många teammedlemmar som arbetar på samma kodbas och använder feature branches kan detta hjälpa till att diagnostisera problem snabbt.

Varför använda branching-strategier

Att använda feature branches isolerar varje funktion i sitt eget separata område, övervakat av versionskontrollprogrammet (vanligtvis git). Detta gör det möjligt att arbeta med nya, experimentella funktioner utan att direkt påverka huvudkoden, men ändå hämta nya versioner och uppdateringar som kan ha skett medan du arbetade med den nya funktionen. Detta är särskilt användbart i team där flera medlemmar arbetar på samma centrala kodrepository.

En separat branch isolerar problem och utvecklingsarbete i en release-branch som kan slås samman igen när arbetet är klart. Att ha ett git-arbetsflöde och tydlig kommunikation mellan utvecklare kan hjälpa till att undvika konflikter, och tillåta att olika branches av kod utvecklas samtidigt utan att störa varandra.

Som en del av en branch-strategi är det viktigt att inte bara fokusera på git-flödet, utan även på feature branch-arbetsflödets praxis som namnkonventioner för branches och kodgranskning. Versionskontrollen är en exceptionellt användbar funktion som låter flera teammedlemmar granska kod innan den skickas ut.

Några vanliga namnkonventioner för feature branches:

  • Var beskrivande – vilken funktion arbetas det med

  • Var kortfattad, använd inte fler ord än nödvändigt. Om mer förklaring behövs, lägg till det i beskrivningen

  • Skriv det på ett sätt som andra utvecklare kan förstå vad som arbetas på

Även om du arbetar med flera nya funktioner samtidigt är det god praxis att skapa branches för varje enskild funktion så att de inte hamnar i konflikt med varandra.

När du är redo, använd en pull request för att låta andra teammedlemmar granska din kod och slå samman den tillbaka i det centrala repositoryt. Det är dålig praxis att slå samman och granska sin egen kod. Det kan alltid finnas oförutsedda problem med din specifika funktion som andra kan upptäcka vid granskning.

Kontinuerlig integration och feature branches

Ett alternativ till arbetsflödet med feature branches är kontinuerlig integration, en mjukvaruutvecklingsmetodik som innebär att nya kodändringar kontinuerligt integreras i huvudlinjen eller stammen istället för att vänta tills en ny feature branch har varit under utveckling i veckor eller månader och har avvikit från huvudbranchen.

Kontinuerlig integration, även känt som trunk-baserad utveckling, hjälper till att minimera merge-konflikter genom att kontinuerligt slå samman ändringar i en enda källa för att förhindra feature branching. Kontinuerlig integration, tillsammans med metoder som feature flagging, kan hjälpa utvecklare att driftsätta kod snabbare med mindre tid spenderad på att samordna olika versioner av kod.