Versiebeheersysteem
Een versiebeheersysteem of VCS (Engels: Version Control System) is een computerprogramma of een verzameling programma's waarmee men computerbestanden in verschillende stadia van hun ontwikkeling kan beheren.
Inhoud |
[bewerk] 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 wordt voor elke wijziging een reden bewaard. 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).
[bewerk] Werking
Over het algemeen werkt een VCS met een van de volgende twee methoden.
- vergrendelen - bewerken - ontgrendelen
- kopiëren - bewerken - samenvoegen
[bewerk] 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.
[bewerk] Kopiëren - Bewerken - Samenvoegen
Maar 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.
[bewerk] Terminologie
- Repository`
- De repository is de plaats waar de bestanden en de informatie over de historie van de bestanden wordt bewaard.
- 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 aanbrangt, vandaar de naam.
- 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 en kopie van de veranderingen die zijn aangebracht in de working-copy in de repository wordt vastgelegd.
- 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
- Update
- Een update (of sync) brengt de wijzigingen die in de repository zijn aangebracht ook aan in de lokale working copy.
- 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 reposotiry. Hierdoor kunnen twee verschillende versies van een systeem tegelijkertijd worden aangepast.
- 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.
- Revision
- Een revision of version is één versie in een keten van aanpassingen.
- Tag
- Een tag of release markeert een belangrijke momentopname op een bepaalde moment. Over het algemeen wordt op deze manier een bepaalde versie gemarkeerd.
- Import
- Een import is het in de repository zetten van bestanden die daar nog geen onderdeel van uitmaakten.
- 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
- 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
- Resolve
- Het oplossen van een conflict door een gebruiker.
- Baseline
- Over het algemeen is dit een set van bestanden met dezelfde tag, die gebruikt kan worden als basis voor verdere ontwikkelingen.
[bewerk] Bekende versiebeheersystemen
Bekende versiebeheersystemen zijn:
- Source Code Control System ofwel SCCS
- Revision Control System ofwel RCS
- Concurrent Versions System ofwel CVS
- Aegis
- Subversion
- Katie
- Visual Source Safe
- BitKeeper
- Rational Clearcase
- Telelogic Synergy (voorheen Continuus)