Subversion guide

From Peters wiki
Revision as of 14:04, 7 January 2012 by Peter (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Sätt upp din versionshanterande miljö

Vi startar med att sätta upp ett litet projekt testProj. Skapa de filer och bibliotek vi tänker jobba med:

user $ mkdir testProj
user $
cd testProj
user $
mkdir branches tags trunk

I trunk lägger vi de filer vi ska jobba med, i det här fallet bara en fil som heter file1.txt:

user $ cd trunk
user $
nano -w file1.txt
file1.txt
Detta är en liten textfil som vi använder
för att testa svn.

Här vill vi ha vårt repository:

user $ mkdir svnroot

Nu skapar vi vårt repository där de versionshanterade filerna ska ligga. I detta repository ska vi i princip aldrig röra något.

user $ svnadmin create /home/mats/svnroot/repos

Nu flyttar vi in våra filer i vårt nya repository.

user $ svn import testProj file:///home/mats/svnroot/repos/testProj

Skriv en liten kommentar i editorn som dyker upp, spara texten och stäng sedan editorn.

Adding         testProj/trunk
Adding         testProj/trunk/file1.txt
Adding         testProj/branches
Adding         testProj/tags

Committed revision 1.

Ta en titt på ditt repository:

user $ svn list file:///home/mats/svnroot/repos/testProj
branches/

tags/

trunk/

Editera en fil

Nu kan vi testa att checka ut vårt projekt och göra en ändring. När vi checkar ut projektet flyttas en kopia av det över till det biliotek vi står i när vi ger kommandot.

# mkdir tmp
# cd tmp
# svn co file:///home/mats/svnroot/repos/testProj
A    testProj/trunk
A    testProj/trunk/file1.txt
A    testProj/branches
A    testProj/tags
Checked out revision 1.

Vi kan nu editera vår fil som vanligt och titta på den efteråt.

# cat file1.txt
Detta är en liten textfil som vi använder
för att testa svn.
Har lagt till en rad.

Tittar vi på den från svn ser vi dock inte ändringen ännu, eftersom vi inte har checkat in ändringarna än, dvs svn läser filen i repositoriet och inte den lokala.

# svn cat file1.txt
Detta är en liten textfil som vi använder
för att testa svn.

Med kommandot status kan vi se vad vi ändrat för något.

# svn status
M      file1.txt

Vi kan nu göra commit på våra ändringar:

# cd /home/mats/tmp/testProj
# svn ci -m "En första checkin"
Sending        trunk/file1.txt
Transmitting file data .
Committed revision 2.

Och nu syns ändringen även av svn:

# svn cat trunk/file1.txt
Detta är en liten textfil som vi använder
för att testa svn.
Har lagt till en rad.

Vi kan se en log över vad som ändrats:

# svn log
------------------------------------------------------------------------
r1 | mats | 2008-03-13 08:53:02 +0100 (tor, 13 mar 2008) | 2 lines

First version

------------------------------------------------------------------------

Med status kan vi se statusen på vårt projekt:

# svn status -v
                1        1 mats         .
                1        1 mats         trunk
                2        2 mats         trunk/file1.txt
                1        1 mats         branches
                1        1 mats         tags

Första siffran anger working version, dvs vilken version av repository:t som filen kommer ifrån och den andra anger vilken senaste version av repository:t som filen ändrades i. Om man synkar upp till senaste version av repository:t med kommandot:

# svn up

så kommer första siffran på alla filer ändras till en 2:a. Om du ska göra flera ändringar är det bara att fortsätta editera, och sedan ev. checka in ändringarna. En checkout, hämtar bara en kopia av det som finns i repository:t och lägger i din workspace så att du kan jobba med filerna. Är ni flera användare, eller om du av någon anledning editerar från flera maskiner kommer

# svn up 

att lyfta in eventuella ändringar som gjorts av andra.


Skapa en branch

För att skapa en branch direkt i repository:t så gör man en kopia av t.ex. ett projekt från en viss version av repository:t och kopierar denna till branch katalogen. Man kan alltså skapa brancher direkt utan att ha någon workspace, men man kan också skapa brancher genom att kopiera mellan en workspace och repository:t och vice versa. Template:Box Kod

Skapa en label

Det finns inga direkta lablar i subversion liknande de som t.ex. finns i ClearCase. Istället så skapar man en kopia av en specifik version av repository:t och kallar denna för ett visst namn. Detta blir vår label. Detta är alltså samma manöver man gör när man skapar brancher. Enda skillnaden är man lägger kopia under den rekommenderade katalogen tags. Och man bör inte checka in ändringar till dessa kopior. Utan jobb bör göras under branches eller trunk och under tags ligger bara namngivna versioner, dvs våra s.k. lablade versioner. Template:Box Kod Dessa repository kopior är gratis, dvs de kostar ingen tid att skapa och de tar ingen extra plats i repository:t. Förrutom lite plats för meta-datat. Samma sak gäller brancher. Men ändringar som görs på en branch och sedan checkas in tar självklart mer plats i repository:t. Historien bevaras också vid en subversion kopiering. Man kan spåra från vilken repository version som branchen eller labeln skapades ifrån.

Keyword substitution

Med keyword substitution kan man få viss text att uppdateras automatiskt av svn. Genom att använda sig av tex keyword "Id" i en fil kan man få svn att uppdatera filen med information om vem som senast checkade in ändringar i filen, när detta gjordes samt i vilken version. Här är ett exempel på hur det kan se ut:

$Id: filename.abc 452 2008-11-06 06:56:55Z mats $

För att åstadkomma detta: Lägg in keyword Id någonstans i filen.

Här är texten innan ditt keyword.
$Id$
Här är texten efter ditt keyword.

Template:Box Kod Varje gång du sedan checkar in filen kommer texten i filen vid Id att uppdateras.