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
bewerkenEen 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
bewerkenOver het algemeen werkt een VCS met een van de volgende twee methoden.
- vergrendelen - bewerken - ontgrendelen
- kopiëren - bewerken - samenvoegen
Vergrendelen - Bewerken - Ontgrendelen
bewerkenBij 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
bewerkenVaak 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
bewerken- 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
bewerkenBekende 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