Achtergrond
Inmiddels is subversion alweer ingehaald door git.
https://git-scm.com/
Sinds de introductie van een verzameling scripts onder de naam CVS in de jaren tachtig van de vorige eeuw is er op gebied van (software) Configuratie Management (SCM) een hoop verandert. CVS, zelf een gratis open source product, werd de standaard binnen open source ontwikkeling en ook binnen een hoop bedrijven werd en wordt CVS gebruikt als versie beheer tool.
Dit is voor een groot deel daaraan toe te schrijven dat CVS lange tijd het enige (gratis) versie beheer tool was. Hoewel CVS een hoop wijzigingen heeft ondergaan zijn er toch beperkingen gebleven door de concepten en ontwerp van twintig jaar geleden.
`CollabNet kwam met het idee om een, nieuw ontworpen, open source vervanging te maken voor CVS. Gelijkend op CVS, zodat de overstap makkelijk zou zijn, met het ontwikkel model (copy-modify-merge) van CVS, maar zonder de beperkingen. De ontwikkeling van subversion (SVN) begon in 2000, medio 2001 gebruikte subversion zelf subversion als versie beheer tool (daarvoor CVS) en de eerste stabiele versie kwam in 2004 uit.
Inmiddels is subversion meer dan een miljoen keer gedownload, zijn er diverse grote projecten die subversion gebruiken, zijn er veel producten verschenen die SVN integreren of ondersteunende functionaliteit bieden. Inmiddels is het oorspronkelijke doel (CVS vervangen) bereikt en is subversion het meest gebruikt voor open source ontwikkeling. Subversion is de eerste kinderziektes en puper kuren te boven en een stabiel product geschikt voor productie. Zaak voor eenieder betrokken bij configuratie management om op zijn minst kennis te maken met subversion zo niet ook over te stappen van CVS naar subversion.
In dagelijks gebruik lijkt subversion weinig anders dan CVS, er is ergens een server met data (het archief of repository), gebruikers halen data (copy) op naar hun eigen werkplek, wijzingen (modify) deze en sturen (merge) het weer terug. De lokale werkplek (working copy) is een directory structuur met de bestanden en mappen met de naam .svn, die weliswaar wat andere inhoud heeft als de bekende CVS map maar toch vertrouwt is.
Nieuw SVN
SVN “lijkt” dus op CVS, de concepten en zelfs de commando”s zijn hetzelfde, maar dan nu de verschillen. Een grote overstap is het te vinden in het gebruik van revisie nummers, terwijl CVS en veel andere versie beheer tools ieder bestand een eigen revisie (versie/revision) nummer geven, gebruikt SVN een revisie nummer voor een archief (repository) in zijn geheel. Men spreekt niet over revisie 1.1,1.2,1.3 van het bestand foo.c maar van versie 1,2,3 van het archief in zijn geheel. Het verschil in versie 1 en 2 zit hem dan bijvoorbeeld in een wijzing in het bestand foo.c, het verschil tussen 2 en 3 betreft een wijzing in het bestand bar.c terwijl foo.c ongemoeid is gelaten.
Waar subversion een wezenlijke stap verder gaat ten opzichte van CVS is in het onder versie beheer brengen van de structuur, behalve bestanden staan ook mappen onder versie beheer. De revisies van subversion geven dus ook het toevoegen, verwijderen, verplaatsen en hernoemen van bestanden weer. Met name dit punt was een behoorlijke nachtmerrie in CVS.
Wijzigingen hebben vaak betrekking op meerdere bestanden, een c-file is aangepast, en header file bevat een nieuw prototype en een document is toevoegt, deze wijzingen vormen een consistente set. Bij een zogeheten commit worden of alle wijzigingen in het archief geplaatst met een nieuwe revisie tot gevolg of als iets misgaat geen en het archief blijft ongewijzigd. Dit concept van atomic changes maakt het veel eenvoudiger na te gaan waarom iets gewijzigd is, en wat er gewijzigd is. Het is bij veel versie beheer systemen soms knap lastig uit te zoeken welke wijziging in een c-file hoort bij die wijzing in de header file.
Labels en Branching
In essentie gedraagt subversion zijn als een file systeem dat voor je bijhoudt welke wijzingen er in het verleden gemaakt zijn en je toestaat het verleden weer terug te halen. Maar wat als je het “verleden” wilt bevriezen, in versie beheer termen een label/tag/baseline wilt maken, of parallel wilt gaan werken in een branch. Hoe verschillend de laatste twee acties ook lijken, SVN lost ze op identieke wijze op, of eigenlijk niet. Verbazingwekkend genoeg ondersteund SVN geen labels en geen branching. Althans op het eerste gezicht.
Wat SVN wel ondersteunt zijn kopieën van een archief.
Een blik in een standaard subversion repository toont drie magische mappen trunk, branches en tags. Trunk is de directory waar de main ontwikkeling plaatsvindt, de mappen branches en tags bevatten kopieën van de trunk, de kopieën in branches vind parallelle ontwikkeling plaats en in tags bevinden zich “bevroren” kopieën. Intern is er geen verschil tussen trunk, branch en tag. En ook de naamgeving is slechts een suggestie van de makers van subversion, als er een branch gemaakt wordt en er nooit meer ontwikkeling gedaan wordt is het in feite een tag, een tag waarop nog ontwikkeling plaatsvindt is plotseling een branch. Er is geen restrictie om branches op een andere plek te maken, noem het “tijdelijk” en gebruik het om een voorgestelde wijziging aan collega”s te laten zien, zonder de ontwikkeling in de hoofdtak (trunk) te verstoren. Men is trouwens vrij zelf zijn repository in te delen, het gebruik van trunk,branch en tag is niet verplicht.
Het maken van kopieën voor elke branch en tag lijkt kansloos inefficiënt, subversion maakt echter smart copies of lazy copies van een directory boom. Bestanden zijn in eerste instantie links naar de voorgangers hierdoor is de hoeveelheid ruimte die een branch inneemt minimaal. Pas als er daadwerkelijk een wijzing plaatsvindt wordt de link vervangen door een werkelijk bestand.
Gebruik
Subversion ondersteund een drietal protocollen om verbinding te maken, rechtstreeks, via de subversion server en via `WebDAV/`DeltaV.
Het rechtstreekse protocol (file) is te gebruiken als het om een lokale repository gaat zonder hinder of overhead van netwerk protocollen. Het SVN-protocol is eenvoudig te installeren ( namelijk niet anders dan het installeren van SVN zelf) en kan gebruikt worden in combinatie met SSH om veilig te werken.
Het op http gebaseerde `WebDAV/`DeltaV wordt het meest gebruik, groot voordeel is dat http bij de meeste firewals gebruikt kan worden (in tegenstelling tot SSH). Het kan ook beveiligd (met HTTPS) en is gebaseerd op de robuuste apache web server.
SVN, zowel server als client, is beschikbaar voor windows, Linux, BSD, Solaris `MacOS en als source code. Bovendien is het beschikbaar in veel verschillende talen.
Versie beheer versie configuratie management
Versie beheer wordt vaak ook software configuratie management genoemd. Software ontwikkeling is een activiteit die vraagt om een goed versie beheer. Vaak wordt er in een groep gemeenschappelijk aan code gewerkt, er zijn veel vaak kleine wijzingen en wijzingen worden vaak weer ongedaan gemaakt even proberen. Subversion te omschrijven als software configuratie management tool is wat misleidend:
- Subversion is een versie beheer tool, dat ingezet kan worden voor configuratie management van code, maar het is voor meer geschikt dan alleen het beheer van software. In elke omgeving waar bestanden regelmatig van inhoud veranderen is subversion geschikt om het beheer te verzorgen.
- Software configuratie management is meer dan alleen versie beheer. CM is het hele proces omvat het hele beheers proces van ontwerp tot product, versie beheer is daar een (belangrijk) onderdeel van.
Subversion Een introductie voor uw SCM consultant of specialist