Hva er Subversion?

Subversion er et fritt/opensource versjonskontrollsystem. Det betyr: Subversion behandler filer og kataloger og forandringene i dem over tid. Dette lar deg hente fram eldre versjoner av dataene dine, eller studere historien for hvordan dataene dine har forandret seg. På grunn av dette tenker mange på et versjonskontrollsystem som en slags “tidsmaskin”.

Subversion kan operere over datanettverk, der flere personer kan bruke det på forskjellige maskiner. På et visst nivå gir muligheten for forskjellige personer til å modifisere og behandle den samme datamengden seg utslag i samarbeid. Fremgangen kan gå fortere uten en trang flaskehals som alle forandringene må gå gjennom. Og fordi arbeidet er versjonert, trenger du ikke frykte at kvaliteten er noe du må gi avkall på når du mister denne flaskehalsen – hvis en feil forandring er gjort i dataene, er det bare å omgjøre denne forandringen.

Noen versjonskontrollsystemer er også software configuration management-systemer (SCM). Disse systemene er spesielt beregnet på å vedlikeholde trær av kildekode, og har mange funksjoner som er spesielt tilpasset programutvikling – de kan ha en viss forståelse av programmeringsspråk, eller de tilbyr verktøy for å bygge programvare. Subversion, derimot, er ikke et av disse systemene. Det er et generelt system som kan bli brukt til å vedlikeholde en hvilken som helst samling av filer. For ditt vedkommende kan det være kildekode – for andre, alt fra huskelister til butikken til redigeringsfiler for digital video og annet.

Subversions historie

Tidlig i år 2000 startet CollabNet, Inc. (http://www.collab.net) letingen etter utviklere for å lage en erstatning for CVS. CollabNet tilbyr programvare for å muliggjøre samarbeid – CollabNet Enterprise Edition (CEE)[2] – der en komponent er versjonskontroll. Selv om CEE brukte CVS som sitt første versjonskontrollsystem, var begrensningene i CVS helt fra begynnelsen veldig tydelige, og CollabNet visste at noe bedre måtte finnes på et eller annet tidspunkt. Uheldigvis hadde CVS blitt de facto-standarden i opensource-verdenen fordi det ikke fantes noe bedre, ihvertfall ikke under en fri lisens. Så CollabNet gikk inn for å skrive et nytt versjonskontrollsystem fra bunnen av, basert på de grunnleggende idéene fra CVS, men uten feilene og manglende funksjoner.

I februar 2000 kontaktet de Karl Fogel, forfatteren av Open Source Development with CVS (Coriolis, 1999), og spurte om han ville arbeide på dette nye prosjektet. Tilfeldigvis diskuterte Karl på dette tidspunktet et design for et nytt versjonskontrollsystem med sin venn Jim Blandy. I 1995 startet de to Cyclic Software, et firma som tilbød kontrakter for CVS-støtte, og selv om de senere solgte forretningen, brukte de fortsatt CVS hver dag på jobben. Frustrasjonen deres over CVS hadde fått Jim til å tenke nøye over bedre veier til å behandle versjonerte data, og han hadde allerede kommet opp med ikke bare navnet “Subversion”, men også med den grunnleggende designen av datalagringen i Subversion. Da forespørselen kom fra CollabNet, gikk Karl øyeblikket med på å arbeide med prosjektet, og Jim fikk sin arbeidsgiver, Red Hat Software, til å hovedsaklig donere ham til prosjektet for en udefinert tidsperiode. CollabNet ansatte Karl og Ben Collins-Sussman, og detaljert designarbeid startet i mai. Med hjelp av noen velplasserte nålestikk fra Brian Behlendorf, Jason Robbins fra CollabNet og Greg Stein (på den tiden en uavhengig utvikler aktiv innen spesifiseringsprosessen for WebDAV/DeltaV), fikk Subversion raskt trukket til seg en samling aktive utviklere. Det viste seg at mange hadde hatt de samme frustrerende opplevelsene med CVS, og ønsket sjansen til å endelig få gjort noe med dette velkommen.

Den originale designgruppen satte seg enkle mål. De ville ikke bryte nytt land innen versjonskontrollteknikken, de ville bare forbedre CVS. De bestemte seg for at Subversion skulle ha de samme funksjonene som CVS og beholde den samme utviklingsmodellen, men uten de mest åpenbare feilene i CVS. Og selv om det nødvendigvis ikke skulle være en fullstendig erstatning for CVS, skulle det være likt nok til at enhver CVS-bruker kunne gjennomføre overgangen med små anstrengelser.

Etter fjorten måneder med programmering ble Subversion “selvlagrende” den 31. august 2001. Det betydde at Subversionutviklerne avsluttet bruken av CVS til å vedlikeholde Subversions kildekode, og gikk over til å bruke Subversion istedenfor.

Selv om CollabNet startet prosjektet, og fortsatt finansierer en stor del av arbeidet (de betaler lønningene for noen få fulltidsansatte Subversionutviklere), drives Subversion som de fleste opensource-prosjekter, styrt av et løst sammensatt og gjennomsiktig regelverk som oppmuntrer til elitestyre. CollabNets copyrightlisens er fullstendig i samsvar med Debians retningslinjer for fri programvare – Debian Free Software Guidelines. Med andre ord, alle kan hente, modifisere og redistribuere Subversion som de selv ønsker; ingen tillatelse fra CollabNet eller andre er nødvendig.

Subversions fordeler

Når vi diskuterer funksjonalitetene som Subversion bringer til versjonskontrollbordet, hjelper det ofte å snakke om dem i vendinger som beskriver hvordan de er forbedringer i forhold til måten CVS er konstruert. Hvis du ikke er vant med CVS, er det ikke sikkert du forstår alle disse funksjonene. Og hvis du ikke er kjent med versjonskontroll i det hele tatt, kan nok blikket sløves såfremt du ikke har lest Kapittel 1, Grunnleggende konsepter, hvor vi foretar en forsiktig introduksjon til versjonskontroll.

Subversion tilbyr:

Versjonering av kataloger

CVS holder bare rede på historien til individuelle filer, men Subversion implementerer et “virtuelt” versjonert filsystem som følger forandringer til hele katalogtrær over tid. Filer og kataloger er versjonert.

Sann versjonshistorie

Siden CVS er begrenset til versjonering av filer, er ikke operasjoner som kopiering og navneskifter – som kan hende med filer, men som egentlig er forandringer i innholdet av katalogen de ligger i – støttet i CVS. I tillegg kan du ikke i CVS erstatte en versjonert fil med en ny ting med det samme navnet uten at det nye elementet overtar historien til den gamle – kanskje helt urelaterte – fila. Med Subversion kan du legge til, slette, kopiere og skifte navn på både filer og kataloger. Og hver fil som er nylig lagt til begynner med en frisk, ren historie helt for seg selv.

Atomisk innlegging

En samling av forandringer går enten fullstendig inn i depotet, eller ikke i det hele tatt. Dette tillater utviklerne å konstruere og legge inn forandringer som logiske porsjoner, og forhindrer problemer som kan oppstå når bare en del av forandringene ble lagt inn i depotet.

Versjonerte metadata

Hver fil og katalog har et sett med egenskaper – egenskapsnavn og deres verdier – assossiert med seg. Du kan opprette og lagre ethvert vilkårlig egenskapsnavn/verdi-par som du ønsker. Egenskaper er versjonert over tid, akkurat som filinnhold.

Valg av nettverkslag

Subversion har et løst definert begrep om depottilgang, noe som gjør det enkelt for brukere å implementere nye nettverksmekanismer. Subversion kan plugges inn i Apache HTTP-serveren som en tilleggsmodul. Dette gir Subversion en stor fordel innen stabilitet og kommunikasjon med brukere og prosesser, og øyeblikkelig tilgang til eksisterende funksjoner som denne serveren tilbyr – autentisering, autorisasjon, “wire compression” og så videre. En lettere egenstående Subversionserver-prosess er også tilgjengelig. Denne serveren snakker en tilpasset protokoll som lett kan bli kjørt gjennom en SSH-tunnel.

Konsekvent databehandling

Subversion uttrykker filforskjeller ved en binær forskjellsalgoritme som fungerer likt både på tekst (lesbar for det menneskelige øye) og binære (uleselige for mennesker) filer. Begge filtypene pakkes på samme måte i depotet, og forskjeller blir overført i begge retninger over nettverket.

Effektiv forgrening og merking

Belastningen ved å lage en gren eller merke trenger ikke å være proporsjonal med prosjektstørrelsen. Subversion lager forgreninger og merker ved å rett og slett kopiere prosjektet, ved hjelp av en mekanisme lik en hard lenke. Dermed tar disse operasjonene bare en liten, konstant mengde tid.

Hackervennlighet

Subversion har ingen historisk bagasje; programmet er implementert som en samling av delte C-biblioteker med veldefinerte programmeringsgrensesnitt. Dette gjør Subversion ekstremt lett å vedlikeholde og lett å bruke av andre applikasjoner og språk.

Subversions arkitektur

Figur 1, “Subversions arkitektur” illustrerer en “milehøy” oversikt over Subversions design.

Figur 1. Subversions arkitektur

Subversions arkitektur

På den ene kanten er et Subversiondepot som inneholder alle dine versjonerte data. I den andre enden er Subversionklienten din, som holder rede på lokale avspeilinger av deler av disse versjonerte dataene (kalt “arbeidskopier”). Mellom disse yttergrensene er det flere ruter gjennom diverse tilgangslag – Repository Access (RA). Noen av disse rutene går over datanettverk og gjennom dataservere som deretter aksesserer depotet. Andre dropper hele nettverket og bruker direkte tilgang til depotet.

Subversions komponenter

Subversion, installasjonen er ferdig, består av flere deler. Det følgende er en rask oversikt over hva du får. Ikke bli skremt hvis den snaue beskrivelsen etterlater deg med å klø deg i hodet – det er mange flere sider i denne boka som er beregnet på å fjerne denne forvirringen.

svn

Kommandolinjeklienten.

svnversion

Et program for å rapportere tilstanden (i betydningen av revisjoner for de elementene som finnes) for en arbeidskopi.

svnlook

Et verktøy for å inspisere et Subversiondepot direkte.

svnadmin

Et verktøy for å lage, tilpasse eller reparere et Subversiondepot.

svndumpfilter

Et program for å filtrere strømmer i dumpfil-format for et Subversiondepot.

mod_dav_svn

En programtilleggsmodul for Apache HTTP-serveren, som brukes til å gjøre depotet ditt tilgjengelig for andre over et nettverk.

svnserve

Et tilpasset selvstendig serverprogram, kjørbar som en daemon-prosess eller startbar av SSH; en annen måte å gjøre depotet ditt tilgjengelig for andre over et nettverk.

svnsync

Et program for inkrementell speiling av et depot til et annet over et nettverk.

Forutsatt at du har Subversion korrekt installert, er du klar til å starte. De neste to kapitlene vil vise deg bruken av svn, Subversions klient for kommandolinjebruk.



[2] Det finnes også en versjon kalt CollabNet Team Edition (CTE) som er beregnet på mindre grupper.