Ã…ter

Bakgrund

För att subversion (eller som det oxå kallas svn) skall funka smidigt, så bör man aktivera automatisk ssh inloggning,
annars kommer man att få slå lösenord för varje operation, ganska enerverande... Kolla ssh howton om hur man gör det.

Ej Publikt projekt

Detta förfarande skapar antingen helt privata repositorys eller om man vill sådana som är delade för alla med konto på denna server.

Skapa nytt repository

Först måste man skapa ett nytt (tomt) projekt på servern.
Vill man skapa ett helt privat projekt, byt ut prefixet /usr/local/svn nedan mot någonstans i ditt hemma träd, ex /home/username/proj
mkdir /usr/local/svn/myproject
svnadmin create /usr/local/svn/myproject

Låt kollergorna få access

Om man vill dela projektet med övriga utvecklare, så måste man ge dem access. Detta bör man lämpligen göra med alla projekt under /usr/local/svn
chgrp subversion /usr/local/svn/myproject
chmod -R g+rws /usr/local/svn/myproject
Nu har vi skapat ett tomt repository som kan användas på denna server.

Gör lokal koppling

Detta är linux/mac förfarandet, för windows googla...
Detta gör man på varje system från vilket man vill koppla sig till detta repository.

Rent principiellt kan det heta vad som helst, men det är smidigare om man använder samma namn på repositoryt lokalt och på servern...

Förfarandet är det samma om man vill checka ut ett projekt som någon annan redan påbörjat, checkar ut ett tomt nytt projekt eller vill överföra ett befintligt lokalt standalone proj till ett svn repository. I det sista fallet måste den lokala pathen peka på toppen av det redan befintliga projektet, annars spelar det ingen roll vars man lagrar lokal kopia

svn co svn+ssh://samsok.museum24.se/usr/local/svn/myproject /home/username/proj/myproject

Om det var ett lokalt proj som redan hade innehåll

Alla saker som ligger i det lokala repositoryt men inte är incheckade i svn visas med ? först på raden.
Dessa skall checkas in i svn, enda undantagen är lokala config filer som inte bör vara identiska hos alla, exempelvis settings.py filer, mer om vad man gör med dem lite senare.
Man kan lägga till en eller flera på samma rad
cd /home/username/proj/myproject
svn status
?      src2
?      foo.py
?      foo2.py
svn add src2
svn add foo.py foo2.py
När man laggt till allt man vill publicera kollar man igen med
svn status, allt som kommer att synkas visas med A först på raden
svn status
?      settings.py
A      src2
A      src2/extra
A      src2/extra/__init__.py
A      src2/foo1.py
A      foo.py
A      foo2.py
Dags att publicera!
svn commit -m 'Initial checkin'
svn status
?      settings.py
Efter en commit så bör man bara se de filer som inte är versionshanterade när man kör svn status

Specialfiler som inte skall vara identiska på varje system

Vissa filer vill man inte synka, men man vill ändå ha ett referns exemplar, så man smidigt kan skapa en lokal kopia på nya system.
Lämpligt då är att kopiera filen till ett annat namn och inkludera denna kopia i subversion
cp settings.py settings.py-exempel
svn add settings.py-exempel
svn commit -m 'exempel fil'
Detta gör att vid initial checkout får man en settings.py-exempel som man kopierar till settings.py och modifierar lokalt, denna konfig fil kommer inte att påverkas av framtida synkningar

Om det var ett projekt som redan fans på servern

När man kör svn co svn+ssh... så bör man få en listning av alla filer som checkas ut
A    /home/username/proj/myproject/src2
A    /home/username/proj/myproject/src2/extra
A    /home/username/proj/myproject/src2/extra/__init__.py
A    /home/username/proj/myproject/src2/foo1.py
A    /home/username/proj/myproject/foo.py
A    /home/username/proj/myproject/foo2.py
Checkade ut revision 1.

Om det var ett nytt (tomt) projekt

Checkade ut revision 0.

De viktigaste kommandona

Alla saker nedan utgår från att man beffiner sig i sitt projekts topdir, dvs i exemplen ovan /home/username/proj/myproject

Synka lokalt repository

svn update
Detta bör man göra varje gång man påbörjar en hacking session, så man har nyaste versionerna av allt.

Publicera

svn commit -m 'Intelligent kommentar'
Detta bör man göra lite då och då, lämpligen när man är i ett stabilt tillstånd

Lägg till nya filer och bibliotek

Om man skapat en ny fil så måste man även informera subversion om att den filen skall ingå. Detta är ganska lätt att glömma, därför bör man alltid köra en svn status innan man avslutar och kolla att man inte glömt att adda nytt material Om man addar ett dir så inkluderas automatiskt allt som ingår i diret
svn add nyfil.py
svn add nyttdir
svn commit -m 'lite nya saker'

Kolla att allt är ok

svn status
Före en status bör man alltid göra en commit, annars så listas filer som inte synkats ännu.
Endast filer som inte ingår i svn och ev. temp filer bör listas av en status, om en riktig fil listas så har man antagligen glömt att lägga in den, gör då
svn add nyfil/som/inte/har.addats

Hantera lokalt filträd

Man kan inte utanvidare flytta eller ta bort filer som ingår i ett repository. För att subversion skall informeras om vad man vill göra så använder man speciella kommandon.

Ta bort saker

svn remove foo.py 
När man tagit bort alla filer / bibliotek som skall tas bort måste man komma ihåg att synka denna ändring.
svn commit -m 'tar bort lite saker'

Flytta saker

svn move foo2.py src2/
Samma sak här, när man är klar måste man synka
svn commit -m 'flyttar saker'

Mer om svn

SVN Book
SVN Home page

Ã…ter