Posts Tagged ‘Windows’

Arbeiten mit SVK

Monday, May 5th, 2008

SVK dezentrale Versionskontrolle auf Subversion Basis
Mit SVK ist es möglich eine lokale Kopie des SVN vorzuhalten und auch ohne Internet bzw. Netzwerkverbinung zum Subversion-Server weiter zu arbeiten und alle Vorteile eines SCM (Source Code/Control Managementsystem) zu nutzen.

Wie konfiguriere ich SVK?
Nach der Installation von SVK muss das lokale Repository eingerichtet werden das die SVN Projekte aufnimmt und offline zur Verfügung stellt.

1. Erstellen des Repository-Verzeichnisses z.B. ”D:\User\Fabian\SVK”

2. Setzen der Umgebungsvariablen für das Repository mit SVKROOT=D:\User\Fabian\SVK

3. Starten einer Command-Shell

4. Initialisieren des lokalen Repositories mit
svk depotmap --init

5. Versioniertes Verzeichnis im Repository für die eigenen Projekte erstellen (lokaler branch)
svk mkdir //local -m "create locale branch dir"

6. Versioniertes Verzeichnis mirror für die remote SVN-Projekte erstellen (mirror branch)
svk mkdir //mirror -m "create mirror branch dir"

Wie wird eine Offline-Kopie eines Projektes aus dem Subversion erstellt?
Wenn der SVN-Server eine Authentifizierung benötigt und der Username vom angemeldeten Usernamen abweicht ist die einfachste Variante um SVN und somit auch SVK die Login-Daten anzugeben der folgende Befehl.
svn list --username username http://svn-server/Projektname/trunk/

Mit dem Befehl wird das Projektverzeichnis angezeigt und vorher der User authentifiziert. Subversion merkt sich die Usernamen und Passwort Einstellungen und SVK kann mit den folgenden Befehlen das Subversion spiegeln.

1. Konfiguration des SVN Mirrors mit
svk mirror http://svn-server/ //mirror/

2. Die Mirror Einstellung können mit folgenden Befehl geprüft werden
svk mirror --list

3. Holen des Projektes vom SVN-Server mit kompletter Revisionshistorie
svk sync //mirror/Projektname

# Nur HEAD Revision synkronisieren
svk sync –skipto HEAD //mirror/Projektname

Wie ist der Workflow wenn ich SVK benutze?
1. Wenn notwendig den Mirror aktualisieren falls sich auf dem Server etwas geändert hat.
svk sync //mirror/Projektname

2. Lokale Kopie erstellen um bessere Kontrolle zu haben was in den Mirror kommt. (Optional)
svk copy //mirror/Projektname //local/Projektname

3. Vom lokalen branch oder vom mirror branch eine Arbeitskopie erstellen.
# Wenn mit dem vorher erstellten lokalen branch gearbeitet werden soll
svk checkout //local/Projektname/trunk

# Wenn mit dem mirror direkt gearbeitet werden soll
svk checkout //mirror/Projektname/trunk

4. Gemütlich vor sich hin programmieren wenn nötig und andere User etwas in den branch eingebracht haben die Arbeitskopie mit folgenden Befehl aktualisieren.
svk update

5. Wenn gewünscht neue Dateien hinzufügen, verschieben oder umbenennen mit den folgenden Befehlen.
svk add
svk move
svk rename

6. Die Änderungen in das Repository mit folgenden Befehl übernehmen.
svk commit

7. Wenn mit der lokalen Kopie gearbeitet wird kann mit folgenden Befehlen der lokale branch mit dem mirror branch synchronisiert werden. Dazu ist es notwendig am Firmennetz zu hängen damit dann die Änderungen an das Subversion übermittelt werden können.
# Testlauf des merges um Konflikte zu erkennen und zu beheben (Option -C)
svk smerge -C //local/Projektname/trunk //mirror/Projektname/trunk

# Wenn alle Konflikte beseitigt sind die Änderungen übernehmen
svk smerge -l //local/Projektname/trunk //mirror/Projektname/trunk

8. Wenn direkt mit dem mirror branch gearbeitet wird kann der folgende Befehl verwendet werden. Wenn Konflikte auftreten können diese behoben werden.
svk push

Wie kann ich das lokale SVK Repository mit TortoiseSVN bzw. dem SVN Kommandozeilen-Tool benutzen?
1. Lokale Kopie erstellen die als SVN Repository dient
svk copy //mirror/Projektname //local/Projektname

2. Mit TortoiseSVN das lokale SVK branch Projektverzeichnis als URL angeben und als Arbeitskopie auschecken. Mit dem Kommandozeilen-Tool ist der Befehl:
svn co -p file:///SVKROOT/local/Projektname/trunk Arbeitsverzeichnis

3. Wenn man am Firmennetz hängt vom Remote-Repository die letzten Änderungen holen und mit der lokalen Kopie abgleichen.
svk sync //mirror/Projektname
svk smerge //mirror/Projektname //local/Projektname

4. Arbeitskopie mittels TortoiseSVN oder SVN Kommando aktualisieren und wie gehabt mit Tortoise Arbeiten um die Änderungen in das offline Repository zu übernehmen. An diesem Punkt ist eine Verbindung zum Firmennetz nicht mehr notwendig da die aktuelle Kopie im lokalen Repository liegt.

5. Wenn man dann wieder am Firmennetz hängt und seine Änderungen an das Subversion-Server übergeben will sind folgende Befehle auszuführen.
# aktualisieren des mirror-branches mit dem Subversion-Server im Firmennetz
svk sync //mirror/Projektname/trunk

# Testlauf des merges um Konflikte zu erkennen und zu beheben (Option -C)
svk smerge -C //local/Projektname/trunk //mirror/Projektname/trunk

# Wenn alle Konflikte beseitigt sind die Änderungen übernehmen
svk smerge -l //local/Projektname //mirror/Projektname

Erfahrungen mit SVK

Sunday, May 4th, 2008

Auf meiner Arbeit wird Subversion (SVN) eingesetzt, da wir aber auch Vorort beim Kunden oder Zuhause an Projekten arbeiten und nicht immer ein online Zugriff auf das firmeninterne Subversion möglich ist, habe ich mich nach einem Versionsverwaltungsystem umgesehen das auf SVN basiert und verteiltes offline arbeiten ermöglicht. So bin ich auf SVK, einem dezentralisierten Versionsverwaltungssystem, gestoßen.

Die Installation unter Windows ist unproblematisch, da ein Installer existiert der alles notwendige mitliefert. Das selbst bauen unter Windows mit Perl via CPAN ist nicht zu empfehlen, da sehr viele Abhängigkeiten existieren und vorher auch die Subversion Development-Libs gebaut werden müssen. Unter Mac OS X ist die Installation via MacPorts oder CPAN problemlos zu bewerkstelligen.

Bei uns in der Firma läuft der Subversion Server unter Windows und stellt das Repository mittels WebDAV und einem Apache zur Verfügung. In den einzelnen Projekten können Datei- und Verzeichnisnamen mit Leerzeichen und UTF8 Sonderzeichen auftreten. Wenn mit TortoiseSVN auf solche Projekte zugegriffen wird gibt es keine Probleme. Wenn aber mit SVK ein Mirror-Depot erstellt wird, das Sonderzeichen speziell Leerzeichen in der URL enthält kommt es zu Problemen. Nach einigen Anfragen auf der SVK Mailingliste und etwas sehr nettem Geplauder mit den SVK Entwicklern ist dieses Problem mit einem Patch gelöst und das SVK ist für einen ausführlichen Test bereit.

Ich werde wenn ich den Produktiveinsatz getestet habe weiter berichten und ein kleines SVK HowTo und die notwendigen Patch-Files online stellen. Die Patches sind auch in die development Version von SVK eingeflossen und im Subversion des Projektes integriert. Somit wird mit dem nächsten Release das URL Problem behoben sein.