Cursus
Stel je voor dat je een boek schrijft en nieuwe ideeën wilt uitproberen zonder het origineel in de war te brengen. Je zou voor elk idee een nieuw notitieboek kunnen beginnen, zodat je concepten gescheiden blijven.
Git, een versiebeheersysteem, laat softwareontwikkelaars hetzelfde doen met code via "branches". Elke branch is als een apart ontwikkelpad, waardoor je wijzigingen kunt verkennen zonder de hoofdcodebasis te beïnvloeden.

In dit artikel laat ik je zien hoe je git clone gebruikt, met de focus op het klonen van specifieke branches. Wil je meer leren over Git, dan raad ik deze cursus Introduction to Git aan.
Laten we beginnen met het korte antwoord voor wie haast heeft. Daarna gaan we dieper op de details in.
Kort antwoord: hoe kloon je een specifieke branch
Om een specifieke branch uit een git-repository te klonen, gebruik je het commando:
git clone --single-branch --branch <branch_name> <repository_url>
Vervang <branch_name> door de naam van de gewenste branch en <repository_url> door de URL van de repository. Dit commando maakt een lokale kopie van de opgegeven branch, zodat je meteen gericht op die branch kunt ontwikkelen.
Voorbeeld
In dit artikel gebruiken we dit repository. Je kunt het gebruiken om de commando's die je leert op je eigen machine uit te proberen. De repository bevat drie branches:
main: De standaardbranch met twee tekstbestanden.add-new-file: Een branch waarin een derde bestand is toegevoegd.modify-file: Een branch waarin het tweede bestand is aangepast.
Zo kunnen we de branch add-new-file klonen:
git clone --single-branch --branch add-new-file https://github.com/fran-aubry/git-clone-example.git
Wat is git clone?
Standaard is git clone bedoeld om de volledige repository naar een nieuwe map op je lokale machine te kopiëren, waarbij alle branches worden gekloond. Dit is de syntaxis:
git clone <repository_url>
Om de voorbeeldrepository te klonen, kunnen we het volgende doen:
git clone https://github.com/fran-aubry/git-clone-example.git
Na het uitvoeren van dit commando worden alle branches naar je lokale machine gekopieerd. Alleen de bestanden van één branch zijn echter tegelijk zichtbaar: de checked-out branch. Na het klonen van een repository wordt de standaardbranch (meestal main of master genoemd) uitgecheckt.

Branches wisselen
Na een volledige clone kunnen we naar de gewenste branch wisselen (checkout) met het git checkout-commando. Om bijvoorbeeld de branch modify-file uit te checken, doen we het volgende:
git checkout modify-file

Cloning-diepte
Wanneer je met git werkt, worden wijzigingen in een branch opgeslagen door ze te committen met het commando git commit. Elke commit creëert een nieuwe staat van die branch, waar je later indien nodig naar kunt terugkeren. Zie elke commit als een snapshot; git houdt al die snapshots bij. Je kunt een branch op elk moment naar een van deze snapshots terugzetten.
Het commando git clone downloadt, als het zonder opties wordt gebruikt, elke commit van elke branch naar je lokale machine. Afhankelijk van de projectgrootte kan dit veel lokale opslagruimte innemen. Als je weet dat je niet de volledige geschiedenis nodig hebt, kun je de parameter --depth gebruiken om aan te geven hoeveel commits (of snapshots) je wilt klonen.
Om de main-branch te klonen en alleen de meest recente commit te laden, gebruik je het volgende commando:
git clone --depth=1 https://github.com/fran-aubry/git-clone-example.git
Een specifieke branch klonen
We hebben geleerd hoe je een repository kloont met git clone. Standaard kloont dit commando alles naar je lokale machine. Vaak wil je echter alleen aan een specifieke branch werken, dus is het efficiënter om alleen die branch te klonen. Dit bespaart schijfruimte en je kunt meteen aan de slag zonder na het klonen van branch te hoeven wisselen.
In de boekanalogie: stel dat je wordt toegewezen om het tweede hoofdstuk te herschrijven. In dat geval kloon je alleen de branch waarin deze taak wordt uitgevoerd; het is niet nodig toegang te hebben tot branches die horen bij de revisie van andere hoofdstukken.
Je kunt Git opdracht geven om slechts één branch te klonen door de argumenten --single-branch en --branch te gebruiken, gevolgd door de naam van de branch:
git clone --single-branch --branch <branch_name> <repository_url>
Laten we het commando uitsplitsen:
git clone: Het basis-commando om een repository van een externe bron naar je lokale machine te kopiëren.
--single-branch: Deze optie vertelt Git om slechts één branch te klonen. Als je geen branch specificeert, wordt de standaardbranch gekloond.
--branch <branch_name>: Hiermee geef je de branch op die je wilt klonen. De <branch_name> is de naam van de branch die je wilt klonen.<repository_url>: Dit is de URL van de repository.
Als je bijvoorbeeld alleen de branch modify-file uit onze repository wilt klonen, kunnen we het volgende doen:
git clone --single-branch --branch add-new-file https://github.com/fran-aubry/git-clone-example.git
Werken met een gekloonde branch
Als je aan een branch werkt, zijn er drie essentiële handelingen die je moet doen:
- Je huidige werk opslaan door een snapshot van de huidige staat te maken.
- Je wijzigingen uploaden zodat iedereen er toegang toe heeft.
- Wijzigingen van anderen downloaden en met die van jou samenvoegen.
Je wijzigingen opslaan met git commit
In Git heet je werk opslaan een commit maken. Dit proces maakt een snapshot van de huidige staat van de branch waaraan je werkt.
De staat van de branch wordt na elke commit op je lokale machine opgeslagen, zodat je tussen de verschillende voortgangsstadia kunt navigeren.

Om je wijzigingen in git te committen, gebruik je het commando git commit. Voordat je commit, moet git echter weten welke bestanden je in de commit wilt opnemen. Je geeft de te bewaren bestanden op met het commando git add. De syntaxis is als volgt:
git add <path_to_file>
In de syntaxis is <path_to_file> het pad naar het bestand dat je wilt committen. Als we bijvoorbeeld op de branch modify-file van onze voorbeeldrepository zitten en een alinea hebben toegevoegd aan file2.txt, dan voeg je dat bestand toe door het volgende uit te voeren:
git add file2.txt
Nadat je alle bestanden hebt toegevoegd die je in je commit wilt opnemen, kun je committen door het volgende uit te voeren:
git commit -m <message>
Hier moet het argument <message> een beknopt bericht zijn tussen dubbele aanhalingstekens, dat de wijzigingen kort beschrijft. Bijvoorbeeld:
git commit -m "Add paragraph"
Hier zijn enkele conventies voor het commitbericht. Ze zijn belangrijk om duidelijkheid en begrip te waarborgen voor iedereen die aan het project werkt:
- Gebruik de gebiedende wijs: Begin je commitbericht met een werkwoord in de gebiedende wijs (bijv. "Add", "Fix", "Update"). Schrijf bijvoorbeeld in plaats van "Added new feature" liever "Add new feature".
- Wees beknopt maar beschrijvend: Streef naar een kort bericht, idealiter onder de 50 tekens. Prioriteer echter duidelijkheid in het beschrijven van de wijzigingen. Schrijf in plaats van "Changed stuff" bijvoorbeeld "Update styling for navigation bar".
- Vermijd generieke berichten: Mijd vage berichten zoals "Fix bugs" of "Make improvements". Wees in plaats daarvan specifiek: "Fix bug in login form validation" of "Improve readability of documentation".
Je wijzigingen uploaden met git push
Wanneer je commit, maak je een snapshot van de wijzigingen op je lokale machine. Wil je dat anderen je wijzigingen kunnen zien, dan moet je ze uploaden. Dat doe je met het commando push.
De basis-syntaxis van het push-commando in Git is:
git push <remote> <branch>
Laten we het uitsplitsen:
<remote>: Dit is de naam van de externe repository waar je je wijzigingen naartoe wilt pushen. Standaard heet de externe repository na het klonen origin.<branch>: Dit is de naam van de branch waarvan je de wijzigingen naar de externe repository wilt pushen. Als je dit argument overslaat, pusht Git wijzigingen op basis van de huidige branch en de remote tracking-configuratie.
Enkele veelvoorkomende use-cases voor git push:
- Wijzigingen van de huidige branch pushen:
git push - Wijzigingen van een specifieke branch pushen:
git push origin <branch>
Wijzigingen downloaden met git pull
Git maakt het mogelijk dat grote teams gelijktijdig aan hetzelfde project werken. Wanneer collega's dezelfde branch bewerken als waar jij aan werkt, kan je lokale branch verouderd raken ten opzichte van de remote branch.
Om commits van anderen te downloaden, gebruiken we het commando git pull. De basis-syntaxis van het pull-commando in git is:
git pull <remote> <branch>
Dit doet elke parameter:
<remote>: De naam van de externe repository waarvan je wilt pullen. Standaard heet deze repository origin.<branch>: De naam van de branch waarvan je wijzigingen wilt binnenhalen. Als dit niet is opgegeven, gebruikt git de huidige branch met diens upstream-branch.
Enkele veelvoorkomende use-cases van git pull:
- Wijzigingen van de huidige branch pullen:
git pull - Wijzigingen van een specifieke branch pullen:
git pull origin <branch>
Commit-pull-push-workflow
Bij het gebruik van Git raad ik aan om vaak updates te pullen, zodat je lokale branch up-to-date blijft. Hanteer hierbij de volgende best practices:
- Pull aan het begin van je werk de nieuwste updates voor je huidige branch, zodat je op de meest recente versie werkt.
- Commit vaak, waarbij elke commit zich richt op kleine, logisch samenhangende wijzigingen.
- Pull na het aanbrengen van enkele wijzigingen en het maken van een commit opnieuw om je branch bij te werken, voor het geval iemand anders gelijktijdig updates heeft gedaan.
- Push tot slot je wijzigingen naar de externe repository.

Git-conflicten
Bij het uitvoeren van het commando git pull om wijzigingen van een externe repository te downloaden, kan het gebeuren dat een andere commit dezelfde regels heeft aangepast als jouw lokale commits. Git probeert wijzigingen automatisch te mergen en slaagt daar vaak in. Als er bijvoorbeeld wijzigingen zijn in verschillende delen van hetzelfde bestand, kan Git deze naadloos samenvoegen omdat de commits verschillende secties raken.
Maar als jij en een andere bijdrager dezelfde alinea hebben bewerkt, kan git niet bepalen welke versie behouden moet blijven, wat resulteert in een mergeconflict. In dat geval moet je het conflict handmatig oplossen door te beslissen welke wijzigingen je behoudt.
Voor meer hulp bij het oplossen van conflicten raad ik dit artikel aan over hoe je mergeconflicten in Git oplost.
GitHub downloaden
In sommige situaties wil je een lokale kopie van een repository om te gebruiken, zonder de intentie om eraan te wijzigen. Als het een openbare repository is, hoef je Git niet op je lokale machine te installeren. Je kunt de repository rechtstreeks van GitHub downloaden door op de knop Code te klikken, gevolgd door de knop Download Zip, zoals hieronder weergegeven:

Conclusie
Met Git klonen kun je een Git-repository naar je lokale machine kopiëren, zodat je de code kunt gebruiken of uitbreiden met nieuwe functionaliteit. Bij het klonen van een repository worden alle branches gedownload, wat aanzienlijk veel schijfruimte kan innemen.
Branches gebruik je om aan specifieke wijzigingen of features te werken. Een specifieke branch klonen stelt je in staat om aan die wijzigingen bij te dragen zonder ongerelateerde werkzaamheden te downloaden, waardoor je veel minder schijfruimte nodig hebt en je lokale schijf schoner blijft.
Wil je meer over het onderwerp leren, dan raad ik deze GitHub- en Git-tutorial voor beginners aan.

