Subversion ist eine freie Software zur Versionsverwaltung. Es legt eine lokale Arbeitskopie ab, mit der normal (und offline) gearbeitet werden kann. Änderungen werden nur noch als Delta (Differenzübertragung) übertragen, was sowohl beim Abgleich mit subversion-Repositorys als auch beim upload Zeit und Bandbreite spart. Konflikte können in den meisten Fällen automatisch aufgelöst werden.
Gegenüber dem alten CVS wurden einige Unzulänglichkeiten beseitigt, z. B. beim Umbenennen von Dateien.
Zugriffsmöglichkeiten | |
---|---|
Schema | Zugriffsart |
file:/// | direkter Zugriff (lokales Verzeichnis) auf das Repository |
http:// | Zugriff über Webserver (mit WebDAV und svn-Erweiterung) |
https:// | wie oben aber mit SSL-Verschlüsselung |
svn:// | Zugriff auf einen svnserve-Server |
svn+ssh:// | wie oben, aber durch einen SSH-Tunnel |
siehe auch:
ausführlichere Liste von Subversion Clients.
svn checkout http://URL.de/repository/Unterzweig
)Eine ausführlichere Erklärung: Vokabular der Versionsverwaltung
In der Open-Source-Szene hat sich eine Struktur durchgesetzt, die externen Entwicklern eine schnelle Orientierung ermöglichen.
Üblicherweise findet man drei Ordner:
Siehe auch: Repository Layout.
Dateien in Arbeitskopien können dabei in einer der vier Zustände sein:
update
vornehmen, dabei wird subversion zuerst versuchen die Änderungen im Repository automatisch mit denen in der lokalen Arbeitskopie zu verbinden („mergen“). Wenn das nicht automatisch klappt (z.B. Änderungen an der gleichen Stelle), muss der Benutzer den Konflikt auflösen.Nach Eingabe von
svn update
wird die lokale Arbeitskopie auf den neuesten Stand gebracht, dabei entstehen Ausgaben wie:
U INSTALL
G README
C bar.c
Updated to revision 46.
Status | Bedeutung |
---|---|
U | Updated: Lokal nicht geändert, die neue Version aus dem Repository wird heruntergeladen |
G | merGed: Lokale und fremde Änderungen konnten ohne Probleme verschmolzen werden. |
C | Conflict: Ein Problem trat beim Verschmelzen (mergen) lokaler und fremder Änderungen auf. Dies ist vor allem der Fall, wenn bei Textdateien wo an der gleichen Stelle bearbeitet wurde oder einge Binärdatei ersetzt wurde. Bei Binärdateien ist keine Lösung möglich, man muss sich für eine der beiden Dateien entscheiden. Bei Textdateien muss man manuell nachbessern (von Hand mergen). Solange bleibt die entsprechende Datei im Konflikt. |
D | Deleted: In der Arbeitskopie gelöscht. |
A | Added: In der Arbeitskopie hinzugefügt. |
svnadmin create /Pfad
cd /Pfad chown -R www-data *
svn checkout file:///Pfad
svn add datei1 datei2
. Dateien kann man mit
svn delete datei1 datei2
auch wieder entfernen.
svn commit -m "Kommentar für die Änderungen"
svn import [VERZECHNIS] file:///var/svn/projekt -m "erster Import"
Dann sollte man in etwa so etwas erhalten
Hinzuf. (bin) [VERZECHNIS]/images/bild.gif Hinzufügen [VERZECHNIS]/webseite.htm Revision 1 übertragen.
Pfadnamen in Windows, die auf einem anderen Laufwerk liegen, müssen übrigens so angegeben werden:
file:///X:/Pfad
bzw.
"file:///X|/Pfad"
die Anführungsstriche sind wichtig damit svn nicht das Pipe-Symbol ( | ) als Befehlstrenner interpretiert.
Das ganze geht natürlich auch übers web:
svn import /ORDNER/ svn+ssh://example.com/var/svn-repos/project_1/Ordner -m "gewünschte Meldung im Log"
Eine lokale Arbeitskopie (bzw. ein checkout) erstellt man mit
svn checkout svn+ssh://domain.de/Pfad/zum/Projekt --username USER
hier benutzt subversion ssh und checkt dann die aktuelle Version auf dem Server „domain.de“ aus dem Verzeichnis „Pfad/zum/Projekt“ aus.
Wenn man eine bestimmte (ältere) Revision haben will, muss man den Parameter -r und die Nummer der Revison angeben. Weitere Möglichkeiten listet die Hilfe mit dem Befehl svn help checkout
auf.
Als Kurzschreibweise für checkout
kann man auch co
schreiben.
svn list https://domain.de/projekt --username USER
Erstmal ins Verzeichnis der Arbeitskopie wechseln.
Die Bearbeitungshistorie ergibt sich auch durch die Bearbeitungshinweise der einzelnen „Committer“. Diese Liste kann mit dem Befehl
svn log
abrufen.
Lokal geänderte und neue (lokale) Dateien gibt der Befehl
svn status
aus. Dabei werden Statuscodes verwendet.
Buchstabe | Statuscode |
---|---|
A | Additon: Datei/Verzeichnis/Symbolischer Link wurden für die Aufnahme in das repository ausgewählt. |
C | Conflict: Die Datei ist im Konflikt |
D | Deletion: Datei/Verzeichnis/Symbolischer Link wurden für die Löschung im repository ausgewählt. |
M | Modified: Die Datei wurde lokal geändert. |
Die Änderungen in den Dateien kann man mit
svn diff
auswerfen lassen. Optional kann man eine bestimmte Revision zum Vergleich auswählen: -r1. Die Änderungen bei Binärdateien sind natürlich wenig Aussagekräftig.
Die letzte im Repository gespeicherte Version gibt der Befehl
svn cat DATEI
aus. Bei Bedarf kann auch eine spezieller Revision mit der Option -r VERSION
abgerufen werden.
Beispiel: Änderung zwischen Revision 2 und 3 betrachten:
svn diff -r 2:3 [Datei]
Die Änderungen können auch wieder auf die letzte bzw. eine ältere Version zurückstellen:
svn revert
Wenn man sich eine Arbeitskopie erstellt hat, geht das hochladen von Änderungen ohne weitere Angaben:
svn commit
Es trat ein Problem beim Verschmelzen (mergen) lokaler und fremder Änderungen auf, die subversion nicht automatisch auflösen kann. Deshalb legt subversion drei Dateien an:
DATEINAME.r45
): Die letzte ausgecheckte Version. Damit war sie Basis für die lokalen Änderungen die dann zum Koflikt geführt haben.DATEINAME.r46
): Die letzte (und aktuelle) Version aus dem Repository. Den Konflikt einer Datei (Status C) kann man auf drei Arten beheben:
svn diff
an und macht eine gemeinsame Version draus. Wenn man sich sicher ist, den Konflikt gelöst zu haben, wird die Datei mit
svn resolved DATEINAME
gekennzeichnet und löst danach ein commit
aus.
svn commit -m "Fall gelöst"
svn resolved DATEINAME
die Entscheidung bekannt.
svn revert DATEINAME
Manchmal will man bestimmten Dateien permanent Eigenschaften zuweisen, beispielsweise Programme als ausführbar zu markieren:
svn propset svn:executable ON DATEI
svn switch --relocate Quell-URL Ziel-URL
Kurzfassung des Artikels Setting up Subversion and websvn on Debian, ist zu hastig für Einsteiger, aber ich brauchs als Erinnerung
apt-get install subversion libapache2-svn
mkdir /var/svn-repos/
groupadd subversion
und addgroup [USER] subversion
chown -R www-data:subversion /var/svn-repos/*
und chmod -R 770 /var/svn-repos/*
svnadmin create --fs-type fsfs /var/svn-repos/project_1
a2enmod dav dav_svn
<Location /svn_projekt> DAV svn SVNPath /var/svn/projekt AuthType Basic AuthName "Infosystem Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user SSLRequireSSL </Location>
apache2 -t
apache2ctl restart
ODER /etc/init.d/apache2 restart
Wenn man einen anderen SSH-Port als 22 benutzt, muss man dieses Subversion mitteilen. Dies geht entweder über eine Umgebungsvariable:
export SVN_SSH="ssh -p 123456"
oder man konfiguriert ssh.
svn cleanup