Copyright © 2002, 2003, 2004, 2005, 2006, 2007 Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato
Dette verket er lisensiert under Creative Commons Attribution License. For å se en kopi av denne lisensen, gå til http://creativecommons.org/licenses/by/2.0/ eller send et brev til Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
Innholdsfortegnelse
Figuroversikt
Tabelloversikt
Eksempeloversikt
.reg-fil..svn/entries
FileEn dårlig FAQ (Ofte stilte spørsmål) er en som ikke er satt sammen av spørsmål brukere faktisk stiller, men det som forfatterne ønsker at de ville spørre om. Du har kanskje sett noe lignende som dette før:
Spm.: Hvordan kan jeg bruke Glorbosoft XYZ til å øke lagproduktiviteten?
Sv.: Mange av våre kunder vil vite hvordan de kan maksimere produktiviteten gjennom våre patenterte kontor-gruppevareløsninger. Svaret er enkelt: Først, klikk på “
Fil”-menyen, rull ned til “Øk produktiviteten”, deretter …
Problemet med slike FAQ-er er at de er, bokstavelig talt, ikke FAQ-er i det hele tatt. Ingen ringer teknisk support og spør: “Hvordan kan vi øke produktiviteten?” Istedenfor spør folk høyst spesifikke spørsmål som for eksempel: “Hvordan kan vi forandre kalendersystemet til å sende påminnelser to dager i forveien istedenfor en?” og så videre. Men det er er mye lettere å lage spørsmål istedenfor å oppdage de spørsmålene som egentlig blir stilt. Det å sette sammen en FAQ må være en sammenhengende og organisert prosess som varer hele levetiden til programmet, innkommende spørsmål må bli lagret, responsen fulgt, og alt dette må samles i en fyldig, søkbar helhet som avspeiler den kollektive opplevelsen for brukerne ute i det fri. Det krever en tålmodig og observant innstilling hos en som befinner seg i felten. Ingen store hypoteser, ingen visjonære uttalelser her – åpne øyne og nøyaktige notater er det som trengs mest.
Det jeg liker med denne boka er at den vokste fram nettopp gjennom en slik prosess, og dette vises på hver eneste side. Den er det direkte resultatet av forfatterens møter med brukerne. Det begynte med Ben Collins-Sussmans observasjon av at folk spurte de samme enkle spørsmålene om og om igjen på mailinglisten til Subversion: Hva er standard fremgangsmåte for å bruke Subversion? Virker forgreninger og merker på samme måte som i andre versjonskontrollsystemer? Hvordan kan jeg finne ut hvem som gjorde en spesiell forandring?
Frustrert over å se de samme spørsmålene dag etter dag, jobbet Ben intenst over en måned sommeren 2002 for å skrive The Subversion Handbook, en 60-siders håndbok som tok for seg all grunnleggende bruk av Subversion. Håndboka tok ikke mål av seg å være komplett, men den ble distribuert med Subversion og hjalp brukere over den innledende humpen i lærekurven. Da O’Reilly and Associates bestemte seg for å publisere en fullversjon av Subversion-boka, var minste motstands vei opplagt: Å utvide håndboka.
De tre medforfatterne av den nye boka ble dermed presentert for en uvanlig mulighet. Offisielt var deres oppgave å skrive ei bok ovenfra og ned, å starte med innholdet og et innledende utkast. Men de hadde også tilgang til en jevn strøm – faktisk en ukontrollerbar geysir – av materiale som kom fra gressrotplan. Subversion var allerede i hendene på tusenvis av tidlige brukere, og disse brukerne ga tonnevis med tilbakemeldinger, ikke bare om Subversion, men om den eksisterende dokumentasjonen.
Gjennom hele tiden de skrev denne boka, trålte Ben, Mike og Brian konstant malilinglisten til Subversion og fulgte med i snakkerom mens de nøye skrev ned problemer brukere hadde i virkelige situasjoner. Å holde øye med slike tilbakemeldinger er en del av deres arbeidsoppgaver hos CollabNet uansett, og det ga dem en stor fordel når de satte i gang med å dokumentere Subversion. Boka de produserte er fast forankret i erfaringens grunnfjell, ikke i den skiftende sanden av ønsketenkning; den kombinerer de beste aspektene av en brukerhåndbok og en liste over ofte spurte spørsmål. Denne tosidigheten er kanskje ikke så merkbar ved første gjennomlesing. Tatt i rekkefølge, forside til bakside, er boka rett og slett en likefrem beskrivelse av et stykke programvare. Oversikten finnes der, den obligatoriske guidede gjennomgangen, kapittelet om administrativ konfigurasjon, noen avanserte tema, og selvfølgelig en referanse over kommandoer og problemer som kan dukke opp. Bare når du kommer tilbake til den senere, når du vil lete opp løsningen på et spesifikt problem, da viser det seg: Detaljene i fortellingen kan bare være resultatet av møter med det uventede, eksemplene finslipt av virkelige bruksmåter, og mest av alt forståelsen av brukerens behov og hvordan situasjonen tar seg ut fra brukerens ståsted.
Selvfølgelig, ingen kan love at denne boka vil kunne svare på
hvert eneste spørsmål du har om Subversion.
Noen ganger vil presisjonen i hva den forventer av spørsmål være
uhyggelig telepatisk;
andre ganger kan du finne et hull i fellesskapets kunnskap, og du
står tomhendt tilbake.
Når dette skjer, er den beste tingen du kan gjøre å sende en epost
til <users@subversion.tigris.org> og legge fram
problemet ditt.
Forfatterne er fortsatt der, de følger fortsatt med, og disse består
ikke bare av de tre på forsiden, men også mange andre som har
bidratt med korreksjoner og originalt materiale.
Fra fellesskapets synspunkt er det å løse problemet ditt bare en
behagelig bieffekt av et mye større prosjekt – det å sakte tilpasse
boka, og aller helst Subversion selv, til å samsvare mer med hvordan
den faktisk brukes.
De er ivrige etter å høre fra deg, ikke bare fordi de kan hjelpe
deg, men fordi du kan hjelpe dem.
Det er med Subversion som med alle aktive prosjekter innen fri
programvare, du er ikke alene.
La denne boka bli din første ledsager.
Innholdsfortegnelse
“Det er viktig å ikke la det perfekte bli fienden til det gode, selv når du kan være enig i hva det perfekte er. Dobbelt så mye når du ikke kan det. Samme hvor ubehagelig det er å bli fanget av tidligere feil, kan du ikke gjøre fremskritt ved å være redd din egen skygge når du designer.” | ||
| --Greg Hudson | ||
I opensource-verdenen var Concurrent Versions System (CVS) i flere år førstevalget innen versjonskontroll. Og det er fortjent. CVS var selv fri programvare, og dens ikke-restriktive virkemåte og støtte for nettverksbaserte operasjoner tillot dusinvis av programmerere spredt over et geografisk område å dele på arbeidet. Den passet veldig bra sammen med samarbeidsånden i opensource-verdenen. CVS med sin halvkaotiske utviklingsmodell har siden blitt hjørnesteiner i kulturen omkring fri programvare.
Men CVS hadde sine feil, og det å fikse disse feilene så ut til å bli litt av en jobb. Så kom Subversion. Subversion var originalt konstruert som en etterfølger til CVS, og Subversionutviklerne gikk inn for å vinne hjertene til CVS-brukerne på to måter – ved å lage et opensource-system med en design (og “look and feel”) som ligner på CVS, og samtidig prøve å unngå mesteparten av de åpenbare feilene i CVS. Selv om resultatet nødvendigvis ikke er det neste store steget innen versjonskontrolldesign, er Subversion meget kraftig, brukbart og veldig fleksibelt. Og i de fleste tilfeller velger nå nesten alle nye opensource-prosjekter Subversion istedenfor CVS.
Denne boka er skrevet for å dokumentere 1.4-serien av versjonskontrollsystemet Subversion. Vi har gjort hva vi kan for å være grundig i dekningen av systemet. Subversion har imidlertid et livlig og energisk utviklermiljø, så det er allerede et antall funksjoner og forbedringer planlagt i fremtidige versjoner av Subversion som kan forandre noen av kommandoene og de spesifikke notatene i denne boka.
Denne boka er skrevet for datamaskinkyndige personer som vil bruke Subversion til å behandle sine data. Selv om Subversion kjører under flere forskjellige operativsystemer, er det primære brukergrensesnittet kommandolinjebasert. Dette kommandolinjeverktøyet (svn) og tilleggsprogrammer er satt i fokus i denne boka.
For å være konsekvent går vi ut i fra at leseren bruker et
Unix-lignende operativsystem og er relativt komfortabel med Unix
og kommandolinjemiljø.
Når det er sagt, kjører svn-programmet også på
andre plattformer enn Unix, for eksempel Microsoft Windows.
Med noen få unntak, som bruken av omvendte skråstreker
(\) istedenfor vanlige skråstreker
(/) som stiseparatorer, er inndataene og
utdataene til og fra dette verktøyet når det kjøres under Windows
identisk med den tilsvarende versjonen på Unix.
De fleste leserne er sannsynligvis programmerere eller systemadministratorer som har behov for å følge forandringer i kildekode. Dette er den vanligste bruken av Subversion, og derfor legges dette scenariet til grunn for alle eksemplene i boka. Men Subversion kan også brukes til å holde rede på forandringer i alle typer informasjon – bilder, musikk, databaser, dokumentasjon og så videre. For Subversion sin del er alle data bare data.
Selv om denne boka er skrevet med antakelsen om at brukeren aldri har brukt et versjonskontrollsystem, har vi også forsøkt å gjøre det lett for brukere av CVS (og andre systemer) å foreta en smertefri overgang til Subversion. Spesielle sidenotater kan nevne andre versjonskontrollsystemer nå og da, og et spesielt tillegg summerer opp mange av forskjellene mellom CVS og Subversion.
Merk at kildekodeeksemplene som er brukt i boka er bare eksempler. Selv om de vil kompilere med den riktige kompilatorbesvergelsen, er de beregnet på å illustrere en spesiell situasjon, ikke nødvendigvis være eksempler på god programmeringsstil eller praksis.
Denne boka tar sikte på å være nyttig for folk med varierende bakgrunn – fra folk med ingen tidligere erfaring fra versjonskontroll til erfarne systemadministratorer. Avhengig av bakgrunnen din kan enkelte kapitler være mer eller mindre nyttig for deg. Det som kommer nå kan sees på som en “anbefalt leseliste” for forskjellige typer lesere:
Antakelsen her er at du sannsynligvis har brukt CVS før, og klør i fingrene etter å få en Subversionserver opp og gå så fort som mulig. Kapittel 5, Depotadministrasjon og Kapittel 6, Serverkonfigurasjon vil vise deg hvordan du lager ditt første depot og gjør det tilgjengelig over nettverket. Etter at det er gjort, er Kapittel 2, Grunnleggende bruk og Tillegg B, Subversion for CVS-brukere den raskeste veien for å bli kjent med Subversionklienten.
Administratoren din har muligens satt opp Subversion allerede, og du trenger å lære hvordan klienten skal brukes. Hvis du aldri har brukt et versjonskontrollsystem før, er Kapittel 1, Grunnleggende konsepter en vital introduksjon til idéene bak versjonskontroll. Kapittel 2, Grunnleggende bruk er en gjennomgang av Subversionklienten.
Enten du er en bruker eller administrator, vil prosjektet ditt etterhvert vokse seg større. Du vil ønske å lære hvordan man gjør mer avanserte ting med Subversion, som å bruke forgreninger og utføre flettinger (Kapittel 4, Forgrening og fletting), hvordan bruke Subversions støtte for egenskaper (Kapittel 3, Avanserte emner), hvordan konfigurere valg for kjøring (Kapittel 7, Tilpassing av Subversion-opplevelsen) og andre ting. Disse kapitlene er ikke absolutt nødvendige til å begynne med, men pass på å lese dem når du er komfortabel med det grunnleggende.
Antagelig er du allerede kjent med Subversion, og vil nå enten utvide den eller lage ny programvare på toppen av dens mange programmeringsgrensesnitt. Kapittel 8, Developer Information er bare for deg.
Boka slutter med referansemateriale – Kapittel 9, Subversion Complete Reference er en referanseguide for alle Subversionkommandoer, og tilleggene dekker en rekke nyttige emner. Dette er kapitlene du mest sannsynlig vil komme tilbake til når du er ferdig med boka.
Denne seksjonen tar for seg de forskjellige konvensjonene brukt i denne boka.
Brukt om kommandoer, utdata fra kommandoer og om valg.
Skrå skrift med konstant
breddeBrukt til utbyttbare elementer i kode og tekst
Skrå skriftBrukes for fil- og katalognavn
Kapitlene som følger og innholdet deres er listet her:
Dekker historien til Subversion så vel som funksjoner, arkitektur og komponenter.
Forklarer det grunnleggende om versjonskontroll og forskjellige versjoneringsmodeller, sammen med Subversions depot, arbeidskopier og revisjoner.
Tar deg med gjennom en dag i livet til en Subversionbruker. Det demonstrerer hvordan man bruker en Subversionklient for å hente, modifisere og sende inn data.
Dekker mer kompleks funksjonalitet som vanlige brukere etterhvert vil komme i kontakt med, som versjonerte metadata, låsing av filer og “peg-revisjoner”.
Diskuterer forgreninger, fletting og merking, inkludert beste praksiser for å lage forgreninger og fletting, vanlige bruksmåter, hvordan angre på forandringer og hvordan man lett kan svinge seg fra en gren til en annen.
Beskriver det grunnleggende ved et Subversiondepot, hvordan man lager, konfigurerer og vedlikeholder et depot, og verktøyene du kan bruke for å gjøre alt dette.
Forklarer hvordan du konfigurerer
Subversionserveren din og de tre måtene å få tilgang
til depotet ditt:
HTTP,
svn-protokollen og lokal disktilgang.
Det dekker også detaljer omkring autentisering,
tilgangskontroll og anonym tilgang.
Utforsker Subversion-klientens konfigurasjonsfiler, behandling av internasjonalisert tekst og hvordan få eksterne verktøy til å samarbeide med Subversion.
Beskriver den interne funksjonaliteten til Subversion, Subversions filsystem, og de administrative områdene i arbeidskopien sett fra en programmerers synspunkt. Demonstrerer hvordan man bruker de offentlige programmeringsgrensesnittene til å skrive et program som bruker Subversion, og viktigst av alt, hvordan bidra til utviklingen av Subversion.
Forklarer i stor detalj hver eneste delkommando i svn, svnadmin og svnlook med nok eksempler for hele familien!
En forklaring i full fart for den utålmodige om hvordan Subversion installeres og hvordan den kan brukes med en gang. Du er herved advart.
Dekker likheter og forskjeller mellom Subversion og CVS, med flere forslag om hvordan du kan bryte alle de dårlige vanene du har plukket opp etter år med bruk av CVS. Inkludert her er beskrivelser av Subversions revisjonsnumre, versjonerte kataloger, frakoblede operasjoner, update versus status, forgreninger, merker, metadata, konfliktløsing og autentisering.
Beskriver detaljene om WebDAV og DeltaV, og hvordan du kan konfigurere Subversiondepotet til å være montert som et delt DAV-område.
Diskuterer verktøy som støtter eller bruker Subversion, inkludert alternative klientprogrammer, verktøy for å utforske depotet og så videre.
Denne boka startet som småbiter av dokumentasjon skrevet av Subversions prosjektutviklere, og deretter satt sammen til et enkeltstående verk og omskrevet. Som sådan har den alltid hatt en fri lisens. (Se Tillegg E, Copyright.) Boka ble faktisk skrevet under offentlig oppsyn, som en del av Subversion. Dette betyr to ting:
Du vil alltid finne den seneste versjonen av denne boka i bokas eget Subversiondepot.
Du kan gjøre forandringer i denne boka og redistribuere den så mye du ønsker – den er under en fri lisens. Det eneste som kreves er at de originale forfatterne blir kreditert. Selvfølgelig, istedenfor at du distribuerer din egen private versjon av boka, vil vi heller at du sender respons og patcher til utviklermiljøet for Subversion.
En relativt fersk versjon av boka finner du online på http://svnbook.red-bean.com.
Denne boka ville ikke vært mulig (og heller ikke særlig nyttig) hvis Subversion ikke eksisterte. Derfor vil forfatterne takke Brian Behlendorf og CollabNet for visjonen om å støtte et slikt risikabelt og ambisiøst nytt Open Source-prosjekt; Jim Blandy for det originale Subversion-navnet og designen – vi elsker deg, Jim; Karl Fogel for at han er slik en god venn og stor leder av fellesskapet, i den rekkefølgen.[1]
Takk til O’Reilly og våre redaktører, Linda Mui og Tatiana Diaz for deres tålmodighet og støtte.
Til slutt vil vi takke alle de utallige folkene som har bidratt til denne boka med informative anmeldelser, forslag og korreksjoner: Selv om dette uten tvil ikke er en komplett liste, ville denne boka være ukomplett og ukorrekt uten hjelp fra: David Anderson, Jani Averbach, Ryan Barrett, François Beausoleil, Jennifer Bevan, Matt Blais, Zack Brown, Martin Buchholz, Brane Čibej, John R. Daily, Peter Davis, Olivier Davy, Robert P. J. Day, Mo DeJong, Brian Denny, Joe Drew, Nick Duffek, Ben Elliston, Justin Erenkrantz, Shlomi Fish, Julian Foad, Chris Foote, Martin Furter, Dave Gilbert, Eric Gillespie, David Glasser, Matthew Gregan, Art Haas, Eric Hanchrow, Greg Hudson, Alexis Huxley, Jens B. Jorgensen, Tez Kamihira, David Kimdon, Mark Benedetto King, Andreas J. König, Nuutti Kotivuori, Matt Kraai, Scott Lamb, Vincent Lefevre, Morten Ludvigsen, Paul Lussier, Bruce A. Mah, Philip Martin, Féliciano Matias, Patrick Mayweg, Gareth McCaughan, Jon Middleton, Tim Moloney, Christopher Ness, Mats Nilsson, Joe Orton, Amy Lyn Pilato, Kevin Pilch-Bisson, Dmitriy Popkov, Michael Price, Mark Proctor, Steffen Prohaska, Daniel Rall, Jack Repenning, Tobias Ringström, Garrett Rooney, Joel Rosdahl, Christian Sauer, Larry Shatzer, Russell Steicke, Sander Striker, Erik Sjölund, Johan Sundström, John Szakmeister, Mason Thomas, Eric Wadsworth, Colin Watson, Alex Waugh, Chad Whitacre, Josef Wolf, Blair Zajac, og hele Subversion-fellesskapet.
Thanks to my wife Frances, who, for many months, got to hear, “But honey, I’m still working on the book”, rather than the usual, “But honey, I’m still doing email.” I don’t know where she gets all that patience! She’s my perfect counterbalance.
Thanks to my extended family and friends for their sincere encouragement, despite having no actual interest in the subject. (You know, the ones who say, “Ooh, you wrote a book?”, and then when you tell them it’s a computer book, sort of glaze over.)
Thanks to all my close friends, who make me a rich, rich man. Don’t look at me that way—you know who you are.
Thanks to my parents for the perfect low-level formatting, and being unbelievable role models. Thanks to my son for the opportunity to pass that on.
Takk til min kone Frances, som i mange måneder måtte høre “Men kjære, jeg jobber fortsatt på boka”, istedenfor den vanlige “Men kjære, jeg holder fortsatt på med eposten”. Jeg vet ikke hvor hun får all tålmodigheten fra! Hun er min perfekte motvekt.
Takk til min storfamilie og mine venner for deres oppriktige oppmuntring, til tross for at de ikke har noen egentlig interesse for emnet. (Du vet, de som sier “Åååja, du har skrevet ei bok?”, og når du forteller at det er ei bok om datamaskiner, forsvinner stjerneglansen i øynene deres.)
Takk til alle mine nære venner, som gjør meg til en rik, rik mann. Ikke se på meg på den måten – dere vet hvem dere er.
Takk til foreldrene mine for den perfekte grunnformateringen, og for at de er noen utrolige rollemodeller. Takk til sønnen min for muligheten til å føre det videre.
Huge thanks to my wife Marie for being incredibly understanding, supportive, and most of all, patient. Thank you to my brother Eric who first introduced me to UNIX programming way back when. Thanks to my Mom and Grandmother for all their support, not to mention enduring a Christmas holiday where I came home and promptly buried my head in my laptop to work on the book.
To Mike and Ben: It was a pleasure working with you on the book. Heck, it’s a pleasure working with you at work!
To everyone in the Subversion community and the Apache Software Foundation, thanks for having me. Not a day goes by where I don’t learn something from at least one of you.
Lastly, thanks to my Grandfather who always told me that “freedom equals responsibility.” I couldn’t agree more.
Kjempestor takk til min kone Marie for å være utrolig forståelsesfull, støttende og mest av alt, tålmodig. Takk til min bror Eric som først introduserte meg til UNIX-programmering langt tilbake i tiden. Takk til min mor og bestemor for all deres støtte, for ikke å nevne å holde ut en juleferie hvor jeg kom hjem og med en gang begravde hodet i laptopen for å arbeide på boka.
Til Mike og Ben: Det var en glede å jobbe med dere på boka. Søren heller, det er en glede å arbeide med dere på jobben!
Til alle i Subversion-miljøet og Apache Software Foundation, takk for at dere har meg. Det går ikke en dag uten at jeg lærer noe fra ihvertfall en av dere.
Til sist, takk til min bestefar som alltid fortalte meg at “frihet er lik ansvarlighet”. Jeg kunne ikke være mer enig.
Special thanks to my wife, Amy, for her love and patient support, for putting up with late nights, and for even reviewing entire sections of this book—you always go the extra mile, and do so with incredible grace. Gavin, when you’re old enough to read, I hope you’re as proud of your Daddy as he is of you. Mom and Dad (and the rest of the family), thanks for your constant support and enthusiasm.
Hats off to Shep Kendall, through whom the world of computers was first opened to me; Ben Collins-Sussman, my tour-guide through the open-source world; Karl Fogel—you are my
.emacs; Greg Stein, for oozing practical programming know-how; Brian Fitzpatrick—for sharing this writing experience with me. To the many folks from whom I am constantly picking up new knowledge—keep dropping it!Finally, to the One who perfectly demonstrates creative excellence—thank you.
Spesiell takk til min kone Amy for hennes kjærlighet og tålmodige støtte, for å holde ut med sene kvelder, og for å til og med se over hele seksjoner av denne boka – du går alltid den ekstra milen, og gjør det med utrolig ynde. Gavin, når du er gammel nok til å lese, håper jeg du er like stolt av faren din som han er av deg. Mor og Far (og resten av familien), takk for deres konstante støtte og entusiasme.
Hatten av for Shep Kendall, gjennom ham ble verdenen av
datamaskiner først åpnet for meg;
Ben Collins-Sussman, min turguide gjennom open source-verdenen;
Karl Fogel – du er min
.emacs;
Greg Stein, for å utstråle praktisk know-how innen
programmering;
Brian Fitz – for å dele denne skriveopplevelsen med meg.
Til de mange folkene som jeg til stadighet plukker opp ny
kunnskap etter – fortsett med å strø den omkring!
Til sist, til den Ene som så perfekt demonstrerer kreativ fortreffelighet – takk.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
Figur 1, “Subversions arkitektur” illustrerer en “milehøy” oversikt over Subversions design.
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.
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.
Kommandolinjeklienten.
Et program for å rapportere tilstanden (i betydningen av revisjoner for de elementene som finnes) for en arbeidskopi.
Et verktøy for å inspisere et Subversiondepot direkte.
Et verktøy for å lage, tilpasse eller reparere et Subversiondepot.
Et program for å filtrere strømmer i dumpfil-format for et Subversiondepot.
En programtilleggsmodul for Apache HTTP-serveren, som brukes til å gjøre depotet ditt tilgjengelig for andre over et nettverk.
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.
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.
Innholdsfortegnelse
Dette kapittelet er en kort, lettvint introduksjon til Subversion. Hvis du er ny innen versjonskontroll, er dette kapittelet definitivt for deg. Vi begynner med en diskusjon om generelle konsepter innen versjonskontroll, jobber oss gjennom de spesifikke idéene bak Subversion, og viser noen enkle eksempler på bruk av Subversion.
Selv om eksemplene i dette kapittelet viser personer som deler samlinger av kildekode til programmer, husk at Subversion kan behandle alle typer filsamlinger – det er ikke begrenset til å hjelpe dataprogrammerere.
Subversion er et sentralisert system for å dele informasjon. Dens kjerne er et depot, som er et sentralt lager av data. Depotet lagrer informasjon i form av et filsystemtre – et typisk hierarki av filer og kataloger. Ethvert antall klienter kobler seg til depotet, og leser eller skriver deretter til disse filene. Ved å skrive data, gjør klienten informasjonen tilgjengelig for andre; ved å lese data henter klienten informasjon fra andre. Figur 1.1, “Et typisk klient/server-system” illustrerer dette.
Så hvorfor er dette interessant? Så langt høres dette ut som definisjonen av en typisk filserver. Og det stemmer, depotet er en slags filserver, men ikke den typen du vanligvis kommer ut for. Det som gjør Subversiondepotet spesielt er at det husker hver eneste forandring noensinne skrevet til det: Hver forandring til hver eneste fil, og til og med forandringer i selve katalogtreet, som opprettelser, slettinger og ommøbleringer i filer og kataloger.
Når en klient leser data fra depotet, ser den vanligvis bare den siste versjonen av filsystemtreet. Men klienten har også muligheten til å se tidligere tilstander av filsystemet. For eksempel, en klient kan spørre historiske spørsmål som: “Hva inneholdt denne katalogen forrige onsdag?” eller “Hvem var den siste personen som forandret denne fila, og hvilke forandringer gjorde vedkommende?” Dette er typen spørsmål som er hjertet av ethvert versjonskontrollsystem: Systemer som er designet for å lagre og følge forandringer i data over tid.
Hovedmålet for et versjonskontrollsystem er å muliggjøre samarbeidsredigering og deling av data. Men forskjellige systemer bruker forskjellige strategier for å oppnå dette. Det er viktig å forstå disse forskjellige strategiene av et par grunner. For det første vil det hjelpe deg å sammenlige og danne kontrast mot andre systemer som ligner på Subversion. Utenom det, vil det også hjelpe deg til å effektivisere bruken av Subversion, siden Subversion selv støtter et par forskjellige arbeidsmåter.
Alle versjonskontrollsystemer må løse det samme fundamentale problemet: Hvordan vil systemet tillate brukere å dele informasjon, men forhindre dem fra å tråkke hverandre på tærne? Det er alt for lett for brukere å overskrive hverandres forandringer i depotet ved en ulykke.
Tenk over scenariet vist i Figur 1.2, “Problemet som må unngås”. Sett at vi har to arbeidskolleger, Harry og Sally. De bestemmer seg begge for å redigere den samme fila i depotet samtidig. Hvis Harry lagrer sine forandringer til depotet først, er det (noen øyeblikk senere) mulig at Sally feilaktig overskriver dem med hennes egen nye versjon av fila. Selv om Harrys versjon av fila ikke vil være tapt for alltid (fordi systemet husker hver eneste forandring), vil alle forandringene Harry gjorde ikke være med i Sallys nyere versjon av fila, fordi hun så aldri Harrys forandringer til å begynne med. Harrys arbeid er fortsatt borte – eller i det minste borte fra den siste versjonen av fila – og sannsynligvis ved en ulykke. Dette er definitivt en situasjon vi vil unngå!
Mange versjonskontrollsystemer bruker en modell av typen lås-rediger-lås opp når de tar for seg problemet med at mange forfattere roter til hverandres arbeid. I denne modellen tillater depotet bare en person å forandre en fil om gangen. Denne eksklusive arbeidsmåten styres ved bruk av låser. Harry må “låse” ei fil før han kan begynne å gjøre forandringer i den. Hvis Harry har låst ei fil, kan ikke Sally også låse den, og kan derfor ikke gjøre noen forandringer i denne fila. Alt hun kan gjøre er å lese fila og vente på at Harry gjør seg ferdig med sine forandringer og så slipper låsen han har satt opp. Etter at Harry låser opp fila kan Sally ta sin runde med å låse og redigere fila. Figur 1.3, ““Lås-rediger-lås opp”-løsningen” demonstrerer denne enkle løsningen.
Problemet med “lås-rediger-lås opp”-metoden er at den er ganske restriktiv, og blir ofte en hindring for brukerne:
Låsing kan medføre administrative problemer. Noen ganger hender det at Harry låser ei fil og glemmer den. I mellomtiden, fordi Sally fortsatt venter på å få redigere fila, har hun hendene bundet. Og så drar Harry på ferie. Nå må Sally få en administrator til å fjerne Harrys lås. Situasjonen ender opp med mange forsinkelser og mye bortkastet tid.
Låsing kan forårsake unødvendig serialisering. Hva hvis Harry redigerer begynnelsen av en tekstfil, og Sally rett og slett bare vil redigere slutten av den samme fila? Disse forandringene overlapper ikke i det hele tatt. De kan enkelt redigere fila samtidig, og ingen stor skade vil skje, såfremt forandringene ble flettet fint sammen. Det er ingen vits i at de må vente på tur i denne situasjonen.
Låsing kan skape en falsk følelse av trygghet. Tenk deg at Harry låser og redigerer fil A, mens Sally samtidig låser og redigerer fil B. Men hva hvis A og B er avhengig av hverandre, og forandringene som er lagt til hver av filene er semantisk inkompatible med hverandre? Plutselig virker ikke A og B sammen mer. Låsesystemet var ikke i stand til å forhindre problemet – men skapte likevel en falsk følelse av trygghet. Det er lett for Harry og Sally å tenke seg at ved å låse filer, starter hver av dem en trygg, isolert oppgave, og de bryr seg dermed ikke med å diskutere deres inkompatible forandringer på et tidligere tidspunkt. Låsing blir ofte en erstatning for skikkelig kommunikasjon.
Subversion, CVS og en rekke andre versjonskontrollsystemer bruker en modell av typen kopier-rediger-flett som et alternativ til låsing. I denne modellen kontakter klienten til hver bruker prosjektdepotet og lager en personlig arbeidskopi – et lokalt speil av depotets filer og kataloger. Brukere arbeider så parallelt og uavhengig med å modifisere deres private kopier. Til slutt blir de private kopiene flettet inn i en ny, endelig versjon. Versjonskontrollsystemet hjelper ofte til med flettingen, men til syvende og sist er det et menneske som er ansvarlig for å la det skje skikkelig.
Her er et eksempel. La oss si at Harry og Sally hver for seg lager arbeidskopier av det samme prosjektet, kopiert fra depotet. De arbeider samtidig, og gjør forandringer i den samme fila A innenfor sine kopier. Sally lagrer sine forandringer til depotet først. Når Harry prøver å lagre sine forandringer senere, informerer depotet ham om at hans fil A er utdatert. Med andre ord, fil A i depotet har på en eller annen måte forandret seg siden han kopierte den sist. Så Harry ber klienten sin om å flette alle nye forandringer fra depotet inn i hans arbeidskopi av fil A. Sjansene for at Sallys forandringer ikke overlapper med hans egne er store; så når begges forandringer er lagt inn i fila, lagrer han sin egen arbeidskopi til depotet. Figur 1.4, ““Kopier-rediger-flett”-løsningen” og Figur 1.5, ““Kopier-rediger-flett”-løsningen (forts.)” viser denne prosessen.
Men hva hvis Sallys forandringer likevel overlapper med Harrys forandringer? Hva da? Denne situasjonen kalles en konflikt, og er vanligvis ikke mye til problem. Når Harry ber klienten sin om å flette sammen de nyeste forandringene i depotet inn i hans arbeidskopi, blir det vist at hans kopi av fil A er i konflikt: Han vil være i stand til å se begge settene av konfliktskapende forandringer, og velge mellom dem manuelt. Legg merke til at programvare ikke kan løse konflikter automatisk; bare mennesker er i stand til å forstå og gjøre de nødvendige intelligente valgene. Når Harry har løst de overlappende forandringene manuelt – kanskje etter en diskusjon med Sally – kan han trygt lagre den flettede fila tilbake til depotet.
“Kopier-rediger-flett”-modellen kan høres litt kaotisk ut, men i praksis går det ekstremt glatt. Brukere kan jobbe parallelt, og aldri vente på hverandre. Når de arbeider på de samme filene, viser det seg at mesteparten av de samtidige forandringene ikke overlapper i det hele tatt; konflikter er sjeldne. Og tiden det tar å løse konflikter er vanligvis langt mindre enn tiden tapt med et låsesystem.
Til sist koker det hele ned til en kritisk faktor: Brukerkommunikasjon. Når brukerne kommuniserer dårlig, øker antallet av både programmessige og språkmessige konflikter. Ingen systemer kan tvinge brukerne til å kommunisere perfekt, og ingen systemer kan oppdage språkmessige konflikter. Så, det er ikke mye poeng i å bli lurt av et falskt løfte om at et låsesystem på en eller annen måte vil forhindre konflikter; i praksis ser låsing ut til å hemme produktiviteten mer enn noe annet.
Det er på tide å gå fra det abstrakte til det konkrete. I denne seksjonen vil vi vise reelle eksempler på bruk av Subversion.
Gjennom denne boka bruker Subversion URLer for å identifisere versjonerte ressurser i Subversion-depoter. For det meste bruker disse URLene standard syntaks, som tillater servernavn og portnummer å bli spesifisert som en del av URLen:
$ svn checkout http://svn.example.com:9834/repos …
Men det er noen nyanser i Subversions behandling av URLer
som legges merke
til.
For eksempel, URLer som bruker
file:-aksesseringsmetoden (brukt for lokale
depoter) må, i henhold til konvensjonene, enten ha
servernavnet localhost eller ikke noe
servernavn:
$ svn checkout file:///sti/til/depot … $ svn checkout file://localhost/sti/til/depot …
I tillegg må brukere av file:-skjemaet på
MS Windows-plattformer bruke en uoffisiell
“standard” syntaks for å aksessere depoter smo er
på den samme maskinen, men på en annen disk enn klientens
nåværende arbeidsdisk.
En av de to følgende URL-syntaksene vil virke der
X er disken hvor depotet ligger:
C:\> svn checkout file:///X:/sti/til/depot … C:\> svn checkout "file:///X|/sti/til/depot" …
I den andre syntaksen må du sette URLen i hermetegn
("") så det vertikale stolpetegnet ikke blir
tolket som et rør.
Legg også merke til at en URL bruker vanlige skråstreker
(/) selv om den lokale (ikke-URL) formen i en
sti i MS Windows bruker omvendte skråstreker
(\).
Til slutt må det legges merke til at Subversionklienten automatisk vil kode URLer etter behov, akkurat som en nettleser gjør det. For eksempel, hvis en URL inneholder et mellomrom eller store bokstaver:
$ svn checkout "http://server/sti med mellomrom/prosjekt/españa"
… så vil Subversion beskytte de usikre tegnene og oppføre seg som om du hadde skrevet:
$ svn checkout http://server/sti%20med%20mellomrom/prosjekt/espa%C3%B1a
Hvis URLen inneholder mellomrom, pass på å plassere den innenfor hermetegn, så skallet behandler hele URLen som et enkelt argument til svn-programmet.
Du har allerede lest om arbeidskopier; nå skal vi demonstrere hvordan Subversionklienten lager og bruker dem.
En arbeidskopi i Subversion er et vanlig katalogtre på ditt lokale system, og inneholder en samling filer. Du kan redigere disse filene sånn som du vil, og hvis det er kildekode, kan du kompilere programmet på den vanlige måten. Arbeidskopien din er ditt eget private arbeidsområde: Subversion vil aldri legge inn andre folks forandringer, heller ikke gjøre dine egne forandringer tilgjengelig for andre før du eksplisitt ber programmet om å gjøre det. Du kan til og med ha flere arbeidskopier av det samme prosjektet.
Etter at du har gjort noen forandringer i filene i arbeidskopien og sjekket at de virker skikkelig, gir Subversion deg kommandoer så du kan “publisere” forandringene dine til de andre som arbeider med deg på prosjektet ditt (ved å skrive til depotet). Hvis andre personer publiserer deres egne forandringer, gir Subversion deg kommandoer for å flette disse forandringene inn i din arbeidskopi (ved å lese fra depotet).
En arbeidskopi inneholder også noen ekstra filer, opprettet
og vedlikeholdt av Subversion, for å hjelpe seg med å utføre
disse kommandoene.
Hver katalog i arbeidskopien inneholder en underkatalog kalt
.svn, også kjent som arbeidskopiens
administrative katalog.
Filene i hver administrative katalog hjelper Subversion til å se
hvilke filer som inneholder upubliserte forandringer, og hvilke
filer som er utdaterte i forhold til andres arbeid.
Et typisk Subversiondepot inneholder ofte filene (eller kildekoden) for flere prosjekter; vanligvis har hvert prosjekt sin egen underkatalog i depotets filsystemtre. Med dette arrangementet vil en brukers arbeidskopi samsvare med et spesielt deltre av depotet.
For eksempel, tenk deg at du har et depot som består av to
programprosjekter, paint og
calc.
Hvert prosjekt bor i hver sin toppkatalog, som vist i Figur 1.6, “Depotets filsystem”.
For å få deg en arbeidskopi, må du først hente
ut (check out) et del
av et katalogtre fra depotet.
(Det engelske uttrykket “check out” kan høres ut
som det har noe å gjøre med låsing eller reservering av
ressurser, men det har ikke det;
det lager bare en privat kopi av prosjektet for deg.)
For eksempel, hvis du henter ut /calc, vil
du få en arbeidskopi som dette:
$ svn checkout http://svn.example.com/repos/calc A calc/Makefile A calc/integer.c A calc/button.c Checked out revision 56. $ ls -A calc Makefile integer.c button.c .svn/
Listen med bokstaven A indikerer at Subversion legger til et
antall elementer i arbeidskopien din.
Du har nå en personlig kopi av depotets
/calc-katalog, med en ekstra komponent –
.svn – som tidligere nevnt inneholder den
ekstra informasjonen som Subversion trenger.
Tenk at du gjør forandringer til
button.c.
Siden .svn-katalogen husker filens
modifiseringsdato og originale innhold, kan Subversion se at du
har forandret fila.
Men Subversion offentliggjør ikke dine forandringer før du
eksplisitt ber programmet om å gjøre det.
Prosessen når du publiserer dine forandringer blir vanligvis
omtalt som å legge inn (eller
sende/sjekke inn) forandringer til
depotet.
For å publisere dine forandringer til andre, kan du bruke Subversions commit-kommando.
$ svn commit button.c -m "Ordnet en skrivefeil i button.c ." Sender button.c Sender fildata . La inn revisjon 57.
Nå er dine forandringer til button.c
lagt inn i depotet, med en melding som beskriver forandringen
din (at du ordnet en skrivefeil).
Hvis en annen bruker henter ut en arbeidskopi av
/calc, vil de se dine forandringer i den
seneste versjonen av fila.
Tenk deg at du har en samarbeidspartner, Sally, som hentet
ut en arbeidskopi av /calc samtidig med
deg.
Når du legger inn din forandring til
button.c, er Sallys arbeidskopi uforandret;
Subversion modifiserer bare arbeidskopier etter brukerens
ønske.
For å få sitt prosjekt oppdatert, kan Sally be Subversion om å oppdatere hennes arbeidskopi, ved å bruke Subversionkommandoen update. Dette vil legge inn dine forandringer inn i hennes arbeidskopi, så vel som alle andre forandringer som er blitt lagt inn i depotet siden hun sist hentet det ut.
$ pwd /home/sally/calc $ ls -A .svn/ Makefile integer.c button.c $ svn update U button.c Updated to revision 57.
Utdataene fra kommandoen svn update
indikerer at Subversion oppdaterte innholdet av
button.c.
Legg merke til at Sally ikke trengte å spesifisere hvilke filer
som skulle oppdateres, Subversion bruker informasjonen i
.svn-katalogen sammen med annen informasjon
i depotet for å bestemme hvilke filer som trenger en
oppdatering.
En svn commit-operasjon publiserer forandringer til et vilkårlig antall filer og kataloger som en enkeltstående atomisk transaksjon. I arbeidskopien din kan du forandre filenes innhold, opprette, slette, skifte navn og kopiere filer og kataloger, og så legge inn et komplett sett med forandringer som en atomisk transaksjon.
Med “atomisk transaksjon” mener vi rett og slett dette: Enten skjer alle forandringene i depotet, eller ingen av dem skjer. Subversion prøver å beholde denne atomiteten stilt opp mot programkræsj, systemkræsj, nettverksproblemer og andre brukeres aktiviteter.
Hver gang depotet aksepterer en innlegging, opprettes det en ny tilstand i filsystemtreet, kalt en revisjon. Hver revisjon blir tildelt et unikt naturlig tall, ett større enn nummeret på den forrige revisjonen. Den første revisjonen i et nyopprettet depot har nummeret null, og inneholder ingenting annet enn en tom rotkatalog.
Figur 1.7, “Depotet” illustrerer en fin måte å visualisere depotet på. Tenk deg en rekke av revisjonsnumre som starter på 0 og strekker seg fra venstre mot høyre. Hvert revisjonsnummer har et filsystemtre hengende under seg, og hvert tre er et “øyeblikksbilde” av hvordan depotet så ut etter en innlegging.
Det er viktig å notere seg at arbeidskopier ikke bestandig samsvarer med en enkelt revisjon i depotet; de kan inneholde filer fra flere forskjellige revisjoner. For eksempel, tenk at du henter ut en arbeidskopi fra et depot der den siste revisjonen er 4:
calc/Makefile:4
integer.c:4
button.c:4
For øyeblikket samsvarer arbeidskopien nøyaktig med revisjon
4 i depotet.
Men tenk deg så at du gjør en forandring i
button.c, og legger inn denne forandringen.
Forutsatt at ingen andre innlegginger har forekommet, vil din
innlegging opprette revisjon 5 i depotet, og arbeidskopien din
vil se ut som dette:
calc/Makefile:4
integer.c:4
button.c:5
Så