Versionshantering
Problem som uppstår i större (samt även mindre)
projekt:
■
Samtidiga ändringar.
Kålle och Ada öppnar samma fil för redigering vid var sin
dator. Om Kålle först sparar sina ändringar och Ada
därefter sparar sina, så går Kålles ändringar förlorade.
■
Misslyckade utvecklingssteg.
Kålle börjar arbeta på en större omskrivning av av
projektet, men inser efter en vecka att han är på fel spår
och vill då gå tillbaka till läget innan han började ändra.
■
Support av gamla versioner.
Fixa buggar i version 1.X efter att 2.X börjat utvecklas.
■
Hitta regressioner.
I vilket sammanhang introducerades viss kod.
1
Samtidiga ändringar
■
Tillåt bara en användare I taget.

■
Tillåt flera samtidiga användare, men varna vid
skrivning.

■
Kan ge tidsförluster om någon behöver vänta.
Mycket manuellt arbete om man ofta arbetar i samma
filer.
Tillåt flera användare. Kombinera flera olika
användares resultat automatiskt vid skrivning. Om
det uppkommer konflikter, tydliggör dessa och
varna användaren.

Problem med binärfiler, men bra lösning för källkod
och andra textfiler.
2
Misslyckade utvecklingssteg
■
Spara backupkopior av alla filer i lämplig katalog
tillräckligt ofta.

■
Lita på att driftavdelningen gör backup på
filsystemet och be systemadministratören
återställa läget för en vecka sedan.

■
Lätt att glömma, bara senaste backup tillgänglig.
Hur ofta görs backuperna?
Lagra alla filers alla versioner i en databas, där
man kan återvinna vilken version som helst.

Gör det också lättare att ge support för gamla
versioner.
2.0
1.0
2.3
1.8
3
Grundläggande egenskaper
Kan lagra projekt bestående av flera versioner av
träd av kataloger och filer i en central lagringsplats
(eng. repository).
■ Användare arbetar med separata lokala kopior av
projektet.
■ Användare kan när som helst spara sin lokala
kopia till den centrala lagringsplatsen, där den
utgör en ny version (eng commit/revision).
■ Användaren kan när som helst återgå till en
tidigare version.
■
4
CVS och SVN
■
CVS (Concurrent Version System).

■
SVN (Subversion). Nyare med lösningar på flera
problem i CVS.



■
Mest av historiskt intresse, men lever fortfarande kvar i
många projekt.
Versionshantering av hela katalogstrukturer istället för
separata filer, bättre stöd för att flytta filer.
Mindre risk för att binärfiler förstörs.
Lokal kopia av orginalfilerna, så man slipper ansluta till
servern för vissa operationer.
Fler alternativ nämns senare i presentationen.
Observera, det är obligatoriskt att använda något
versionshanteringssystem i den här kursen.
SVN rekommenderas.
5
SVN 1: Skapa en lagringsplats
■
Skapa en katalogstruktur som innehåller följande:

/
rooten
➔
trunk/
Katalogstruktur för den aktiva
versionen
-
➔
-
proj-1/
proj-2/
tags/
Innehåller referenser för att lätt
hitta släppta versioner.
-
■
Erat projekt, kan ha annat namn.
branches/ Förgreningar, här sker utveckling
och underhåll av gamla versioner.
-
➔
proj/
proj-1.0/
proj-1.1/
proj-2.0/
Detaljerade instruktioner på kurshemsidan.
6
SVN 2: Skapa lokal kopia
■
■
Placera dig i en lämplig katalog
Kör följande kommando:



■
svn checkout URL
För student1, i grupp 01 är URL (förutsatt att man
använt repo och proj som namn):
svn+ssh://[email protected]/chalmers/groups/tda366-09-01/repo/trunk/proj
Ger en katalog med namnet proj. Den innehåller
projektets katalogstruktur, samt en katalog som
heter .svn med filer som subversion behöver.
7
SVN 3: Redigering
■
svn add filnamn

■
svn commit -m ”Lade till funktion x”

■
Gör att filnamn versionshanteras.
Skickar upp en ny version till den centrala
lagringsplatsen.
svn update


Laddar ner de senaste ändringarna från den centrala
lagringsplatsen och kombinera med dina lokala
ändringar.
Kan ge konflikt, om du ändrat på samma ställe i en fil
som någon annan.
8
SVN 4: Hämta information
■
svn status


■
svn log

■
Ger information om alla versioner, med det
meddelande som gavs vid commit.
svn update --revision N

■
Ger information om statusen för dina lokala kopior av
filerna. T.ex. A (Added), M (Modified) eller C (Conflict).
I det sistnämnda fallet behöver du lösa konflikten innan
du kan fortsätta.
Flaggan -u kan användas för att se centrala ändringar.
Gå tillbaka till en gammal version. N kan vara
versionsnummer eller datum som {2008-04-10}
svn diff

Se vilka ändringar du gjort
9
SVN 5: Konflikter
Om man har konflikt i en fil så kommer svn att
markera konflikten i filen, t.ex. MyClass.java.
for (int k = 0; k < MAX; k++)
<<<<<<<< .mine
time[k] = 0;
========
time[k] = INFTY
>>>>>>>> .r7
init = 0
Ovanför likhetsteknen finns din version, under finns
någon annans. Du får nu bestämma vad som är rätt och
efter att du tagit bort konfliktmarkerarna gör du:
■
svn resolved MyClass.java
10
SVN 6: Lära sig mer
■
Mer information om subversion finns på:

http://svnbook.red-bean.com
Finns plugin till eclipse, subclipse.
 http://subclipse.tigris.org/
■ Windows-användare kan använda TortoiseSVN.
 http://tortoisesvn.tigris.org/
■
11
Allmänna råd
■
Lägg bara upp källkod, bilder och liknande.


■
Se till så att det kompilerar innan ni kör commit.


■
Mycket irriterande för andra om update introducerar
kompileringsfel.
Gäller också att se till så alla nya filer läggs till.
Undvik exotiska tecken (t.ex. å, ä och ö) i filnamn.

■
Undvik att lägga upp classfiler och andra genererade
filer.
Använd svn rm och commit om felaktiga filer läggs till
av misstag.
Kan leda till problem på olika system.
Se till så stora och små bokstäver är rätt i
filnamnen innan de läggs upp.

Att bara ändra mellan stora och små bokstäver i
efterhand kan ge problem.
12
Distribuerad versionshantering
■
Varje användare har en egen kopa av
versionsdatabasen.


■
Bättre stöd för icke-linjär utveckling.


■
Kan arbeta helt självständigt utan att ansluta till den
centrala servern.
commit sparar versioner lokalt. push/pull för att
synkronisera med andra.
Olika personer kan arbeta på olika förgreningar (eng.
Branches).
Förgreningarna kan lätt kombineras (eng. merging).
Ingen strikt hierarki


Alla kan skicka/ta emot ändringar utan att behöva gå
via den centrala servern.
Gör att även personer som bara har läsrättigheter lätt
kan göra större förändringar.
13
Olika alternativ
■
Git http://git-scm.com/


■
Mercurial (Hg) http://www.selenic.com/mercurial/

■
Används för Linux-kärnan, X.Org, Google Android,
VLC mfl
Finns installerat på studat.
Används bl.a. av Mozilla och Sun.
Darcs http://darcs.net/


Används av diverse haskell-projekt.
Finns via unsup.
➔
■
echo unsup >> $HOME/.vcs4/pathsetup
Prata med er handledare om ni vill använda något
annat än SVN.
14
Git 1: Skapa databas
■
Gör följande för att skapa versionsdatabas












mkdir proj1
cd proj1
git init
Lägg till de första filerna (eventuellt bara .gitignore)
git add .
git commit -m ”Initial commit”
cd /chalmers/groups/tda366-09-01/
mkdir proj1.git
cd proj1.git
git --bare init --shared
git --bare fetch ~/proj1 master:master
chgrp -R tda366-09-01 .
15
Git 2: Ladda ner lokal kopia
■
Varje person behöver göra följande:

git clone REPO där REPO t.ex. är
-



[email protected]:/chalmers/groups/tda366-09-01/proj1.git
cd proj1
git config user.name 'Ditt namn'
git config user.email '[email protected]'
16
Git 3: Redigera
■
git add fil.java

■
git commit -m ”Fixade bug”

■

Hämta senaste ändringarna från er centrala databas
origin är den databas du klonade, andra går att lägga
till med git remote
git merge origin/master



■
Spara indexet som en ny version.
git fetch origin

■
Spara senaste ändringarna från fil.java i index.
Kombinera dina lokala ändringar med andras
master är standardförgreningen
fetch+merge kan kombineras med:
git pull origin master
git push origin master

Skicka upp dina ändringar till den centrala databasen17
Git 4: Förgreningar
■
git branch namn

■
git checkout namn


■
Flytta över till förgreningen namn
Används också för att hämta objekt från databasen
Större ändringar är lämpligt att göra på ny
förgrening:






■
Skapar en ny förgrening med namnet namn
git branch temp
git checkout temp
Repetera: redigera, testa, add, commit
git checkout master
git merge temp
git push origin master
Kan byta över till master eller annan förgrening för
18
ändringar som inte är relaterade till temp
Git 5: Mer information
■
git gui och gitk

■
git svn

■
Låter dig använda git lokalt men arbeta mot en central
SVN databas.
Git för windows


■
Grafiska program för att göra mycket av jobbet.
msysgit http://code.google.com/p/msysgit/
TurtoiseSVN-liknande interface under utveckling:
http://code.google.com/p/tortoisegit/
Eclipse plugin http://repo.or.cz/w/egit.git

Kräver att ni kompilerar själva.
19