Ga naar inhoud

GitLab workflow

De volgende stap om meer samen te werken in een team gaat via GitLab merge requests.

Je gaat dan het werk aan je issue continue delen, om technische feedback te krijgen en om te weten of het nog steeds in jullie main branch kan worden gemerged.

Merge requests, pull requests?

In GitLab heet deze feature een merge request. In GitHub heet het een pull request.

In de vorige git workflow (en in het eerste semester) heb je geprobeerd je lokale repo up-to-date te houden met de main branch van je team. Dat werkt het beste door vaak de main branch te pullen. Van oudsher riepen developers bij een commit op main dan ook naar elkaar: PULL! Daar komt de naam pull request vandaan.

Maar intussen is de nadruk voor het samenvoegen verschoven van lokaal naar het platform (GitLab, GitHub, etc.). Je kan daar nu regels instellen zoals een verplichte review, goed-werkende tests, en geen conflicten. Je kan er technische discussies over je code voeren. Daarom is de naam merge request intussen passender.

GitLab merge requests

In de basis ziet het hele stappenplan er hetzelfde uit als bij de vorige Git workflow.

Maar je werkt niet meer alleen met een lokale branch: je gebruikt GitLab om je lokale branch te delen met je team en om feedback te krijgen.

Start je werk

Om te beginnen haal je net als hiervoor de repository binnen met een git clone (stap 1). Je hebt dan ook een checkout van de main branch (stap 2). Vervolgens maak je een issue branch (stap 3).

Je begin aan je werk (stap 4), je maakt je eerste lokale commit (stappen 5 en 6), en je pusht je lokale branch naar GitLab (stap 7).

sequenceDiagram
    autonumber
    box Jouw Local Copy
        participant workdir as Working directory
        participant staging as Git staging area
        participant localrepo as Local repository
    end
    box GitLab server
        participant remoterepo as Repository
        participant mr as Merge Request
    end

    remoterepo ->> localrepo: git clone
    localrepo ->> workdir: checkout main branch
    activate workdir

    workdir ->> localrepo: start issue branch

      workdir ->> workdir: update source code
      workdir ->> staging: git add ...
      activate staging
      staging ->> localrepo: git commit ...
      deactivate staging
      localrepo ->> remoterepo: git push

    deactivate workdir

Open een merge request

Zodra GitLab ziet dat je jouw aparte issue branch hebt gepusht, krijg je de optie om een merge request te starten.

Info

Normaal gesproken gebruik je een merge request om jouw branch met de main branch samen te voegen, maar je kan in principe van elke branch naar elke andere branch mergen.

Als je een merge request opent, gaat GitLab je helpen:

  • Elke keer dat je een push naar GitLab doet, kijkt het systeem of jouw wijzigingen zonder conflict in de main branch kunnen worden gemerged. Je weet dus meteen of er mogelijk een merge conflict gaat zijn.

  • Je kan met het team over de wijzigingen discussiëren, en gedetailleerde technische feedback geven. Je hebt dan twee plekken voor discussie over een issue:

    • De issue is een goeie plek om het te hebben over wat gaan we bouwen: functionele eisen, (un)happy paths, en testen. Die wil je ook met de PO bespreken.
    • De merge request is een goeie plek om het te hebben over hoe gaan we het bouwen: technische feedback, code review, check op de Definition of Done wat betreft code style, patterns, naming conventions, etc. Die wil je met de technical lead bespreken.
  • GitLab kan ook regels afdwingen: bijvoorbeeld dat iemand anders een code review moet hebben gedaan en akkoord hebben gegeven, voor je naar de main branch kan mergen.

In de merge request hieronder kan je onderaan het groene vinkje zien dat aangeeft dat deze branch zonder conflicten met main gemerged kan worden.

alt text

Je bouwt je issue af

Vervolgens kan je in een loop iteratief werken aan je issue, over meerdere dagen.

  • Je werkt je code bij (stap 1). Als een deel af is, voeg je dat via git add (stap 2) en een git commit (stap 3) toe aan je lokale repo.

  • Je pusht je werk naar GitLab (stap 4). GitLab werkt automatisch je merge request bij (stap 5).

  • Je teamgenoten kunnen de wijzigingen bekijken, en gedetailleerde feedback op je code geven (stap 6).

Commit elke dag

Het is verstandig regelmatig code te committen en te pushen. Je weet dan snel of er merge conflicts ontstaan, en je teamgenoten blijven op de hoogte waar je mee bezig bent.

Loop je vast in een probleem, dan kan je snel hulp inroepen. (Bijvoorbeeld bij de Daily Standup.)

sequenceDiagram
    autonumber
    box Jouw Local Copy
        participant workdir as Working directory
        participant staging as Git staging area
        participant localrepo as Local repository
    end
    box GitLab server
        participant remoterepo as Repository
        participant mr as Merge Request
    end

    activate workdir
    loop werken aan je issue
      workdir ->> workdir: update source code
      workdir ->> staging: git add ...
      activate staging
      staging ->> localrepo: git commit ...
      deactivate staging
      localrepo ->> remoterepo: git push

      remoterepo ->> mr: update<br>merge request
      activate mr
      mr ->> mr: review
    end
    deactivate workdir
    deactivate mr

Merge conflicten?

Je kan ook meteen zien of je code nog steeds met de main branch te mergen is. Daardoor weet je snel waar je merge conflicts zult hebben, en kan je die oplossen voordat ze groter worden.

  • Je gaat de merge conflicts in je eigen branch fixen (stap 1), en voegt je verbeteringen via git add, commit, en push (2, 3, en 4) toe aan de repository op GitLab. GitLab zal dan gaan kijken of er nog steeds merge conflicten zijn (stap 5).
sequenceDiagram
    autonumber
    box Jouw Local Copy
        participant workdir as Working directory
        participant staging as Git staging area
        participant localrepo as Local repository
    end
    box GitLab server
        participant remoterepo as Repository
        participant mr as Merge Request
    end

    activate workdir
    loop merge conflicts?
      workdir ->> workdir: fix conflicts
      workdir ->> staging: git add ...
      activate staging
      staging ->> localrepo: git commit ...
      deactivate staging
      localrepo ->> remoterepo: git push
      remoterepo ->> mr: update<br>merge request
    end
    deactivate workdir

Afronding

Uiteindelijk is al het werk aan je issue af, en kan het werk aan de main branch worden toegevoegd.

  • Je komt uit bij een "DoD review" (stap 1). Als alles echt af is volgens jullie Definition of Done, kan je de merge request afronden (stap 2).

alt text

  • Je kan vervolgens op jouw machine weer een checkout doen van main (stap 3). Je issue branch is niet meer nodig, dus die kan je eventueel weggooien.

  • Met git pull haal je de nieuwe versie van main binnen (stap 4), en wordt je lokale werk-directory bijgewerkt (stap 5).

sequenceDiagram
    autonumber
    box Jouw Local Copy
        participant workdir as Working directory
        participant staging as Git staging area
        participant localrepo as Local repository
    end
    box GitLab server
        participant remoterepo as Repository
        participant mr as Merge Request
    end

    activate mr

    mr ->> mr: DoD review
    mr ->> remoterepo: complete<br>merge request

    deactivate mr

    localrepo ->> workdir: checkout main branch
    activate workdir
    remoterepo ->> localrepo: git pull
    localrepo ->> workdir: git pull
    deactivate workdir

Je bent nu klaar om aan een volgende issue te beginnen.

Opdrachten

Voor deze opdracht ga je met behulp van een issue branch een of meer nieuwe files toevoegen aan de repository. Je werkt samen in je team. Voer de volgende stappen uit:

  1. Ga verder met de repository voor deze workshop.

  2. Begin een eigen issue branch (bijvoorbeeld met je eigen naam erin).

  3. Maak weer een nieuwe html file

    a. Gebruik onze file name-conventie voor deze html file

    b. Zorg dat deze file jouw naam afdrukt

  4. Voer de eerste stappen uit van de GitLab workflow: je pusht jouw issue branch naar Gitlab, en je start een merge request.

  5. Je kijkt bij elkaars merge request, en geeft bijvoorbeeld commentaar op specifieke regels in een file.

  6. Je rond de merge request af.