H8: Git, les 1: Branching & Merging

Git

Branching
Merging
1 / 32
suivant
Slide 1: Diapositive
ICTMBOStudiejaar 3

Cette leçon contient 32 diapositives, avec quiz interactifs et diapositives de texte.

time-iconLa durée de la leçon est: 90 min

Éléments de cette leçon

Git

Branching
Merging

Slide 1 - Diapositive

Als iemand de dark souls referentie snapt krijgen ze meteen een studiepunt en een aai over hun bol.
Het antwoord op al je vragen:

Wat is een commit ook alweer?
Hoe werk je in een branch?
Hoe merge je een branch?
Hoe los je een merge conflict op?

Slide 2 - Diapositive

Cet élément n'a pas d'instructions

Slide 3 - Diapositive

Cet élément n'a pas d'instructions

Git commando's

Slide 4 - Carte mentale

Zorg in ieder geval dat pull push commit erop staan, anders is er een probleem.

Doe ook eens
  • add
  • clone
  • rm
  • checkout
  • branch
  • log
  • show
  • cherry-pick
  • init
  • status
  • diff
  • restore
  • reset
  • remote
  • ....
  • add
  • commit
  • push
  • pull
  • status
  • fetch
  • log
  • show
  • checkout
  • reset
  • stash
  • diff
  • merge
  • rm
  • cherry-pick
  • blame
  • bisect
  • revert

Slide 5 - Diapositive

Raad ze eens aan wat documentatie te lezen.
git subcommando --help
https://git-scm.com/docs/git#_high_level_commands_porcelain
Git op de commandline
  • GitHub Desktop
  • VScode (geïntegreerd)
  • Noem het maar op...
Handige tools, maar die laten we even achter ons voor deze lessen.
Direct git op de commandline.

Slide 6 - Diapositive

Cet élément n'a pas d'instructions

Git op de commandline
Grote kans dat het al geïnstalleerd staat, test het met het onderstaande commando:

Slide 7 - Diapositive

Zorgen dat alle studenten somehow someway ergens toegang hebben tot een git commandline.

Geen GUI tools!!!
Commit
Een commit is het verschil vanaf de vorige commit.
  • Regels toegevoegd
  • Regels verwijderd

Slide 8 - Diapositive

Cet élément n'a pas d'instructions

Commit
Een commit bouwt dus voort op de commits die er eerder zijn geweest! Elke commit is een verandering ten opzichte van een eerdere situatie.

Slide 9 - Diapositive

Cet élément n'a pas d'instructions

Diff is het commando voor "difference"
Erachter de filename die is aangepast.
"a" en "b" zijn in dit geval de twee commits die met elkaar zijn vergeleken.
De index-regel geeft een indicatie van een intern file ID wat is aangepast. Deze is niet heel belangrijk en kan je voor nu negeren.
Deze regel geeft aan hoe veel regels er in deze diff zitten, los van hoe veel regels zijn verwijderd of toegevoegd.

-41 betekent vanaf regel 41 in de oude situatie
,5 betekent dat er vijf regels in de diff zitten vooraf.

+41 betekent vanaf regel 41 in de nieuwe situatie
,6 betekent dat er zes regels in de nieuwe situatie zitten
Verwijderde regel
Toegevoegde regels

Slide 10 - Question de remorquage

Dit is gewoon even een willekeurige voorbeeld diff uit een repository.
Wat is nu de inhoud
van tekst.txt na deze
commit?
A
U C F K
B
Unicorn Foxtrot Kilo
C
Unicorn Charlie Foxtrot Kilo
D
Unicorn C Foxtrot Kilo

Slide 11 - Quiz

U verwijderd
Unicorn erbij
C blijft staan
F eraf
K eraf
Foxtrox erbij
Kilo erbij
Wat was de inhoud
van tekst.txt vóór
deze commit?
A
U C F K
B
Unicorn Foxtrot Kilo
C
Unicorn Charlie Foxtrot Kilo
D
Unicorn C Foxtrot Kilo

Slide 12 - Quiz

Cet élément n'a pas d'instructions

Doe mee!
Maak een nieuwe map aan en open je VS code daar.
Je kan alvast een bestand aanmaken (bestand.txt)
Gebruik de terminal voor alles. Niet de geïntegreerde VCS tools!

Slide 13 - Diapositive

Cet élément n'a pas d'instructions

Doe mee!
Nieuwe repo


git init
> maak bestand.txt (3 regels)
git add bestand.txt
git commit -m "initial"
Het is mogelijk dat je bij het maken van een commit een waarschuwing krijgt over je identiteit. Voer dan eerst de commando's uit die in de waarschuwing staan:
git config --global user.email "mijn@email.com"
git config --global user.name "Mijn Naam"

Slide 14 - Diapositive

De vim en cat tussendoor in het voorbeeld zijn verwarrend voor de student, dus moet even verhelderd worden; Dat zijn gewoon commando's tussendoor.

Zorg er ook voor dat ze de commit met -m doen, anders krijgen ze ruzie met een editor die ze niet kennen.
Oude situatie: vanaf regel 0 tonen we 0 regels. (leeg bestand, of bestond niet)
Nieuwe situatie: Vanaf regel 1 tonen we 3 regels.
/dev/null is een indicatie van iets dat niet bestaat.
Op een Linux systeem is /dev/null een "bestand" wat leeg is.
Auteur, datum, commit message
git show kun je gebruiken om een git object te laten zien.
Als je alleen 'git show' aanroept laat hij standaard je laatste commit zien, handig om even te kijken wat de laatste wijziging was!

Slide 15 - Diapositive

Puur ter illustratie. Belangrijk dat ze de author informatie herkennen en dat ze de diff zien.
Screenshot van jouw
git show

Slide 16 - Question ouverte

Dit is het moment om even iedereen op dezelfde lijn te krijgen. Iedereen moet nu een repo hebben met één commit die één file aanmaakt.
Doe mee!Branching


git checkout -b mijnbranch
> pas middelste regel aan
git add bestand.txt
git commit -m "update"

Slide 17 - Diapositive

Middelste regel aanpassen is een belangrijk detail hier, want daar gaan we het conflict forceren.

add . mag ook

Slide 18 - Diapositive

Cet élément n'a pas d'instructions

Screenshot van jouw
git show

Slide 19 - Question ouverte

Even zorgen dat iedereen weer op dezelfde lijn zit. Controleer dat de commit in een branch zit!
Doe mee!
git checkout master
  • Terug naar master.
  • Commit die we net hebben gemaakt zit in de branch van net.
  • Nu in master is er geen wijziging!
  • We kunnen hier verder werken en later de commit uit de andere branch invoegen.

Slide 20 - Diapositive

Cet élément n'a pas d'instructions

Doe mee!
We maken nu een commit aan in hetzelfde bestand en op dezelfde regel die we net hadden.

Slide 21 - Diapositive

Dit is ook weer een belangrijke stap. Terug in de main moet er een extra wijziging worden gedaan aan dezelfde regel. En die moet ook in een commit zitten.
Merging
We willen de changes uit een branch "samenvoegen" met onze main branch. Dit doe je door naar de target branch te switchen (met checkout) en een merge te verzoeken van de source branch.

Slide 22 - Diapositive

Benadruk dat merge dus naar jou toe is.
Situatie nu
Een paard kan soms fietsen
Een paard kan wel fietsen
commit 433f7a09f516f35c9047bf23da40851b12004b31
Author: Mark Hoekveen <mark@hoekveen.net>
Date:   Mon Oct 7 11:13:13 2024 +0200

    initial commit

diff --git a/bestand.txt b/bestand.txt
new file mode 100644
index 0000000..7b1461c
--- /dev/null
+++ b/bestand.txt
@@ -0,0 +1,3 @@
+Hello world!
+Een paard kan niet fietsen.
+Hallo wereld!

Slide 23 - Diapositive

Cet élément n'a pas d'instructions

git merge mijnbranch

Wat is dan het na de
merge het resultaat?
A
"Paard kan wel fietsen" Die was namelijk eerder
B
"Paard kan soms fietsen" Die was namelijk het laatst
C
"Paard kan soms wel fietsen" Beide commits samen.
D
Merge conflict

Slide 24 - Quiz

Als ze mee hebben gedaan weten ze het antwoord.

Slide 25 - Diapositive

Geschokte poes
Merge conflict
Git weet niet hoe dit op te lossen.
Target en source branch hebben andere meningen over die regel
Dus: gooi het probleem terug naar gebruiker

Slide 26 - Diapositive

Motivatie voor waarom conflict ontstaat
Merge conflict
<<<<<<< HEAD
=======
>>>>>>> branch

HEAD is in je target branch.
"branch" is je source branch.
======= is de splitsregel

Slide 27 - Diapositive

Uitleg syntax
Merge conflict

Handmatig fixen, zorgen dat één van de twee opties hier in komt, of dat je zelf beide wijzigingen samenvoegt.

Slide 28 - Diapositive

Plan van aanpak
Merge conflict
Haal de <<<, >>> en === weg.
Zet het bestand gewoon goed zoals jij wilt dat het staat.
Git add
Git commit


Bijvoorbeeld:
Een paard kan soms wel fietsen

Slide 29 - Diapositive

Instructies om het in dit specifieke geval te fixen.
Dit zou ook het moment zijn waarop je bij de studenten gaat kijken hoe het is gegaan bij hun merge.
Merging commits
Nu staan de paardstatus commits van beide branches in je log?

De merge commit bouwt voort op alle commits die eraan vooraf zijn gegaan!

Slide 30 - Diapositive

Uitleg over hoe merge commits afhankelijk zijn van alle voorgaande commits uit alle voorgaande branches.
Situatie nu

Slide 31 - Diapositive

Schematische weergave.
Benadruk dat de merge commit dus afhankelijk is van zowel de commits uit master als de commits uit de branch.
Weekcheck, twee conflicten oplossen:

  1. https://github.com/curio-lesmateriaal/conflict-rhapsody
  2. https://github.com/oakmac/merge-conflict-practice


Maak een document:
  •  Laat elke stap zien met een screenshot
  • Laat zien wat je eindresultaat is en wat de diff is van je merge commit
Lever in op itslearning.

Slide 32 - Diapositive

Cet élément n'a pas d'instructions