Subversion introduction
Marc Groenewegen (marcg@dinkum.nl)
25 september 2007
Document Information |
Organisation |
Hogeschool voor de Kunsten Utrecht (HKU)
|
Version |
0.2 |
Status |
draft |
Abstract:
Dit document geeft een introductie in het gebruik van het
versiebeheersysteem Subversion.
Table Of Contents
1 Introductie
Subversion is een versiebeheersysteem. Het biedt de mogelijkheid meerdere
versies of revisies van bestanden en verzamelingen van bestanden op
te slaan, te beheren en terug te halen. Op deze manier wordt het mogelijk
de historie van files te achterhalen doordat je kunt zien hoe ze zich
ontwikkeld hebben, wie eraan gewerkt hebben en wat de gedachten waren
achter veranderingen en implementatiebeslissingen.
Subversion maakt efficient gebruik van diskruimte voor het bewaren van
het archief. Je kunt natuurlijk van elke file die je ooit gemaakt hebt
een kopie bewaren. Subversion bewaart versies van een project echter door
de verschillen tussen files te gebruiken om alleen de laatste versie op
te slaan plus een recept om voorgaande files te reconstrueren.
Subversion helpt ook een groep ontwikkelaars die aan hetzelfde project
werken. Zonder zo'n systeem moet je uiterst voorzichtig te werk gaan om
niet elkaars files te overschrijven. Met Subversion kunnen de gebruikers
tegelijk aan dezelfde files werken zonder elkaar in de weg te zitten.
Een belangrijke eigenschap van Subversion is de mogelijkheid om releases
van software te maken. Een release kun je zien als een momentopname van
een project, bijvoorbeeld wanneer een belangrijke mijlpaal bereikt is
en de software in die hoedanigheid verkocht gaat worden.
Dit document biedt een snelle start met Subversion en een voorbeeld om mee
te beginnen. Meer informatie over de achtergronden van versiebeheer
kun je vinden in het document "Archiving and version control".
1.1 Doelgroep
Dit document richt zich voornamelijk op (software) ontwikkelaars die
alleen of in een groep werken, maar het kan ook interessant zijn voor
het onderhouden van documentatie en andere verzamelingen van
informatie die zich in de tijd ontwikkelt.
2 Nuttige info
2.1 Hoe kom je aan Subversion
Subversion kun je downloaden van de
Subversion home page
2.2 Subversion documentatie
Wat achtergrond en een hoop verwijzingen vind je op
Wikipedia
2.3 Woordenlijst
repository |
de database van het versiebeheersysteem |
client |
het programma waar gebruikers mee werken |
server |
het programma dat de database beheert |
3 Beginnen met Subversion
In het algemeen gebruik je voor het werken met Subversion een svn-client en
een svn-server. De server beheert het archief en verwerkt opdrachten van
diverse clients, terwijl de verschillende gebruikers op hun computer hun
files beheren met een svn-client die zonder dat ze daar veel van merken
contact maakt met de server. In dit document bespreek ik alleen het werken
met Subversion clients.
Clients zijn er in diverse uitvoeringen: als commandline-programma,
met een GUI en zelfs als web-interface.
Voordat je met een Subversion client kunt werken moet je eerst instellen
welke Subversion server je wilt gebruiken en waar de repository zich op
die server bevindt. Andere instellingen verschillen per client en hebben
bijvoorbeeld te maken met voorkeuren voor het bekijken van files, van
verschillen tussen files en het gedrag bij check-in en check-out.
3.1 Instellen van server en repository
Subversion kan met een repository op de computer van de gebruiker werken,
maar ook met een repository ergens anders in een netwerk of op het internet.
Bij het aangeven welke repository je wilt gebruiken moet je dan ook een
protocol opgeven, de naam van de server en welke repository op de server.
Voorbeelden:
- file:///path/to/repository/myproject
- http://user@host.example.com/repository/myproject
- svn+ssh://user@host.example.com/repository/myproject
- svn://user@host.example.com/repository/myproject
Voorbeelden van commando's in een command line client:
- svn import myproject <repository> -m "initial import"
- svn checkout <repository> myproject
Nog wat nuttige commando's:
- svn diff
- svn commit
- svn update
- svn log
- svn cat
- svn list
- svn checkout / co
- svn cleanup
- svn commit / ci
- svn update / up
- svn delete
3.2 Grafische clients
Hoewel de command-line interface van Subversion erg krachtig is heeft
een grafische client bepaalde voordelen. Kies afhankelijk van de situatie
welke client je verkiest.
Het is mogelijk om een web server (bv. Apache) met Subversion te laten
werken. Dit opent de mogelijkheid om Subversion via een web-browser te
gebruiken.
Enkele voordelen van een grafische client:
- Het is mogelijk om de verschillen tussen twee revisies naast elkaar
te zien. Dat zou strikt genomen met een tekst-interface wel kunnen maar
wordt eigenlijk niet gedaan. Sommige clients starten een externe
double-window viewer als xdiff, windiff of tkdiff op maar er zijn ook
clients die dit zelf kunnen.
-
Het selecteren van verschillende versies is overzichtelijker
-
Een grafische representatie van de historie-boom verschaft snel
inzicht
-
Je krijgt sneller overzicht welke files veranderd zijn
Enkele grafische clients:
- svnx (Mac)
- tkcvs (cross platform)
- subcommander (with submerge)
- rapidsvn (cross platform)
- websvn
4 Voorbeeld
We maken een klein programma dat uit enkele files bestaat. Het berekent
hoe ver we fietsen uit het aantal omwentelingen, wieldiameter en
trapverhouding.
Het programma is geschreven in C++ en bestaat uit enkele cpp-files,
header files en een ontwerpdocument.
Onderwerpen in dit voorbeeld:
-
Een nieuw project in Subversion beginnen
-
Check-out in een andere locatie dan het origineel
-
Files toevoegen
-
Change, update, check-in
-
Veranderingen bekijken, zowel tussen versies onderling als tussen
het archief en je werkfiles
4.1 Voorbereiding
We beginnen met een top-level directory 'bicycle' en subdirectories
src (voor source files), include (voor header files) en doc
(voor documentatie) en vullen deze met de volgende files:
src
- bike_main.cpp
- pedal.cpp
- wheel.cpp
- Makefile
include
doc
4.2 Project onderbrengen in Subversion
Zoals afgesproken zetten we alleen code in een versiebeheersysteem nadat
we gecontroleerd hebben of het compileert, linkt en niet meteen crasht.
We willen het hele project(je) onder versiebeheer plaatsen, dus de hele
boom met subdirectories src, include en doc.
In svnx kun je vanuit de Finder een heel project naar de repository
slepen. Een nieuw project dat -nog- nergens mee samenhangt kun je het
beste in de root van de repository zetten.
4.3 Working copies
Wanneer je je project voor de eerste keer in Subversion hebt gezet
is het verstandig om even te proberen of je het ook echt uit het archief
kunt trekken en op een andere plaats neerzetten. Dan weet je zeker dat
het goed in het systeem staat en bovendien creëer je daarmee een
'working copy' waar je vanaf dat moment mee verder kunt werken.
De oorspronkelijke code kun je dan eigenlijk net zo goed weggooien.
4.4 Veranderingen aanbrengen
Nu je project onder versiebeheer is kun je naar believen veranderingen in
je code aanbrengen, in de wetenschap dat je altijd terug kunt naar de
laatste stabiele versie. Nou ja stabiel... dat heb je grotendeels
zelf in de hand.
Je kunt in ieder geval terug naar versies die je eerder in Subversion
hebt gezet.
Aanpassingen doe je in files in jouw working copy.
4.5 Check-in (commit)
Wanneer je jouw veranderingen aan Subversion wilt toevertrouwen is het
verstandig om eerst te kijken of iemand anders nog veranderingen heeft
aangebracht sinds jij je files uit het systeem gehaald hebt. Dat doe je
met 'update'.
Na zo'n update kunnen jouw files veranderd zijn, dus controleer voor het
inchecken nog even of alles nog compileert. Daarna kun je met 'commit'
je veranderde files aan het systeem toevertrouwen. Vul altijd een korte
motivatie in waarom je een check-in doet. Daarmee kunnen jij en anderen
de historie van het project beter begrijpen.
4.6 Veranderingen bekijken
Met 'diff' kun je zien wat de verschillen zijn tussen jouw working copy
en het archief, of tussen verschillende versies van files in het archief.
Je ziet niet alleen je eigen wijzigingen, maar ook die van anderen.
4.7 Locks
Niet doen. Zie "Archiving and version control".