Hoe werk ik met SVN?

Wat is SVN?

SVN, voluit: subversion, is een hulpmiddel om bestanden uit te wisselen tussen de leden van een team.

SVN zorgt ervoor dat iedereen teamlid steeds over de laatste versies van alle project-files beschikt.

SVN houdt bij wie wijzigingen aanbrengt wanneer, aan welke files en op welke regels.

Dankzij SVN gaat kostbaar werk nooit verloren: je kan steeds terugvallen op vroegere versies van je project.

Waar vind ik SVN?

Er bestaan tientallen SVN-programma's, allemaal open-source. We zullen de werking van SVN verder demonstreren met TortoiseSVN, te vinden op de dowloadpagina. We veronderstellen dat de installatie vlekkeloos is verlopen.

Aan de slag

Checkout

We zullen nu een working copy aanmaken van ons project. Een working copy is, zoals het woord het zegt een kopie van alle project-files, waaraan je als teamlid kan werken.

Open een explorer-window en maak een folder aan waaronder alle project-files moeten komen. Rechts-klink op de folder en kies 'checkout...' in het menuutje.

Het context-menuutje in windows explorer heeft nu enkele optie bijgekregen. 1 van de opties is 'checkout...'  klik deze aan. Een dialoogvenster verschijnt.

checkout is de actie waarbij een nieuwe working copy wordt aangemaakt, vertrekkende van een bestaande repository. Een repository is dan weer de plaats waar SVN de historiek van alle wijzigingen bijhoudt.

Er verschijnt een dialoogvenster waarin wordt gevraagd naar de locatie van de repository. Kies voor de locatie https://svn.ulyssis.org/repos/pg/klinkermachine/trunk/trunk en klik OK.

Het dialoog venster vraagt naar de URL van de repository. Vul deze juist in. Laat de andere opties ongewijzigd en ga verder door op OK te klikken.

Een tweede dialoogvenster komt nu rapporteren over de checkout. Het zegt ondermeer dat het project in versie 96 zit en dat het op dat moment 212 files bevatte. Je bent nu klaar om met de files te werken.

Het rapport venster toont life hoever SVN staat met het aanmaken van de working copy en toont enkele statistieken. Merk op dat de checkout folder een kleurtje heeft gekregen.

Merk op dat de gekozen checkout folder (in dit voorbeeld 'C:/temp/klinkermachine') een ander icoontje heeft gekregen. Dit betekent dat SVN vanaf nu deze folder beheert, en dat je niet roekeloos onderliggende files en directories mag deleten of verplaatsen. Zie verder.

Commit

De clou van teamwerk is nu dat je, als teamlid, ... werkt. Stel even dat je de file 'startup.m' hebt aangepast. SVN maakt gewijzigde files zichtbaar door een rood icoontje. Je bent tevreden over de aanpassing en wil dit delen met de rest van het team.

Dit kan door 'Commit...' te selecteren van het rechtsklikmenuutje.

De file is gewijzigd, dit wordt zichtbaar gemaakt door een rood icoontje.

commit is de actie waarbij gewijzigde files worden opgestuurd naar de repository, zodat iedereen er aan kan.

Er verschijnt nu een dialoogvenster. Er wordt gevraagd een boodschap in te vullen die je wijzigingen omschrijft. Dit is niet strikt noodzakelijk, maar helpt je teamleden wel sterk.

Bovenaan in het dialoogvenster vul je een log-message in

Alvorens te committen, kan je nog even controleren wat je nu juist gewijzigd had. Dubbel klik op de file in de lijst in het dialoogvenster. Er verschijnt een diff venster.

Een diff is een vergelijking van 2 tekst-files. In dit geval wordt de oude versie van startup.m vergeleken met de nieuwe versie.

Links staat de oude versie en wordt aangeduid welke lijnen verwijderd zijn. Recht staat de nieuwe versie en welke lijnen er toegevoegd zijn

Je kan ook meerdere files tegelijkertijd commiten of ook hele folders...

Update

Je nieuwe versie van 'startup.m' staat nu in de repository. De andere teamleden moeten hun working copy nu actualiseren, zodat ook zij de nieuwe versie van de file binnenkrijgen.

Dit doen ze door de actie 'update...' te kiezen en OK te klikken.

Rechts klik op de hoogste SVN folder in de hierarchie. Klik op 'update...' en kies OK op het dialoogvenster dat verschijnt.

Conflicten

Een versie-conflict optreden bij het committen (als er iemand al een commit deed na uw laatste update) of bij het updaten (als er een bestand gewijzigd werd in de repository terwijl jij er ook aan werkte).

Een conflict oplossen kan via het commit of update dialoogvenster.

Het dialoogvenster toont opties om het conflict op te lossen

Het dialoogvenster toont de volgende opties om het conflict op te lossen:

resolve conflict using "theirs"
overschrijft jouw versie met de versie van de repository. Jouw wijzigingen gaan dan onheroepelijk verloren. Dit is de eenvoudigste oplossing.
resolve conflict using "mine"
overschrijft de versie van de repository met jouw versie. Dit zal waarschijnlijk tot een nieuw conflict leiden.
compare with working copy
voert een diff uit. Hiermee kan je kan lijn per lijn conflicten oplossen op de bovenstaande 2 manieren. Enkel bruikbaar voor tekstbestanden.

Speciale acties

In een working copy mag je niet zomaar wat rommelen met files, anders wordt de working copy corrupt (lees: waardeloos).

Een file van naam veranderen of verwijderen doe je door rechts op de file te klikken en het uitklapmenu 'TortoiseSVN...' te gebruiken.

Het volledige menu van TortoiseSVN bevat een hoop commando's waaronder rename en delete.

Files verhuizen naar andere directories kan door de files te selecteren en te slepen terwijl je de rechtermuisknop ingedrukt houdt.

De illustratie toont hoe men 'demo.m' verhuist naar de subdirectory 'tools'.

Klik rechts op demo.m en houd de muisknop ingedrukt. Sleep de muis naar tools en laat de rechtermuisknop los. Kies de eerste optie in het verschenen menu 'SVN move versioned files here'.

Probeer het aantal speciale acties tot een minimum te herleiden.

Beperkingen

SVN is bedoeld voor tekstbestanden (bvb. notepad files, m-files, Latex, html, xml, ...). Binaire files (afbeeldingen, Microsoft Word en Powerpoint, ...) zijn niet geschikt voor SVN. Je kan dergelijke files wel in de repository zetten, maar je kan niet nakijken welke regels er gewijzigd zijn.

Begrippenlijst

commit
Het uploaden van jouw wijzigingen naar de repository.
corrupt
Waardeloos. Een working copy waarin iemand heeft zitten knoeien is corrupt.
diff
Een aanduiding van de verschillen tussen 2 tekstbestanden.
repository
Een soort database waarin SVN alle historiek van een bepaald project bijhoudt. De repository staat meestal op een website.
update
Het binnenhalen van de laatste beschikbare versie van alle project-files.
working copy
Een lokale kopie van alle project files. De plaats waarin ieder teamlid kan werken.

FAQ

Stel dat ik commit voordat ik update, overschrijf ik dan files?
Neen, svn detecteert dit automatisch. Als er wijzigingen zijn gebeurd op verschillende regels in de file, wordt er automatisch een merge gemaakt. Hier merk je niks van. Er is pas een probleem als er wijzigingen op dezelfde regel zijn gemaakt. Dan krijg je een boodschap van SVN.

Credits

De volgende mensen gaven suggesties om deze tutorial beter te maken:

  1. Kurt Geebelen
  2. Andy Gijbels