Skip to content
This repository has been archived by the owner on Sep 14, 2022. It is now read-only.

Latest commit

 

History

History
328 lines (217 loc) · 10.8 KB

README.md

File metadata and controls

328 lines (217 loc) · 10.8 KB

In deze tutorial leer je de basisprincipes van het versiecontrolesysteem git kennen.

Inhoudstabel

Voorkennis

Referentiemateriaal

Een uitgebreidere versie van deze tutorial kan je terugvinden in het Git Book.

Video

Een videoversie van deze tutorial is beschikbaar:

Bekijk de video

Tutorial

Introductie

Git is een Version Control System. Een Git-repository is een bestandensysteem waarin verschillende versies van éénzelfde bestand bewaard kan worden.

Bijna alle programmeerprojecten ter wereld maken gebruik van Git. Met Git kan je:

  • eenvoudig bestanden delen;
  • op meerdere machines aan hetzelfde project werken;
  • met meerdere mensen aan hetzelfde project werken;
  • oude versies van bestanden terug ophalen;
  • grote wijzigingen maken in aparte vertakkingen van het project zonder daarbij het hoofdproject te moeten wijzigien;
  • bijhouden hoeveel regels code elk lid van een team bijgedragen heeft;
  • nog veel meer.

Git is een technologie die je best vroeg in je opleiding onder de knie krijgt. Het is dus een sterke aanrader deze tutorial te volgen.

Repository aanmaken

GitHub

GitHub is een website van Microsoft waar Git-repositories gratis gehost kunnen worden. Je kan een repository laten aanmaken op de server van GitHub en deze eenvoudig delen met anderen.

Het is ook mogelijk je eigen GitHub-repository te hosten op een eigen server. Dat zal niet behandeld worden in deze tutorial.

Als eerste stap van deze tutorial maken we een repository aan op GitHub:

  • Maak een account op GitHub.
  • Druk rechtsboven op het +-icoon en klik op New repository.
  • Geef de repository de naam oefenrepo
  • Kies zelf of je de repository publiek of privaat maakt.
  • Vink de optie Add a README file aan
  • Maak de repository aan

Vervolgens kom je op de pagina van de repository terecht. Op deze pagina zie je een overzicht van het bestandensysteem en wordt de README file weergegeven.

Onze repository heeft een URL waarmee we deze kunnen importeren op onze eigen machine.

  • Druk op de groene knop met Code rechtsboven op de pagina van de repository
  • Selecteer HTTPS en kopieer de link in het vakje. Deze heeft typisch het formaat https://github.com/<gebruikersnaam>/<repository-naam>.git.

Git configureren

De allereerste keer dat je git gebruikt moet je je naam en e-mailadres instellen.

  • Open een terminal
  • Voer onderstaande commando's uit. Vervang Jan Timmersmans door je eigen naam en het e-mailadres door je eigen e-mail.
git config --global user.name "Jan Timmermans"
git config --global user.email "[email protected]"

Repository clonen

Met behulp van git clone kunnen we een lokale kopie maken van onze repository. Vervolgens kunnen we bestanden toevoegen, wijzigen of verwijderen.

  • Open een terminal

  • Maak een lokale kopie van je repository met git clone. Gebruik hiervoor je eigen URL.

    git clone https://github.com/<gebruikersnaam>/oefenrepo.git

Het uitvoeren van dit commando maakt een nieuwe folder aan met de naam van de repository, in dit geval oefenrepo.

  • Navigeer naar de repository-folder met cd.

    cd oefenrepo

Alle volgende stappen in de tutorial nemen aan dat de working directory van je terminal de folder van je repository is. Dit kan je verifiëren met met het commando pwd

Bestand wijzigen

  • Open het bestand README.md in een editor naar keuze.

    nano README.md
  • Bewerk de README met een boodschap naar keuze.

We hebben een bestand in onze repository gewijzigd. Deze wijzigingen zijn enkel doorgevoerd op onze eigen machine. Wanneer we tevreden zijn met onze aanpassingen moeten we Git de nieuwe versie van het bestand laten bewaren.

  • Voer het commando git add <filename> uit om aan Git te laten weten voor welk bestand we wijzigingen willen bewaren.

    git add README.md
  • Voer het commando git commit -m "<boodschap>" uit om de wijzigingen te bewaren. In de boodschap beschrijf je welke wijzigingen er zijn doorgevoerd.

    git commit -m "Bericht aan README toegevoegd."

Op dit moment zijn de wijzigingen correct bewaard in je lokale repository. Wanneer je naar je repository-pagina surft zal je echter merken dat daar nog steeds de oude versie van het README-bestand staat.

  • Gebruik git push om de lokale wijzigingen naar de remote repository pushen.

    git push origin main

Ververs nu de webpagina van je repository op GitHub. De nieuwe inhoud van je README-bestand zou daar nu ook zichtbaar moeten zijn.

Bestand toevoegen

Nieuwe bestanden toevoegen aan een repository gebeurt op dezelfde wijze als het bewerken van bestaande bestanden.

  • Maak twee nieuwe lege bestanden aan

    touch file1
    touch file2
  • Voer het commando git status uit. Git toont je dat file1 en file2 nog niet getracked worden.

    git status
  • Track deze files in je repository met git add

    git add file1 file2
  • Bewaar de nieuwe bestanden in de repository met git commit.

    git commit -m "Twee lege bestanden toegevoegd"
  • Gebruik git push om de remote repository te synchroniseren met je lokale repository

    git push origin main

Wijzigingen van anderen ophalen

In een repository met meerdere gebruikers kan je de wijzigingen die anderen gepushet hebben opvragen met behulp van het commando git pull.

In deze tutorial werk je alleen, dus zal het onderstaande commando geen effect hebben.

git pull origin main

Oude versie van bestand bekijken

Elke commit in de repository bewaart wijzigingen in één of meerdere bestanden. Elke wijziging kan ook ongedaan gemaakt worden. Een commit wordt geïdentificeerd door een unieke code van 40 karakters.

  • Bekijk met behulp van het commando git log de geschiedenis van je commits.

    git log
  • Kopieer de commit hash van de eerste commit in je repository uit de log.

  • Herstel de eerste versie van README.md met git checkout.

    git checkout <commit-hash> -- README.md
  • Verifieer dat de oude versie van README.md hersteld is door de inhoud van het bestand te bekijken

    cat README.md

Bestand herstellen

  • Gebruik git log en git checkout om de nieuwste versie van het bestand terug te herstellen. Gebruik hiervoor de hash van de nieuwste commit.

    git log
    git checkout <commit-hash> -- README.md
  • Verifieer dat de nieuwste versie van README.md hersteld is door de inhoud van het bestand te bekijken

    cat README.md

Git branch

Een git-repository is intern gestructureerd door middel van branches. Elke repository heeft een master-branch die kan beschouwd worden als de stam van je repository. Hierop vind je vaak de meest recente werkende versies van software-projecten.

Wanneer een developer een functionaliteit gaat toevoegen aan een project, maakt deze hiervoor een nieuwe tak (branch) aan. Wijzigingen op deze tak gebeuren afzonderlijk van de wijzigingen op de master.

Door gebruik te maken van een branch kan een developer code aanpassen, committen en pushen zonder bang te moeten zijn dat hij hierdoor werk van anderen stuk kan maken.

Typisch worden branches aangemaakt voor nieuwe functionaliteiten. Wanneer deze functionaliteit klaar is wordt de branch samengevoegd met de master-branch. Dit proces heet mergen.

  • Maak een branch genaamd readme-wijzigen aan met behulp van het git branch commando

    git branch readme-wijzigen
  • Switch naar de branch die je net hebt aangemaakt

    git checkout readme-wijzigen
  • Wijzig het bestand README.md naar keuze

    nano README.md
  • Commit de wijzigingen naar de huidige branch

    git add README.md
    git commit -m "README aangepast"
  • Switch terug naar de master-branch met git checkout

    git checkout main
  • Verifieer dat README.md op de main branch niet is aangepast

    cat README.md
  • Voeg readme-wijzigingen toe aan de main branch met git merge

    git merge readme-wijzigingen
  • Verifieer dat README.md op de main branch nu wel is aangepast

    cat README.md

Merge conflict

Soms gebeurt het dat meerdere ontwikkelaars op hetzelfde moment in een bestand aan het werken zijn. Neem het volgende scenario

  1. Ontwikkelaar A en B clonen een repository met bestand X
  2. Ontwikkelaar A wijzigt bestand X: X1
  3. Ontwikkelaar B wijzigt bestand X: X2
  4. Ontwikkelaar A pusht X1 naar de remote repository
  5. Ontwikkelaar B probeert X2 te pushen naar de remote repository

In stap 5 zal Git een melding geven aan ontwikkelaar B dat er een nieuwere commit van een andere ontwikkelaar aanwezig is in de remote repository. Hij kan zijn bestand niet pushen.

  1. Ontwikkelaar B voert git pull origin main uit

Git detecteert nu twee versies van bestand X: X1 en X2. In eerste instantie probeert Git deze bestanden automatisch samen te voegen. Wanneer dit niet, heb je een merge conflict.

Op dit moment maakt Git een bestand X3 aan. De plaatsen in het bestand waar Git geen automatische merge kon uitvoeren staan in X3 gemarkeerd door markers die er als volgt uitzien:

$ cat README.md
<<<<<< HEAD:README.md
Readme van ontwikkelaar B
=======
Readme van ontwikkelaar A
>>>>>> master:README.md

De bedoeling is dat ontwikkelaar B nu voor elk conflict in het bestand kiest welke versie bewaard moet worden. Dit kiest hij door de markers te verwijderen en telkens de correcte versie te kiezen. Hij zou het bestand bijvoorbeeld kunnen wijzigen naar:

$ cat README.md
Readme van ontwikkelaar A en B

Wanneer de conflicts opgelost zijn kan developer B zijn wijzigingen committen en pushen:

git commit -m "Resolved merge conflict on README"
git push origin main