Sebastian Bauer (IT-Blog)

IT, Internet, Architektur, Technik, Technologie, Dienste, Hard- & Software

« Tipps & Tricks rund um das Thema E-Mail | Bloggen: Englisch für mehr Erfolg »

SVK: dezentrale Versionskontrolle mit Subversion (II)

Sebastian Bauer (augusto) - Freitag, 8. Dezember 2006
Tags für diesen Artikel: , , ,

In dem letzten Artikel wurde beschrieben wie man mit Hilfe von SVK einen lokalen Spiegel eines Subversion-Repositorys anlegt. Ebenso haben wir bereits mit dem lokalen SVK-Repository gearbeitet und mit svk commit die Änderungen eingecheckt. In der Zwischenzeit wurde jedoch auch das ursprüngliche SVN-Repository verändert, so dass wir nun die SVN-Seite mit unserem SVK-Abbild abgleichen müssen. Es wird in diesem Artikel (Original von Ron Bieber) darauf eingegangen wie wir unser lokales Repository synchron halten, unseren lokalen Branch abgleichen und neue Änderungen wieder in das Repository zurückführen.
Wie halten wir das SVK-Repository aktuell?
Ein Nachteil von unserem lokalen Spiegel ist, dass wir Änderungen im Haupt-Repository zunächst nicht mitbekommen. Gehen wir also davon aus, dass sowohl auf der entfernten, wie auch auf der lokalen Seite verschiedenste Änderungen durchgeführt worden sind. Dies können einfache Dateiänderungen, aber auch das Löschen kompletter Verzeichnisse sein.

Um wieder alle Seiten auf den aktuellen Stand zu bringen muss zunächst das SVK-Repository abgeglichen werden. Dies geschieht mit dem svk sync Befehl. Dies geht um einiges schneller als beim ersten Abgleich, da nur noch Änderungen übetragen werden. Hierfür brauchen wir natürlich wieder eine Netzverbindung zu unserem Subversion-Repository.

svk sync //mhccms/trunk
Syncing svn://goofy/mhccms/trunk
Retrieving log information from 16 to 16
Committed revision 12 from revision 16.

Somit wurde der lokale Spiegel abgeglichen und wir können wieder ohne Netzanbindung weiter arbeiten.

Abgleich des lokalen Branch
Um sicher zu stellen, dass wir mit den aktuellen Daten arbeiten, müssen die Änderungen des Haupt-Repositorys in den Branch eingepflegt werden. In SVN gibt es hierfür das Kommando svn merge. Dies setzt jedoch voraus, dass wir die genauen Revisionsnummern kennen, welche wir mit Hilfe des SVN Log Kommandos herausfinden können. Nur so kann sichergestellt werden, dass nur die Änderungen seit dem letzten Abgleich berücksichtigt werden.

Mit SVK ist dies zum Glück um einiges einfacher. Dort wurde der star merge Algorithmus eingesetzt, welcher zuerst in dem arch Versionskontroll-Tool zum Einsatz kam. Dieser Algorithmus stellt selbst fest, was bei einem Abgleich von zwei Branches bereits berücksichtigt worden ist.

Vor dem eigentlichen Abgleich unseres Branch wird ein Test durchgeführt, was getan werden würde. Ein sogenannter Dry Run. Dies funktioniert wenn der Parameter -C angegeben wird. So können wir bereits feststellen ob es zu irgenwelchen Konflikten kommen könnte.

svk smerge -C //mhccms/trunk //mhccms/branches/local
Auto-merging (10, 12) /mhccms/trunk to /mhccms/branches/local (base /mhccms/trunk:10).
U htdocs/todos.txt
New merge ticket: 8e9e61cf-1d3c-7440-b7f5-d444ebbc2073:/trunk:16

Wir bekommen eine Auflistung der Änderungen und würden über mögliche Konflikte informiert werden.

Es ist unbedingt darauf zu achten, dass die Reihenfolge der Parameter bei einem svk smerge eingehalten werden muss. Die Reihenfolge ist immer von der ersten Positionsangabe zu der zweiten.

Nun gleichen wir unseren Branch mit den aktuellen Daten aus dem Repository ab. Hierfür wird der gleiche Befehl genutzt, jedoch ohne den Parameter -C.

svk smerge -l //mhccms/trunk //mhccms/branches/local
Auto-merging (10, 12) /mhccms/trunk to /mhccms/branches/local (base /mhccms/trunk:10).
Waiting for editor...
Log message not modified: a)bort, e)dit, c)ommit?c
U htdocs/todos.txt
New merge ticket: 8e9e61cf-1d3c-7440-b7f5-d444ebbc2073:/trunk:16
Committed revision 13.

Der zusätzlich angegebene Parameter -l sorgt dafür, dass die Original-Kommentare mit übernommen werden. Es können jedoch zusätzliche Angaben als Kommentar hinzugefügt werden.

Arbeitsverzeichnis abgleichen
Bisher haben wir die Änderungen nur im Repository durchgeführt. Um damit arbeiten zu können muss nun noch das Arbeitsverzeichnis aktualisiert werden. Hierfür wechseln wir in dieses Verzeichnis und gleichen es mit dem Befehl svk up ab.

svk up
Syncing //mhccms/branches/local(/mhccms/branches/local) in C:\...\Entwicklung\mhccms\local to 13.
U htdocs\todos.txt

Zusammenfassung
In diesem Artikel wurde der Abgleich unserer lokalen Daten behandelt. Das Subversion Repository wurde bisher nicht berührt. Es sollte vor allem gezeigt werden, wie einfach das Zusammenführen von Änderungen mit Hilfe von smerge funktioniert. Hierfür behält SVK den Überblick über die Details, so dass wir uns über Revisionen keine Gedanken machen müssen. Dies wird auch beim Abgleich des entfernten Repository von großem Nutzen sein.

Ebenso hervorzuheben ist, dass wir lediglich beim ersten Abgleich des SVK-Repository eine Netzverbindung benötigt haben. Ziel von SVK ist schließlich das unabhängige Arbeiten von einer Netzwerkanbindung.

Im 3. und letzten Teil wird gezeigt wie unsere lokalen Änderungen in das Subversion-Repository einfliessen.

 
AddThis Feed Button