In de voorgaande twee tutorials over Werken met git heb je de basis geleerd van het bijhouden van wijzigingen en het werken in branches.
Tot dusver heb je lokaal op je eigen computer gewerkt. En alleen al voor
die situatie is Git erg handig, omdat je met een gerust hart in
branches kunt experimenteren. Pakt het toch niet goed uit, dan ga je
simpelweg terug naar je hoofdlijn en begin je opnieuw.
Maar Git is ook een krachtig hulpmiddel als je met meerdere personen aan
een project werkt.
Iedereen een eigen kopie
Kenmerkend voor Git is, is dat iedereen in een eigen kopie van het
project werkt. In voorgaande paragraaf heb je een project gemaakt, en
daar een repository aangemaakt. Werk je met meerder personen samen,
dan zal er ook een project zijn met een repository, die ergens
centraal staat. Ga jij nu werken aan dit project, dan haal je een kopie
op van de repository waarin je gaat werken. Dit betekent dat je de
complete geschiedenis en alle branches tot je beschikking hebt.
Je kunt nu lokaal werken aan het project, waarschijnlijk in een eigen
branch. Ben je klaar, dan kun je alle wijzigingen naar de centrale
repository sturen (pushen), zodat die weer up-to-date is met jouw
wijzigingen. Alle collega's kunnen vervolgens alle wijzigingen weer naar
hun eigen lokale repository halen (pullen), en hebben zo ook jouw
wijzigingen beschikbaar.
Op deze manier kan iedereen lokaal - offline zelfs - werken, en toch de
laatste status van het project beschikbaar hebben.
Github
Om op deze manier te werken heb je wel een plaats nodig om een centrale
repository te beheren. In de rest van deze paragraaf zijn de
voorbeelden met Github, één van de grotere spelers op dit gebied. Wil je
meedoen met de voorbeelden, dan is het leuk om ook een eigen account aan
te maken. Zie daarvoor de volgende link: Een account aanmaken op Github
Daarnaast moet je kunnen communiceren met Github zonder steeds te hoeven
inloggen. Installeer daarom Git Credential Manager (GCM) en stel Git in
om dat te gebruiken. GCM installeren
Als je nu de eerste keer met een remote werkt (zie hierna), dan zal
GCM je vragen om in je Github-account in te loggen via de browser. Je
gegevens worden veilig opgeslagen, en vanaf nu kun je zonder steeds in
te loggen communiceren met Github.
Je kunt ook op andere manieren communiceren met Github. Een veelgebruikte manier is via SSH. Zie daarvoor de documentatie van Github.
Een repository maken
Maak nu eerst een repository aan op Github. Ga vanaf het beginscherm
van Github naar Repositories en klik rechtsbovenin op de groene knop
New. Je kunt ook direct naar de volgende link gaan: Nieuwe repository maken
Vul de gegevens in zoals op onderstaande afbeelding:
Je mag de repository ook op private zetten, dan kan alleen jij
erbij.
Remote toevoegen
In het volgende scherm kopieer je nu de URL van de repository. Let
erop dat je de HTTPS-versie gebruikt:
Werk je met SSH, gebruik dan de SSH-url!
In je terminal in je project voeg je deze URL vervolgens toe met het
git remote add commando. Hiermee voeg je een remote toe, ofwel
een verwijzing naar de repository die je zojuist hebt aangemaakt. Deze
remote geef je een naam. Het is vrij gebruikelijk deze origin te
noemen, om aan te duiden dat het de centrale repository betreft.
Wijzigingen opsturen
Vervolgens kun je een branch naar de centrale repository sturen. Dit
doe je met git push <remote-naam> <branch-naam>. Voeg -u toe
om later wijzigingen eenvoudiger naar je toe te kunnen halen.
Ga nu naar het project op Github, ververs de pagina en je zult
(ongeveer) het volgende zien:
Maak nu eens een wijziging in README.md, voeg dit toe aan een
commit en bekijk dan git status.
Je ziet "Your branch is ahead of 'origin/main' by 1 commit.", ofwel:
Git weet nu dat je één extra commit hebt ten opzichte van de main
branch in de originrepository. Met git push kun je deze
commit weer naar origin sturen.
Wijzigingen ophalen
Na het pushen naar de centrale repository zijn alle wijzigingen
beschikbaar voor iedereen die met de repository werkt. Om de
veranderingen op te halen, moeten deze eerst wel binnengehaald worden.
Dit kan op twee manieren. Om dit te ervaren, kun je via Github eerst
zelf een wijziging aanbrengen, zodat je deze verandering naar je
computer kunt halen. Klik hiervoor in Github op de startpagina van je
repository op het potloodje om README.md te wijzigen.
Vervolgens kun je een wijziging aanbrengen en dan op de groen knop
Commit changes klikken. Klik in het vervolgscherm weer op de groene
knop.
Er zijn nu wijzigingen aangebracht in de centrale repository. Dit heb
je zelf gedaan, maar het had net zo goed een collega kunnen zijn die
veranderingen van haar repository naar origin heeft gestuurd. In
beide gevallen geldt nu: jij hebt de wijzigingen nog niet op je
computer. Zoals gezegd kan dat op twee manieren.
Met git fetch haal je op wat er veranderd is, maar verandert er
niets aan je werkomgeving. Je lokale omgeving is zo weer op de hoogte
van de status van origin. Om de veranderingen ook in je eigen
omgeving te voegen, voer je zelf git merge uit. Dit kan met git
merge main origin/main, waarmee je zegt dat je de veranderingen van de
origin/mainbranch in je eigen mainbranch wilt voegen.
Omdat je al op main werkt, kun je ook simpelweg git merge
opgeven, Git zal dan automatisch de branch met dezelfde naam van
originmergen.
Met git fetch weet je wat er veranderd is, maar voeg je de
veranderingen zelf samen. Dit is een veilige manier van werken, omdat er
niets in jouw werkomgeving veranderd zonder dat jij dat wilt.
Met de tweede manier - git pull - is dit niet het geval. Met git
pull voer je eigenlijk git fetch en git merge in één stap uit.
Klonen
Een laatste commando om te leren is git clone. Tot nu toe heb je in
een repository gewerkt die je zelf hebt gemaakt. Het was al aanwezig
op je computer, vervolgens heb je een centrale repository gemaakt en
deze twee gekoppeld.
Als er echter al een centrale repository is, dan kun je git clone
gebruiken om deze naar je eigen computer te halen. Er wordt dan
automatisch een remote ingesteld met de naam origin, iets dat je
nu handmatig hebt gedaan.
Je kunt je project op je laptop weggooien (nadat je alles naar
origin hebt gestuurd!) en met git clone het project opnieuw
binnenhalen.
Haal eerst in Github weer de URL op. Ga naar de hoofdpagina van je
repository en klik op de groene knop code. Selecteer vervolgens
HTTPS en kopieer de URL.
Vervolgens ga je naar de map waarin je het project wilt klonen en voer
je git clone uit.
Zoals je ziet, is het README.md bestand nu aanwezig. Voer ook maar
eens git remote uit en zie dat er een remote is met de naam
origin.
Conclusie
Je hebt in deze reeks de basis geleerd van het werken met Git. Ga je met een ander
VCS aan de slag, dan zal de manier van werken soortgelijk zijn, alhoewel
de commando's anders zullen zijn. Wat je in deze reeks hebt gezien is
het topje van de ijsberg van wat Git is en kan. Het is voldoende om aan
de slag te gaan, zeker in je eigen projecten. Kom je in een team te
werken dat met Git werkt, dan begrijp je de basis. Van hen zul je leren
wat hun manier van werken met Git is.
Wil je meer leren, dan is het aan te raden het boek op de website van
Git te lezen. Het is zowel in het Engels als het Nederlands beschikbaar.
Online kun je het gratis lezen, daarnaast is het ook te koop als je
liever uit een boek leest. Op de website kun je ook een PDF of epub
versie downloaden (gratis).
Verder heb je Github gebruikt om een centrale repository aan te maken.
Maar Github is veel meer dan alleen een opslagplaats. Je kunt er in
samenwerken aan projecten, bugs rapporteren, wiki's aanmaken en nog
veel meer. Het loont de moeite om eens rond te kijken naar openbare
projecten op Github, er zijn talloze open source projecten te vinden.
Bekijk bijvoorbeeld de broncode en het project van Python.
Github is zeker niet de enige plaats om centrale repositories aan te maken. Alternatieven zijn bijvoorbeeld Gitlab en BitBucket.
Over de auteur
Erwin Matijsen
Erwin is de oprichter van python-cursus.nl. In allerlei rollen heeft hij Python ingezet, van het eenvoudiger maken van zijn werk tot het opleveren van complete (web)applicaties. Met vrouw en kinderen woont hij in Havelte (Drenthe), midden in de prachtige natuur. Daar wandelt hij graag, zeker ook omdat de beste ingevingen tijdens een wandeling - weg van de computer - lijken te komen.
Vragen, opmerkingen?
Heb je vragen, opmerkingen, suggesties of tips naar aanleiding van deze blog?
Neem dan contact met ons op, of laat het weten via
Mastodon of
LinkedIN.