Wat is versiebeheer?

Voltooid

Een versiebeheersysteem (VCS) is een programma of set programma's waarmee wijzigingen in een verzameling bestanden worden bijgehouden. Een doel van een VCS is om eenvoudig eerdere versies van afzonderlijke bestanden of van het hele project terug te halen. Een ander doel is om meerdere teamleden toe te staan aan een project te werken, zelfs op dezelfde bestanden, tegelijkertijd zonder dat dit van invloed is op elkaars werk.

Een andere naam voor een VCS is een SCM-systeem (Software Configuration Management). De twee termen worden vaak door elkaar gebruikt. In feite bevindt de officiële documentatie van Git zich op git-scm.com. Technisch gezien is versiebeheer slechts een van de procedures die betrokken zijn bij SCM. Een VCS kan worden gebruikt voor andere projecten dan software, waaronder boeken en online zelfstudies.

Met een VCS kunt u het volgende doen:

  • Alle wijzigingen van uw project bekijken, zien wanneer de wijzigingen zijn gemaakt en ontdekken door wie de wijzigingen zijn aangebracht.
  • Voeg bij elke wijziging een bericht toe om de redenering erachter uit te leggen.
  • Haal eerdere versies van het hele project of van afzonderlijke bestanden op.
  • Vertakkingen maken, waarbij u experimentele wijzigingen kunt doorvoeren. Met deze functie kunnen verschillende sets wijzigingen (bijvoorbeeld functies of oplossingen voor fouten) tegelijkertijd worden gewerkt, mogelijk door verschillende personen, zonder dat dit van invloed is op de hoofdvertakking. Later kunt u de wijzigingen die u wilt behouden, samenvoegen in de hoofdbranch.
  • Voeg een tag toe aan een versie, bijvoorbeeld om een nieuwe release te markeren.

Git is een snelle, veelzijdige, zeer schaalbare, gratis, opensource VCS. De primaire auteur is Linus Torvalds, de ontwikkelaar van Linux.

Gedistribueerd versiebeheer

Eerdere exemplaren van VCSes, waaronder CVS, Subversion (SVN) en Perforce, gebruikten een gecentraliseerde server om de geschiedenis van een project op te slaan. Deze centralisatie betekende dat de ene server ook mogelijk een single point of failure was.

Git wordt gedistribueerd, wat betekent dat de volledige geschiedenis van een project zowel op de client als op de server wordt opgeslagen. U kunt bestanden bewerken zonder een netwerkverbinding, ze lokaal controleren en met de server synchroniseren zodra er een verbinding beschikbaar is. Als een server uitvalt, beschikt u nog steeds over een lokale kopie van het project. Technisch gezien hoeft u niet eens een server te hebben. Wijzigingen kunnen worden doorgegeven in e-mail of worden gedeeld met verwisselbare media, maar niemand gebruikt Git op deze manier in de praktijk.

Git-terminologie

Voor meer informatie over Git moet u de juiste terminologie kennen. Hier volgt een korte lijst met termen die Git-gebruikers vaak gebruiken. Wees voorlopig niet bezorgd over de details. al deze termen zullen vertrouwd raken terwijl u door de oefeningen in deze module werkt.

  • Actieve boomstructuur: de set geneste mappen en bestanden die het project bevatten waaraan wordt gewerkt.

  • Opslagplaats (opslagplaats): de map, die zich op het hoogste niveau van een actieve boomstructuur bevindt, waar Git alle geschiedenis en metagegevens voor een project bewaart. Opslagplaatsen worden bijna altijd repo's genoemd. Een lege opslagplaats is een opslagplaats die geen deel uitmaakt van een actieve boomstructuur. Deze wordt gebruikt voor delen of back-ups. Een lege opslagplaats is meestal een map met een naam die eindigt op .git, bijvoorbeeld project.git.

  • Hash: Een getal dat wordt geproduceerd door een hash-functie die de inhoud van een bestand of een ander object aangeeft als een vast aantal cijfers. Git gebruikt hashes van 160 bits lang. Een van de voordelen van het gebruik van hashes is dat Git kan zien of een bestand is gewijzigd, door hashes toe te passen op de inhoud van dat bestand en het resultaat te vergelijken met de vorige hash. Als de bestandstijd- en datumstempel wordt gewijzigd, maar de bestandshash niet wordt gewijzigd, weet Git dat de bestandsinhoud niet wordt gewijzigd.

  • Object: Een Git-opslagplaats bevat vier typen objecten, die elk uniek worden geïdentificeerd door een SHA-1-hash. Een blob-object bevat een gewoon bestand. Een object van een boomstructuur vertegenwoordigt een map; dit object bevat namen, hashes en bevoegdheden. Een doorvoeringsobject vertegenwoordigt een specifieke versie van de actieve boomstructuur. Een tag is een naam die aan een doorvoering is gekoppeld.

  • Doorvoeren: Wanneer deze wordt gebruikt als een werkwoord, betekent doorvoeren een doorvoerobject maken. Door deze actie wordt de naam van doorvoeringen in een database gebruikt. Dit betekent dat u de wijzigingen doorvoert die u hebt aangebracht, zodat anderen ze uiteindelijk ook kunnen zien.

  • Vertakking: Een vertakking is een benoemde reeks gekoppelde doorvoeringen. De meest recente doorvoering in een vertakking wordt HEAD genoemd. De standaardbranch, die wordt gemaakt wanneer u een opslagplaats initialiseert, wordt aangeroepen main, vaak genoemd master in Git. Het hoofd van de huidige vertakking heeft de naam HEAD. Vertakkingen zijn een ongelooflijk handige functie van Git, omdat ontwikkelaars onafhankelijk (of samen) in vertakkingen kunnen werken en hun wijzigingen later kunnen samenvoegen in de standaardbranch.

  • Extern: Een externe is een benoemde verwijzing naar een andere Git-opslagplaats. Wanneer u een opslagplaats maakt, maakt Git een externe naam origin die de standaard remote is voor push- en pull-bewerkingen.

  • Opdrachten, subopdrachten en opties: Git-bewerkingen worden uitgevoerd met behulp van opdrachten zoals git push en git pull. git is de opdracht en push of pull is de subopdracht. Met de subopdracht geeft u de bewerking op die door Git moet worden uitgevoerd. Opdrachten worden vaak vergezeld van opties, die afbreekstreepjes (-) of dubbele afbreekstreepjes (--) gebruiken. Bijvoorbeeld: git reset --hard.

Deze termen en anderen, zoals push en pull, zullen binnenkort logischer zijn. Maar u moet ergens beginnen en het kan handig zijn om terug te komen en deze woordenlijst met termen te bekijken nadat u de module hebt voltooid.

De Git-opdrachtregel

Er zijn verschillende GUIs beschikbaar voor Git, waaronder GitHub Desktop. Veel programmeereditors, zoals Microsoft Visual Studio Code, hebben ook een interface met Git. Ze werken allemaal anders en ze hebben verschillende beperkingen. Met geen van deze programma's kunt u alle functionaliteiten van Git implementeren.

In de oefeningen in deze module wordt de Git-opdrachtregel gebruikt, met name Git-opdrachten die worden uitgevoerd in Azure Cloud Shell. De opdrachtregelinterface van Git werkt echter hetzelfde, ongeacht het besturingssysteem dat u gebruikt. Bovendien kunt u met behulp van de opdrachtregel gebruikmaken van alle functionaliteiten van Git. Ontwikkelaars die Git alleen via een GUI zien, krijgen soms te maken met foutberichten die ze niet kunnen oplossen en ze moeten naar de opdrachtregel gaan om opnieuw aan de slag te gaan.

Git en GitHub

Terwijl u met Git werkt, vraagt u zich misschien af over verschillen tussen de functies die het biedt en de functies die op GitHub worden aangeboden.

Zoals eerder vermeld, is Git een gedistribueerd versiebeheersysteem (DVCS) dat meerdere ontwikkelaars en andere inzenders kunnen gebruiken om aan een project te werken. Het biedt een manier om met een of meer lokale vertakkingen te werken en deze vervolgens naar een externe opslagplaats te pushen.

GitHub is een cloudplatform dat Git als kerntechnologie gebruikt. GitHub vereenvoudigt het samenwerken aan projecten en biedt een website, meer opdrachtregelprogramma's en algemene stroom die ontwikkelaars en gebruikers kunnen gebruiken om samen te werken. GitHub fungeert als de eerder genoemde externe opslagplaats.

De belangrijkste functies van GitHub zijn:

  • Problemen
  • Discussies
  • Pull-aanvragen
  • Meldingen
  • Etiketten
  • Acties
  • Voorvorken
  • Projecten

Zie de Module Inleiding tot GitHub Microsoft Learn of de Help-documentatie aan de slag met GitHub voor meer informatie over GitHub.

De volgende stap: probeer Git nu zelf uit!