• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

SVN (Subversion) Projekt anlgegen

rethus

Advanced Hacker
Hallo,
ich habe nun einiges gelesen über SVN, aber was mir noch nicht einleuchtet, wie lege ich selbst ein Projekt an, so dass SVN-Clients sich die Daten runterladen können?
Habe ein svn-verzeichnis unter /srv erstellt,
dann hab ich mit svnadmin create /srv/svn die Basis eingerichtet.

Wo und wie installiere ich denn jetzt meine Projektdaten?
 

nbkr

Guru
Wenn das Repository angelegt ist kannst Du mit svn import Daten in das Repository inital importieren. Ansonsten gehts mit svn add bzw. über einen entsprechenden SVN Client. Den besten Client den ich im Moment kenne ist SmartSVN. Gibt eine kostenlose Version davon. Ist aber leider nicht OpenSource.
 
OP
R

rethus

Advanced Hacker
danke schon mal für die schnelle Antwort.

SmartSVN hab ich mir auch gezogen, läuft auch wunderbar...
Nun muss ich nur noch den rest ans laufen bekommen.

Also ich versuche mal den Import mit SmartSVN... bitte helf mir da mal.
Den Server hab ich so gestartet:
svnserve -d --foreground -r file:///srv/svn

PS: darf das Repository - wenn es über ssh + web errecihbar sein soll - überhaupt dort liegen, oder muss das unter /srv/www/htdocs/svn liegen ?
Ich starte smartSVN und erstelle ein neues Profil ?!?

Auswahl bei den Radiobuttons (SVN)
Servername: 127.0.0.1
Repository Path: ??? ist das /srv/svn ???

Da erhalte ich die Fehlermeldung "svn:Malformed Netzwerkdata" beim Client, und der Server sagt:
svnserv: subversion/libsvn_subr/path.c:114: svn_path_join: Zusicherung »is_canonical (base, blen)« nicht erfüllt.
 

nbkr

Guru
Eins nach dem anderen. Wo das Repository liegt ist mehr oder minder Wurscht. Wenn es über Web erreichbar sein soll musst Du noch einen Apache2 mit den entsprechenden Modulen installieren und konfigurieren.

Den svnserve startet man glaube ich anders - ich habe gerade keine Linux da um das zu testen. Das file:/// muss da weg.

Der Repositorypath ins immer relativ zu dem was Du bei -r angeben hast. Insofern fehlt Dir noch ein Unterverzeichnis.

Mach also das folgende:
Code:
cd /srv/svn
svnadmin create projekt

Dann ist dein Repositorypath /projekt

Bei SVN legt man in aller Regel für jedes Projekt ein eigenes Repository an.
 
OP
R

rethus

Advanced Hacker
ich habs jetzt so gemacht:

Ich hab alle Unterordner von SVN gelöscht.
Dann hab ich mit svnadmin create scms ein neues Projektrepository angelegt.

Dann laut einer HowTo unter /srv/www/svn/scms/conf/svnserve.conf folgende Rechte gesetzt:
[general]
anon-access = none
auth-access = write
realm = scms

War das soweit richtig?
Was muss ich nun tun, um die Daten in das Repository zu bekommen?
 

nbkr

Guru
Du musst noch Benutzer anlegen die das Repository verwenden dürfen. Das geht im gleichen Ordner wie die Conf Datei. Da sollte schon ein passwd o.ä. liegen. Da kannst Benutzername & Passwort eintragen.

Danach startest Du den svnserver
Code:
svnserve -d -r /srv/www/svn/

Anschließend startest Du SmartSVN und machst einen Checkout. Dafür musst Du ein Repositoryprofil anlegen. Folgende Daten brauchst Du dafür:

Verbindungstyp: SVN (gibt noch svn+ssh, https ...)
Server: IP Deines Servers auf dem der svnserve läuft.
Path: /scms
Port: Standard
User & Passwort: Die Daten die Du oben eingetragen hast (nicht dein lokaler Benutzer).

Wenn Du svn nur lokal benutzen willst und auf Smartsvn verzichten kannst brauchst Du den svnserve übrigens nicht.
 
OP
R

rethus

Advanced Hacker
Also ich hab es nun genau so gemacht, wie du es gesagt hast.
Im SmartSVN konnte ich das Profil nun auch einrichten.

Nun hast du geschreiben, das ich ein Checkout machen soll. Ist der nicht dafür da, die Daten die auf dem svn-Server liegen mit den lokalen abzugleichen?

Wie bekomme ich denn jetzt meine daten auf den Server? Einfach die bestehenden Dateien in ein Verzeichnis unterhalb von scms kopieren?

PS: Die Verbindung soll über das Internet aufgebaut werden. Idealerweise sollte dazu eine ssh-Verbindung genutzt werden. Wie stell ich das an?
 

nbkr

Guru
Wenn Du svn+ssh nutzt brauchst Du keinen svnserve. Du musst also nur Systembenutzer pflegen die einen SSH Account haben. Dann musst Du im SmartSVN nur die Daten entsprechend abändern. Statt dem Pfad /scms gibts Du dann den kompletten Pfad auf dem Server an.

Der Checkout ist dafür da um eine initiale Arbeitskopie anzulegen. Diese Kopie der Daten liegt auf dem lokalen Rechner und hier änderst Du auch an den Dateien rum. Du fügst Daten hinzu, löschst welche, bearbeitst welche, etc.

Wenn Du Dateien zu lokalen Arbeitskopie hinzugefügt oder entfernt hast musst Du dies über SmartSVN machen (es gibt einen Add und Remove Button).

Nach getaner Arbeit machst Du einen Commit. Dadurch werden die Änderungen an den Server übertragen. Dieser speichert die Änderungen dann wieder im Repository und versieht sie mit einer Versionsnummer.

Der Import ist nicht unbedingt notwendig. Du kannst das auch über die Add Funktion machen. Import ist nur eine Abkürzung dafür.

Mehr dazu findet sich unter: http://svnbook.red-bean.com/
 
OP
R

rethus

Advanced Hacker
Inhalt nachträglich gelöscht, weil ich weiter unten die Lösung gefunden habe...
Thread aber bitte noch offen lassen, da ich noch am ssh-zugang bastel :)
 
OP
R

rethus

Advanced Hacker
Nun schein ich es hinbekomen zu haben. Im SmartSVN habe ich den Wizard Projects>>Create-Modules durchlaufen. Nun scheint er die ganzen Daten in das Repository scms eingelesen zu haben.

Toll, nun versuche ich, den ssh-zugriff hinzubekommen.

Vielen Dank schon mal für deine Hilfe!!!
 
OP
R

rethus

Advanced Hacker
Also, über den oben beschriebenen Vorgang habe ich das Verzeichnis mit den eigentlichen Daten eingelesen.
Da sehe ich auch aktuell einiges angezeigt. Aber die Datengröße des Verzeichnisses "srv/www/scms/ passt niemals mit der des Projektes srv/www/htdocs/scms_stable" überein. Was mach ich denn hier falsch... :cry:
 

nbkr

Guru
Vermutlich ist die Datengröße höher - ist auch kein Wunder, SVN muss ja die Daten an sich plus die Verwaltungsdaten speichern.
 
OP
R

rethus

Advanced Hacker
dasRepository hat 128 KB, mein Projekt über 6 MB.

Hab es nun nochmal nach der Anleitung gemacht, die du mir gepostet hast.
Hab ein neues Verzeichnis erstellt:
/srv/www/svn/,

dann das Verzeichnis für Subversion brauchbar gemacht
svnadmin create /srv/www/svn
dann habe ich das die Verzeichnisstruktur erstellt, mit der SubVersion arbeitet
mkdir trunk
mkdir branches
mkdir tags
(siehe auch http://thomas.dohmke.de/de/artikel/subversion] )
dann ...
was ich überall gesucht habe, den Befehl um die Daten erstmal da reinzubekommen:
svn import /srv/www/htdocs/SCMS_Stable file:///srv/www/svn -m "initial import"
.

Soviel erstaml zum erstellen der Ausgangsbasis. Nun gehts weiter mit ssh zugriff...

to be Continued
 

nbkr

Guru
Mit dem Import hast Du dir gerade die Ordnerstrucktur zersiebt. Das mit branches, trunk und tags ist nur eine Richtlinie. SVN braucht das nicht, Du kannst die Ordnerstruktur komplett so aufbauen wie Du willst. Lies dir einfach mal das SVN Buch aus dem Link von oben durch. Da kommst Du schneller zum Ziel als wenn Du hier und da rumstocherst.
 

nbkr

Guru
Also nochmal:

Voraussetzungen:
ServerIP: 10.0.0.1
SVNRoot auf dem Server /opt/svnroot
Projektname das verwaltet werden soll: myproject
Benutzer der vom Client auf den Server zugreifen soll: myuser (user ist auf dem Server bereits angelegt)

Auf dem Server existiert eine Gruppe svn.

Ordner der auf dem Client alle Projektdaten enthält: /home/bla/projekt

Als root auf dem Server
Code:
1. Auf dem Server svn installieren
2. mkdir /opt/svnroot
3. cd /opt/svnroot 
4. svnadmin create myproject
5. chgrp -R svn /opt/svnroot
6. chmod -R 0770 /opt/svnroot
7. User myuser der Gruppe svn hinzufügen.

Auf dem Client
[/code]
1. svn installieren.
2. cd /home/bla/project
3. svn import ./* svn+ssh://myuser:password@10.0.0.1/opt/svnroot/myproject -m "Erste Dateiimport"
[/code]

Die Daten sind jetzt importiert. Gehen wir dran einen Checkout zu machen damit wir auch eine lokale Arbeitskopie haben

Auf dem Client
Code:
1. cd /home/bla
2. svn checkout svn+ssh://myuser:password@10.0.0.1/opt/svnroot/myproject

Fertig. Jetzt liegt auf dem Client unter /home/bla/myproject die lokale Arbeitskopie. Auf dieser werden Änderungen durchgeführt. Den Ordner /home/bla/projekt braucht man im Prinzip nicht mehr.

Zum Abschluss noch ein paar kleine Änderungen an der Arbeitskopie zwecks demonstration.

Datei dem Projekt hinzufügen.
Code:
1. cd /home/bla/myproject
2. touch test.txt
3. svn add test.txt (hier wird die Datei der lokalen Kopie hinzugefügt)
4. svn commit -m "Datei hinzugefügt" (hier werden die lokalen Änderungen zum Server geladen)
Datei verändern
Code:
1. cd /home/bla/myproject
2. echo "bla" >> test.txt
3. svn commit -m "Datei test.txt bearbeitet"
Datei aus dem Repository löschen
Code:
1. cd /home/bla/myproject
2. rm test.txt
3. svn remove test.txt
4. svn commit -m "Datei entfernt"
Hinweis: Dateien können nie endgültig gelöscht werden. In alten Versionen des Projekts findet sich die Datei wieder. Das ist ja auch Sinn einer Versionsverwaltung. Wenn man aus versehen mal eine Datei löscht kann man sie dadurch wiederherstellen.
 
OP
R

rethus

Advanced Hacker
Wow echst spitze...
Danke für deine Mühe.
Hätte da nur ne Frage bezüglich der Ordner :
trunk
branches
tags
Sind die sinnig? In der deutschen HowTo stand, das man seine Projektdateien in dieser Ordnerstruktur unter trunk ablegen soll.
Kannst du mir das empfehlen, und wenn ja, warum?

Thanks nochmal für die Mühe.
 

nbkr

Guru
Also wie Du deine Ordner organisiert bleibt ganz dir überlassen. Ich persönlich mach das so wie in dem Buch beschrieben.

Ich mach das eigentlich immer so:

Die aktuellen Entwicklerdaten sind in "trunk" sozusagen die "dev" Version.

Sobald ich eine stabile Version habe lege ich einen Unterordner "tag/<version>" an und kopiere die aktuellen Entwicklerdaten da hin. Wobei ich <version> durch die aktuelle Versionnummer ersetze als V2_10 oder was auch immer.

Dieser Ordner wird dann nicht mehr angefasst. Taucht nu ein Bug in der V2_10 auf kopiere ich den Ordner nach "branches/V2_10_bugfixing" und korriegre den Bug darin. Anschließend gibts ne neu stable Version V2_10_1 dei dann wieder nach tags kopiert wird.

Das ganze hat den Vorteil das ich unter trunk immer weiterentwickeln kann und gleichzeitig alte stabile Versionen bugfixen kann ohne dabei mit den neuen Features der Entwicklerversion in die Quere zu kommen.

Der Tags Ordner hat den Vorteil das ich immer alte Versionsstände da habe ohne umständlich exportieren zu müssen.
 
Oben