Close

Git-workflow voor functie-branches

Het kernidee achter de workflow voor functie-branches is dat alle ontwikkeling van functies moet plaatsvinden in een speciale branch in plaats van in de main-branch. Deze inkapseling maakt het eenvoudig om meerdere ontwikkelaars aan een bepaalde functie te laten werken zonder de hoofdcodebase te verstoren. Het betekent ook dat de main-branch nooit beschadigde code bevat, wat een groot voordeel is voor omgevingen met continue integratie.

Door de ontwikkeling van functies is het ook mogelijk om gebruik te maken van pull-aanvragen, een manier om discussies in een branch op gang te brengen. Deze bieden andere ontwikkelaars de mogelijkheid om een functie goed te keuren voordat deze in het officiële project wordt geïntegreerd. Of als je midden in een functie vast komt te zitten, kun je een pull-aanvraag openen waarin je collega's om suggesties kunt vragen. Het punt is dat je team met pull-aanvragen heel eenvoudig commentaar kan geven op elkaars werk.

De Git-workflow voor functie-branches is een samen te stellen workflow die op hoog niveau gebruikt kan worden door andere Git-workflows. We hebben andere Git-workflows besproken op de overzichtspagina van de Git-workflow. De Git-workflow voor functie-branches is gericht op branchingmodellen, wat betekent dat het een leidraad is voor het beheren en aanmaken van branches. Andere workflows zijn meer gericht op repo. De Git-workflow voor functie-branches kan in andere workflows geïntegreerd worden. De Gitflow en Git-vertakkingsworkflows gebruiken van oorsprong een Git-workflow voor functie-branches met betrekking tot hun branchingmodellen.


Hoe het werkt


De workflow voor functie-branch gaat uit van een centrale repository, en de main-branch vertegenwoordigt de officiële projectgeschiedenis. In plaats van zich rechtstreeks op hun lokale main-branch te richten, maken ontwikkelaars elke keer een nieuwe branch aan wanneer ze aan een nieuwe functie beginnen te werken. De belangrijkste branches moeten een beschrijvende naam hebben, bijvoorbeeld geanimeerde-menu-items of issue-#1061. Het idee is om elke branch een duidelijk, zeer gericht doel te geven. Git maakt technisch gezien geen onderscheid tussen de main-branch en functie-branches, zodat ontwikkelaars een functie-branch kunnen bewerken, stagen en er wijzigingen in kunnen doorvoeren.

Bovendien kunnen (en moeten) functie-branches naar de centrale repository worden verplaatst. Op die manier is het mogelijk om een functie te delen met andere ontwikkelaars zonder de officiële code te beïnvloeden. Aangezien main de enige 'speciale' branch is, levert het opslaan van meerdere functie-branches in de centrale repository geen problemen op. Natuurlijk is dit ook een handige manier om een back-up te maken van ieders lokale commits. Wat nu volgt is een overzicht van de levenscyclus van een functie-branch.

Begin bij de main-branch

Alle functie-branches worden gemaakt op basis van de meest recente codestatus van een project. In deze handleiding wordt ervan uitgegaan dat dit wordt onderhouden en bijgewerkt in de main-branch.

Consolevenster
gerelateerd materiaal

Uitgebreid Git log

Logo Bitbucket
Oplossing bekijken

Git leren met Bitbucket Cloud

git checkout main
git fetch origin 
git reset --hard origin/main

Stap 1: De repository aanmaken

Hiermee wordt de repo overgezet naar de main-branch, worden de laatste commits opgevraagd en wordt het lokale exemplaar van de main in de repo teruggezet zodat deze overeenkomt met de nieuwste versie.

Een new-branch aanmaken

Gebruik een aparte branch voor elke functie of issue waaraan je werkt. Nadat je een branch hebt aangemaakt, moet je die lokaal uitchecken zodat alle wijzigingen worden aangebracht in die branch.

git checkout -b new-feature

Dit checkt een branch met de naam new-feature uit op basis van main, en de -b-markering geeft Git de opdracht om de branch aan te maken als die nog niet bestaat.

Wijzigingen bijwerken, toevoegen, committen en pushen

In deze branch kun je op de gebruikelijke manier wijzigingen bewerken, stagen en committen, waardoor de functie met zoveel mogelijk nodige commits opgebouwd wordt. Werk aan de functie en maak commits zoals je dat altijd doet wanneer je Git gebruikt. Als je klaar bent, kun je je commits pushen om de functie-branch in Bitbucket bij te werken.

git status
git add <some-file>
git commit

Functie-branch naar een externe plek pushen

Het is een goed idee om de functie-branch naar de centrale repository te pushen. Dit is een handige back-up: wanneer er wordt samengewerkt met andere ontwikkelaars geeft dit hen toegang om de commits voor de nieuwe branch te bekijken.

git push -u origin new-feature

Deze opdracht pusht een nieuwe functie naar de centrale repository (origin), en de -u-markering voegt deze toe als een branch voor tracering op afstand. Nadat de branch voor tracering is ingesteld, kan git push zonder parameters worden opgeroepen om de branch new-feature automatisch naar de centrale repository te sturen. Om feedback te krijgen over de nieuwe functie-branch, moet je een pull-aanvraag aanmaken in een repositorybeheeroplossing als Bitbucket Cloud of Bitbucket Data Center. Van daaruit kun je beoordelaars toevoegen en ervoor zorgen dat alles in orde is voordat je gaat samenvoegen.

Feedback verwerken

Nu geven teamgenoten opmerkingen en goedkeuring voor de gepushte commits. Verwerk hun opmerkingen lokaal, voer wijzigingen door en push de voorgestelde wijzigingen naar Bitbucket. Je updates verschijnen in de pull-aanvraag.

Je pull-aanvragen samenvoegen

Voordat je gaat samenvoegen, moet je mogelijk samenvoegingsconflicten oplossen als anderen wijzigingen hebben aangebracht in de repo. Als je pull-aanvraag is goedgekeurd en conflictvrij is, kun je je code toevoegen aan de main-branch. Voeg je code samen vanuit de pull-aanvraag in Bitbucket.

Pull-aanvragen


Naast het isoleren van de ontwikkeling van functies, kun je met branches wijzigingen bespreken via pull-aanvragen. Zodra iemand een functie heeft voltooid, wordt die niet meteen samengevoegd in de main. In plaats daarvan sturen ze de functie-branch naar de centrale server en dienen ze een pull-aanvraag in met de vraag om hun toevoegingen samen te voegen in de main. Hierdoor krijgen andere ontwikkelaars de mogelijkheid om de wijzigingen te bekijken voordat ze deel gaan uitmaken van de hoofdcodebase.

Codebeoordeling is een groot voordeel van pull-aanvragen, maar ze zijn in feite ontworpen als algemene manier om over code te praten. Je kunt pull-aanvragen zien als een discussie over een bepaalde branch. Dit betekent dat ze ook veel eerder in het ontwikkelingsproces kunnen worden gebruikt. Als een ontwikkelaar bijvoorbeeld hulp nodig heeft met een bepaalde functie, hoeft hij alleen maar een pull-aanvraag in te dienen. Belanghebbenden worden automatisch op de hoogte gebracht en kunnen de vraag direct naast de relevante commits zien.

Zodra een pull-aanvraag geaccepteerd is, is het publiceren van een functie vrijwel hetzelfde als in de gecentraliseerde workflow. Eerst moet je ervoor zorgen dat je lokale main gesynchroniseerd is met de stroomopwaartse main. Vervolgens voeg je de functie-branch samen in main en push je de bijgewerkte main terug naar de centrale repository.

Pull-aanvragen kunnen gefaciliteerd worden door oplossingen voor het beheer van productrepository's, zoals Bitbucket Cloud of Bitbucket Server. Bekijk de documentatie over pull-aanvragen in Bitbucket Server voor een voorbeeld.

Voorbeeld


Er volgt een voorbeeld van het soort scenario waarin een workflow voor functie-branches wordt gebruikt. Het scenario: een team beoordeelt de code voor een pull-aanvraag over een nieuwe functie. Dit is een voorbeeld van een van de vele doeleinden waarvoor dit model kan worden gebruikt.

Mary ontwikkelt een nieuwe functie

Afbeelding van functie-branch

Voordat ze begint met de ontwikkeling van een functie heeft Mary een aparte branch nodig om aan te werken. Ze kan een nieuwe branch aanvragen met de volgende opdracht:

git checkout -b marys-feature main

Dit checkt een branch genaamd marys-feature uit, gebaseerd op main, en de -b-markering geeft Git de opdracht om de branch aan te maken als die nog niet bestaat. In deze branch kan Mary op de gebruikelijke manier wijzigingen bewerken, stagen en committen, waardoor haar functie met zoveel mogelijk nodige commits opgebouwd wordt:

git status
git add <some-file>
git commit

Mary gaat lunchen

Pushen naar de centrale repository

In de loop van de ochtend voegt Mary een paar commits toe aan haar functie. Voordat ze gaat lunchen, is het een goed idee om haar functie-branch naar de centrale repository te verplaatsen. Dit is een handige back-up, maar als Mary zou samenwerken met andere ontwikkelaars, zou dat hen ook toegang geven tot haar oorspronkelijke commits.

git push -u origin marys-feature

Deze opdracht pusht marys-feature naar de centrale repository (origin), en de -u-markering voegt deze toe als een branch voor tracering op afstand. Nadat Mary de trackingbranch heeft ingesteld, kan ze git push gebruiken zonder parameters om haar functie te pushen.

Mary maakt haar functie af

Pull-aanvraag

Als Mary terugkomt van de lunch, maakt ze haar functie af. Voordat ze alles samenvoegt in de main, moet ze een pull-aanvraag indienen om de rest van het team te laten weten dat ze klaar is. Maar eerst moet ze ervoor zorgen dat de centrale repository haar meest recente commits bevat:

git push

Vervolgens dient ze de pull-aanvraag in haar Git GUI in met de vraag om marys-feature samen te voegen in de main, waarna teamleden automatisch op de hoogte worden gebracht. Het mooie van pull-aanvragen is dat ze reacties direct naast hun gerelateerde commits tonen. Zo is het eenvoudig om vragen te stellen over specifieke changesets.

Bill ontvangt de pull-aanvraag

Afbeelding van een pull request beoordelen

Bill krijgt de pull-aanvraag en bekijkt marys-feature. Hij besluit dat hij een paar wijzigingen wil aanbrengen voordat hij het in het officiële project integreert, en hij en Mary communiceren via de pull-aanvraag.

Mary brengt de wijzigingen aan

Herzieningen van pull request

Om de wijzigingen aan te brengen, gebruikt Mary precies hetzelfde proces als ze deed om de eerste iteratie van haar functie te maken. Ze bewerkt, staget, commits en pusht updates naar de centrale repository. Al haar activiteiten worden weergegeven in de pull-aanvraag en Bill kan ondertussen nog steeds opmerkingen maken.

Als hij dat zou willen, had Bill marys-feature naar zijn plaatselijke repository kunnen overzetten en er zelf aan kunnen werken. Alle commits die hij zou toevoegen, zouden ook in de pull-aanvraag verschijnen.

Mary publiceert haar functie

Functie voor publiceren

Zodra Bill klaar is om de pull-aanvraag te accepteren, moet iemand de functie samenvoegen in het stabiele project (dit kan zowel door Bill als door Mary worden gedaan):

git checkout main
git pull
git pull origin marys-feature
git push

Dit proces leidt vaak tot een samenvoeging. Sommige ontwikkelaars vinden dit leuk omdat het een symbolische combinatie is van de functie met de rest van de codebase. Maar als je een voorliefde hebt voor een lineaire geschiedenis, is het mogelijk om de functie op het uiterste van de main te baseren voordat de samenvoeging wordt uitgevoerd, wat leidt tot een snelle samenvoeging.

Sommige GUI's automatiseren het proces voor acceptatie van pull-aanvragen door al deze opdrachten uit te voeren door op de knop Accepteren te klikken. Als dat bij jou niet het geval is, zou het in ieder geval de pull-aanvraag automatisch moeten kunnen sluiten wanneer de functie-branch wordt samengevoegd tot main.

Ondertussen doet John precies hetzelfde.

Terwijl Mary en Bill bezig zijn met marys-feature en erover praten in haar pull-aanvraag, doet John precies hetzelfde met zijn eigen functie-branch. Door functies in verschillende branches te isoleren, kan iedereen onafhankelijk werken, maar het is nog steeds belangrijk om wijzigingen met andere ontwikkelaars te delen als dat nodig is.

Samenvatting


In dit document hebben we de Git-workflow voor functie-branch besproken. Deze workflow helpt bij het organiseren en volgen van branches die gericht zijn op functiesets in het bedrijfsdomein. Andere Git-workflows, zoals de Git-vertakkingsworkflow en de Gitflow-workflow, zijn gericht op repo en kunnen gebruikmaken van de Git-workflow voor functie-branches om hun branching-modellen te beheren. In dit document zag je een codevoorbeeld op hoog niveau en een fictief voorbeeld van de implementatie van de Git functie-branch. Een paar belangrijke verbanden die je moet leggen met de workflow voor functie-branches zijn:

  • is gericht op vertakkingspatronen
  • kan gebruikt worden door andere op repo georiënteerde workflows
  • bevordert de samenwerking met teamleden door middel van pull-aanvragen en het samenvoegen van beoordelingen

Het gebruik van git rebase tijdens de revisie en samenvoeging van een functie-branch zorgt voor een samenhangende Git-geschiedenis van samenvoegingen van functies. Een model voor functie-branches is een geweldige tool om samenwerking binnen een teamomgeving te bevorderen.

Klik verder in de Git-workflows en lees onze uitgebreide handleiding over de Gitflow-workflow.


Deel dit artikel
Volgend onderwerp

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Mensen die samenwerken met een muur vol tools

Bitbucket-blog

Toelichting DevOps

DevOps-leertraject

Demo Den Feature-demo's met Atlassian-experts

Hoe Bitbucket Cloud werkt met Atlassian Open DevOps

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up