Versiebeheersysteem

Een versiebeheersysteem of VCS (Engels: Version Control System) is een computerprogramma of een verzameling programma's waarmee men de wijzigingen in documenten, programma's of andere informatie bewaard in computerbestanden kan beheren. Een VCS wordt het meest gebruikt bij de ontwikkeling van software, als onderdeel van het releasemanagementproces, zodat meerdere mensen wijzigingen kunnen aanbrengen aan dezelfde bestanden. Wijzigingen worden meestal aangeduid met een code, het "revisienummer" of "revisieniveau". Elke wijziging wordt gekoppeld aan een timestamp en aan de persoon die de wijziging maakte. Wijzigingen kunnen vergeleken worden, hersteld en soms samengevoegd. 

Een versiebeheersysteem is meestal een apart programma, maar het is ook in beperkte mate ingebouwd in sommige software zoals tekstverwerkers (bijvoorbeeld Microsoft Word, LibreOffice Writer, KOffice, Pages, Google Docs), spreadsheets (bijvoorbeeld LibreOffice Calc, Google Spreadsheets, Microsoft Excel), en in verschillende CMS Systemen. Het is ook een kenmerk van wiki-software, zodat wijzigingen altijd teruggedraaid kunnen worden, bijvoorbeeld bij vandalisme.

Gebruik 
Een computerprogramma bijvoorbeeld is meestal te complex om in één keer te schrijven. Vaak gaat er enige tijd voorbij voordat het af is (van dagen tot jaren), en zelfs als het af verklaard wordt, gaat de maker vaak verder met een volgende, betere versie van het programma.

Een versiebeheersysteem bewaart voldoende informatie om oudere versies te kunnen terugvinden. Ook kan er voor elke wijziging een omschrijving van die wijziging (bv. de reden) bewaard worden. Wijzigingen die later problemen blijken te veroorzaken kunnen er gemakkelijk mee ongedaan worden gemaakt.

Sommige versiebeheersystemen staan ook toe om verschillende versies van hetzelfde programma tegelijk te beheren. Zo kan de maker zowel aan de nieuwe versie werken als fouten uit de oude versie halen. (Dergelijke hoofdversies heten releases, vrijgaves).

Werking 
Over het algemeen werkt een VCS met een van de volgende twee methoden.
 vergrendelen - bewerken - ontgrendelen
 kopiëren - bewerken - samenvoegen

Vergrendelen - Bewerken - Ontgrendelen 
Bij de eerste methode wordt een bestand exclusief toegewezen aan een bepaalde ontwikkelaar, andere ontwikkelaars kunnen niet tegelijkertijd aan dezelfde broncode werken. Als de ontwikkelaar klaar is met het aanbrengen van wijzigingen wordt de broncode weer vrijgegeven voor anderen.

Kopiëren - Bewerken - Samenvoegen 
Vaak werken meerdere mensen tegelijkertijd aan één bestand. Sommige versiebeheersystemen staan daarom toe dat meerdere mensen hetzelfde bestand tegelijkertijd kunnen bewerken. Bij het terugzetten van de wijzigingen in het VCS wordt gecontroleerd of wijzigingen elkaar overlappen. In dat geval moet er handmatig gekozen worden hoe de wijzigingen toch beide kunnen worden doorgevoerd.

Terminologie 

 Baseline  Over het algemeen is dit een set van bestanden met dezelfde tag, die gebruikt kan worden als basis voor verdere ontwikkelingen.

 Branch  Een verzameling van bestanden in de repository kunnen worden branched of forked op een bepaald moment, zodat vanaf dat moment er twee versie van dezelfde bestanden aanwezig zijn in de repository. Hierdoor kunnen twee verschillende versies van een systeem tegelijkertijd worden aangepast.

 Change  Een change (of diff of delta) is een bepaalde wijziging op een bestand dat onderdeel is van de repository.  De granulariteit van wat een change precies is verschilt van systeem tot systeem

 Check-out  Een check-out (of checkout of co) maakt een working-copy aan. Een check-out zorgt voor het kopiëren van een bepaalde of de meest recente versie van de bestanden 

 Commit  Een commit of check-in is de actie waarbij een kopie van de veranderingen die zijn aangebracht in de working-copy in de repository wordt vastgelegd.

 Conflict  Een conflict treedt op als twee wijzigingen samenvallen. Afhankelijk van het soort systeem kan dit gaan over een bestand of een deel van een bestand. Vaak moet een gebruiker aangeven wat er met de beide wijzigingen moet gebeuren 

 Export  Een export is gelijk aan een check-out, behalve dat er geen meta data wordt meegestuurd over versies. Dit is het tegengestelde van een import

 Import  Een import is het in de repository zetten van bestanden die daar nog geen onderdeel van uitmaakten.

 Merge  Een merge of integration zorgt voor het toepassen van meerdere wijzigingen op hetzelfde bestand..  
 Dit kan gebeuren als één gebruiker, die zijn lokale working-copy bepaalde bestanden heeft aangepast, de wijzigingen aanbrengt in de repository, terwijl deze bestanden ook zijn aangepast door één of meer andere gebruikers.
 Als er een branch is gemaakt en er een probleem wordt opgelost dat in beide versie bestaat, dan wordt de oplossing vaak in één branch aangebracht en wordt dit bestand weer gemerged met de andere branch.
 Een merge kan ook optreden als twee (of meer) branches weer worden samengevoegd tot één branch.
 Tag  Een tag of release markeert een belangrijke momentopname op een bepaald moment.  Over het algemeen wordt op deze manier een bepaalde versie gemarkeerd.

 Repository De repository  is de plaats waar de bestanden en de informatie over de historie van de bestanden wordt bewaard.

 Resolve  Het oplossen van een conflict door een gebruiker.

 Revision  Een revision of version is één versie in een keten van aanpassingen.

 Trunk  Een unieke verzameling van bestanden in de repository. (ook wel: Baseline, Mainline of Master)

 Update  Een update (of sync) brengt de wijzigingen die in de repository zijn aangebracht ook aan in de lokale working copy.

 Working copy De working copy is een lokale kopie van bestanden uit de repository,van een bepaalde datum of revisie. Dit zijn de bestanden waar de gebruiker de wijzigingen in aanbrengt, vandaar de naam.

Bekende versiebeheersystemen 
Bekende versiebeheersystemen zijn:

Aegis
Bazaar
BitKeeper
Concurrent Versions System ofwel CVS
Git
Harvest Change Manager
Katie
Mercurial
Rational Clearcase
Revision Control System ofwel RCS
Source Code Control System ofwel SCCS
Subversion
Team Foundation Version Control
Telelogic Synergy (voorheen Continuus)
Visual Source Safe