Category Archives: Uncategorized

HowTo: Migration von Subversion Repositories mit eisfair

eisfair-2 steht vor der Tür, ich erwähnte es bereits im letzten Jahr und auch dieses Jahr anlässlich des LinuxTag. Da es kein Upgrade von eisfair-1 auf eisfair-2 geben wird, muss man die Kiste mehr oder weniger von Hand migrieren. Wie man seine Subversion-Repositories umzieht, beschreibe ich in diesem Artikel.

Falls aktiv und häufig mit den Repositorys gearbeitet wird, sollte der erste Schritt darin bestehen, die Schreibrechte auf dem alten Server zu entziehen. Das einfachste ist, in der Subversion-Konfiguration die Variablen SVN_REPOS_?_ANON_ACCESS und SVN_REPOS_?_AUTH_ACCESS für das umzuziehende Repository auf ‘read’ oder auf ‘none’ zu setzen.

Dann folgt das Backup des alten Repositorys. Dies sollte man an dieser Stelle manuell anstoßen, weil man nicht sicher sein kann, dass nicht noch jemand nach dem letzten automatischen Backup was eingecheckt hat. Dazu wählt man im Setup-Menü den entsprechenden Punkt für das Backup und im folgenden Dialog aus einer Liste das entsprechende Repository. Danach läuft der Dump vom Repository durch. Wenn das abgeschlossen ist, wird beim Subversion Paket ab 0.5.0 dann der Pfad und Name vom soeben erstellten Backup angezeigt, den man sich merken sollte, um zu wissen, welche Datei man gleich auf den Zielrechner zu kopieren hat. Bei älteren Paketversionen muss man im Setup-Menü nochmal den Menüpunkt ‘List backup files’ auswählen. Das grad erstellte Backup steht wahrscheinlich ganz oben, im Zweifelsfall schaut man auf Datum und Uhrzeit, die im Dateinamen mit drin stehen.

Der nächste Schritt besteht darin, die Backupdatei auf den Zielrechner zu kopieren, auf dem man bereits das Subversion-Paket installiert hat. Um das Backup über das Setup-Menü wieder einspielen zu können, muss der Zielpfad für die Kopieraktion der in SVN_BACKUP_TARGET angegebene sein. Außerdem sollte man ein neues leeres Repository einrichten, in das gleich das Backup eingespielt wird.

Aus dem Setup-Menü des Subversion-Pakets wählt man dann den Punkt ‘Restore repository’. Aus der Liste wählt man das soeben neu erstellte leere Repository. Das war es schon. Jetzt nur noch den Nutzern die neue Adresse mitteilen und fröhlich mit dem umgezogenen Repository weiter arbeiten. Das ganze nochmal in Kürze:

  • altes Repo auf dem Quellrechner deaktivieren oder wenigstens die Schreibrechte entziehen, nicht löschen natürlich!
  • setup -> Administration of services -> subversion administration -> Subversion Administration Tools -> Subversion backup and restore -> Backup repository
  • gewünschtes Repo auswählen
  • bei Paket vor 0.5.x: List backup files, entsprechende Datei steht wahrscheinlich ganz oben, auf die Zeit achten, um von cron-generierten zu unterscheiden, hier: /mnt/data2/backup/svn/repos1-2008-09-24-095600.backup.bz2
  • ansonsten angezeigten Dateinamen des Backup kopieren
  • auf den Zielrechner kopieren in das Verzeichnis was dort bei SVN_BACKUP_TARGET angegeben ist
  • neues Repo anlegen auf Zielrechner
  • Restore repository: richtiges Backup-File aus der Liste wählen
  • das neu erstellte Repo aus der Liste wählen

Schicke Grafiken in LaTeX mit pgfplots (2)

Ich hatte im Beitrag »Schicke Grafiken in LaTeX mit pgfplots (1)« noch ein zweites Beispiel angekündigt. Diesmal zeige ich wie man mit pgfplots eine Grafik mit horizontalen Balken baut. Als Grundlage dient die Grafik aus einem Paper mit dem Titel »Concrete-based constrained layer damping«. Das Original sieht bereits im Original verpixelt aus:

Mit PGF bzw. besser gesagt mit TikZ lässt sich das nachbauen. Box, Anstriche, Beschriftungen und Balken müssen aber alle komplett von Hand erstellt werden.

begin{tikzpicture}[xcomb,thick]
    % die balken
    draw[color=gray,line width=10pt]
        plot coordinates{(0.75,0.5) (1.125,1) (7.5,1.5) (5.4,2)
        (6,2.5) (0.3,3) (0.05,3.5)};
    % box (rechteck) außen rum
    draw (0,0) rectangle (9,4);
    % die achsenbeschriftung links
    foreach y/ytext in {0.5/mild steel, 1/cast iron, 1.5/granite,
        2/polymer concrete, 2.5/lead, 3/6063 aluminium, 3.5/alumina}
        draw (-2pt,y cm) node[anchor=east] {footnotesizeytext};
    % anstriche für die achse unten
    draw (0,0) -- (-2pt,0);
    foreach x in {0,0.75,...,9}
        draw (x cm,0) -- (x cm,-2pt);
    % achsenbeschriftung unten
    foreach x/xtext in {0/0.000, 1.5/0.001, 3/0.002, 4.5/0.003,
        6/0.004, 7.5/0.005, 9/0.006}
        draw (x cm,-2pt) node[below] {footnotesizextext};
end{tikzpicture}

Das Ergebnis ist schon recht ansprechend, es werden die LaTeX-Schriften verwendet und es ist eine saubere Vektorgrafik:

Mit pgfplots muss man nicht alle Einzelheiten selbst nachbauen sondern definiert im Grunde nur noch Labels und Werte.

begin{tikzpicture}
    begin{axis}[
        xbar,
        width=10cm,
        height=6cm,
        ytick={1,...,7},
        yticklabels={%
            mild steel,
            cast iron,
            granite,
            polymer concrete,
            lead,
            6063 aluminium,
            alumina},
        xmin=0,
        xmax=0.006
    ]
    addplot[draw=darkblue,fill=blue!50!white,semithick] coordinates {
        (4.5e-4,    1)
        (7.5e-4,    2)
        (5e-3,      3)
        (3.6e-3,    4)
        (4e-3,      5)
        (2e-4,      6)
        (3e-5,      7)
    };
    end{axis}
end{tikzpicture}

Da ist erstens der Quelltext übersichtlich und verständlich und das Ergebnis überzeugt ebenso:

Mehr Text gibt’s dann ein ander Mal wieder, ich denke die Code-Beispiele und Bildchen sprechen für sich. ;-)

Samsung R700 Linux Installation: Erfahrungen (2)

Ich denke, ich habe jetzt eine Konfiguration fuer das R700 gefunden, mit der (fast) die gesamte Hardware funktioniert. Zumindest kann ich nun mit dem R700 unter Linux X-Plane und Flightgear betreiben, was gleichermassen dienstlich wie auch privat sehr angenehm ist.

Ich bin uebrigens erstmal bei KDE 3.5.9 haengengeblieben, statt wie zuerst vorgenommen gleich das neue KDE 4.1 zu verwenden. Zusammen mit compiz-fusion ist KDE 3.5 ausreichend huebsch anzuschauen und angenehm zu bedienen. (Wie konnte ich nur so lange ohne die Funktionalitaet der Compiz-Plugins “Scale” und “Expose” leben?)

Lediglich die Regelung des LCDs geht unter X noch nicht. Und ich glaube, mein Sound ist insgesamt noch leiser als unter Windows, was ich darauf zurueckfuehre, welchen Kernelparameter ich verwende “model=basic”. Den Kartenleser habe ich noch nicht ausgiebig getestet.

Hier aber nun die Konfigurationen im Detail:

Continue reading

Samsung R700 Linux Installation: Erfahrungen (1)

Ich habe mittlerweile mit der Installation von Gentoo begonnen. Das System laeuft mittlerweile aus eigenem Bootloader und bedarf der weiteren Softwareinstallation.

Einen 2.6.26er-Kernel habe ich schon gebacken. Leider musste ich die Config  selbst zusammensuchen, ich habe mit Google keine andere Linuxinstallationsanleitung oder zumindest Kernelconfig gefunden. Wenn ich zufrieden und fertig bin, sollte ich meine .config hier im Blog veroeffentlichen und dann Werner Heuser von Tuxmobil einen Link fuer seine Sammlung zukommen lassen. Schliesslich hat mit diese Linksammlung auch schon so oft geholfen, als ich das alte Inspiron installiert habe.

Momentan kompiliere ich X und Anwendungsprogramme (Firefox, Thunderbird, Gimp, Openoffice). KDE zu installieren zoegere ich noch hinaus, wer weiss, ob nicht doch noch (wenigstens maskierte) KDE 4.1 Pakete zu bekommen sind. Ich glaube, dass es ein Overlay von KDE 4.1 gibt, aber ich mag Overlays nicht sonderlich und wuerde es lieber direkt aus Portage beziehen.

Bereits beim Installieren des Basissystem von Gentoo (Stage3) sowie dem Uebersetzen des Kernels sind mir beim Arbeiten mit der Shell und dem R700 einige Sachen aufgefallen, die seltsames Verhalten zeigen oder ganz anders geloest sind als beim alten Dell Inspiron 8200:

  1. STRG links und Fn auf der Tastatur sind genau andersherum angeordnet als beim Dell. Wenn man viel mit den Bash-Shortcuts (CTRL-E, CTRL-A, etc.) zu arbeiten gewohnt ist und gleichzeitig in den Fingern noch die Erinnerung an die alte Tastatur stecken, dann wird das Tippen arg eingeschraenkt. Ist aber nur Gewoehnungssache.
  2. Sowohl beim Inspiron als auch beim R700 ist die LCD-Helligkeit ueber Fn+Cursortasten zu regeln. Waehrend beim Inspiron allerdings die Hardware das uebernimmt (und es deswegen auch auf der Console oder beim Booten funktioniert), ist es beim R700 nur in Software geloest. Als Workaround kann ich aber zumindest einen Zahlenwert in /proc/acpi/video/NVID/LCD/brightness schreiben und damit die Helligkeit regeln.
  3. Unter Vista liess (und beim R60 meiner Freundin unter XP laesst)  sich mit Fn-F5 das Backlight komplett deaktivieren. Sehr stromsparend und bei Sonne von hinten auch noch ein wenig ablesbar. Keine Ahnung, wie ich das unter Linux hinbekommen kann. Hat jemand Ideen?
  4. Das R700 hat eine Webcam und einen SD-Kartenleser eingebaut. Wie krieg ich die nur unter Linux zum Laufen? Ich vermute mal, I2C ist mein Freund bei der Kamera und fuer MMC habe ich auch ein Kernelmodul gesehen, konnte es aber bisher noch nicht probieren. Ratschlaege sind auch hier aeusserst willkommen.
  5. Die Backspacetaste funktioniert auf der Shell manchmal seltsam. Es wird ab und zu irgendein Sonderzeichen mit in den Zeichenpuffer geschrieben, der dann die ganze Befehlszeile ruiniert. Es koennte auch sein, dass dies die ASCII Bell ist, weil ich derzeit gar keine Bell auf der Shell hoere. Da muss ich noch mal nachforschen. Eventuell liegt es auch der Keymap de-latin1-nodeadkeys, die ich in /etc/conf.d/keymaps eingetragen habe. Ich gehe spaeter mal auf de-latin1 zurueck und schaue, ob es Besserung gibt.
  6. Der verbaute Intel WLAN Chip 4965 braucht beim wpa_supplicant den Parameter “-Dwext” und nicht — wie ich zuerst dachte — “-Dipw”, wie ich es aus der manpage herauslesen wuerde.

Bei Gentoo aergere ich mich immer mehr ueber den Status von Firefox: Die Version 3.0 ist seit Monaten draussen, 3.0.1 seit ueber fuenf Wochen. Warum muss beides immer noch maskiert im Gentoo Portage sein?

Neues Notebook: Distro gesucht

Ich hab mir Mittwoch ein Samsung R700, welches meinen doch schon in die Jahre gekommenen Inspiron 8200 ersetzen soll. Nachdem ich mich ein, zwei Stunden ueber das vorinstallierte Vista amuesiert hatte, habe ich sofort mit der Entscheidungsfindung fuer eine Linuxdistribution begonnen. Klar war, dass ich eine Distribution wollte, mit der ich bereits Mileage habe, damit die Installation zuegig von der Sache geht.

  • Debian habe ich kurz erwogen, mich aber dann doch dagegen entschieden, weil ich einen Firefox moechte, der auch so heisst, und keinen Iceweasel. Dieses Lizenzgerangel um Firefox/Icewease und Thunderbird/Icedove interessiert mich als Endnutzer nicht die Bohne, solange ich beides legal kostenfrei verwenden darf. (Debians Entscheidung kann ich trotzdem verstehen und gutheissen: Fuer Firmen als Anwender kann eine absolut freie Distribution in der Finanzbuchhaltung/Rechtsabteilung selbst bei einer staatlichen Pruefung fuer froehliche Gesichter sorgen!) Mit apt-get und aptitude habe ich aber immer gern gearbeitet. KDE 4.1 ist allerdings auch nicht dabei, auch wenn es wohl bald in Debian Sid aufschlaegt.
  • Knoppix: Siehe Debian. Und ich war zu faul, mir die DVD zu saugen und zu brennen. Und kein KDE 4.1…
  • Opensuse: Suse will ich aus Prinzip nicht. Und die OpenSuse Live CD mit KDE 4.1 lief bei mir eh nicht richtig rund.
  • Sabayon Linux: Klingt interessant, insbesondere weil ich nicht so viel selbst kompilieren muesste. Aber ich mag den Ansatz nicht, dass einfach ueber ebuild/portage noch ein anderes Paketmanagementsystem draufgestuelpt wird. Ebuild ist selbst schon komplex genug… Ich bin unschluessig. Hat jemand Erfahrungen damit gemacht? Ich bitte um entsprechende Kommentare!
  • (K|X)ubuntu? Hat bei mir im Kopf immer noch den Status des Anfaenger-Linux. Nett waere aber, dass es auf deb-Paketen basiert. Und die Hardwareerkennung soll genial sein. Der Installer ist wohl gleichzeitig eine LiveCD, die ich wohl mal ausprobieren sollte. Wenn, dann muss es Kubuntu sein, die haben seit einigen Tagen wohl auch KDE 4.1.
  • Gentoo: Habe ich bisher auf dem Inspiron verwendet, stecke ich gedanklich also derzeit am tiefsten in der Materie. Wenn doch nur diese langen Installationszeiten durch das Kompilieren nicht waeren. Ich will doch lediglich moeglichst aktuelle Pakete mit moeglichst wenig Aufwand installieren. Gentoo ist halt viel Handarbeit. Was mich wundert: Firefox ist in der 3.0.1 immer noch maskiert (~x86), KDE 4.1 ist noch nichtmal maskiert zu haben. Was ist los bei Gentoo, schlafen die, haben die keinen Bock mehr oder einfach zu wenig Leute? Die hatten doch mal den Ruf, alles superschnell ins Portage hineinzubekommen.

Schlussendlich: Ich werde die Installation wohl mit Gentoo beginnen, auch wenn ich dabei ein leicht ungutes Gefuehl habe. Die Kubuntu-Installer ziehe ich mir aber auch und teste sie mal als LiveCD.

Notebookreparatur, 2

Über den ersten Teil meiner Notebookreparatur habe ich vor einiger Zeit schon geschrieben. Gestern und heute ging es dann weiter mit Teil zwei.

Nachdem ich mir geeignetes Werkzeug besorgt hatte, um die Seriell- und Parallelport-Anschlüsse auf der Rückseite des Notebooks abzuschrauben, habe ich es gestern Abend noch einmal auseinandergenommen. Diesmal ist es mir auch gelungen, das Mainboard mit der schadhaften Netzteilbuchse zu auszubauen.

Die korrekte Fehlerdiagnose: Da die Buchse nur an ihren Lötfahnen befestigt ist, wurde durch die dauerhafte Belastung eine dieser Fahnen abgerissen. Das erklärt, wieso das Verkanten des Steckers für eine Weile geholfen hat, bevor dann gar nichts mehr zu holen war.

Ich habe die Buchse ausgelötet, was überraschend reicht ging, und bin damit heute zum Elektronikladen gelaufen. Der Verkäufer kannte zwar mich nicht (wie auch …), aber sowohl Buchse als auch Problem. Und er wusste, dass es diese Buchse so nicht gibt und ich mir aus Drähten, einer anderen Buchse (die es gibt …) und Schrumpfschlauch etwas selbst basteln muss.

Jetzt habe ich also zwei Optionen:

  1. Entweder etwas basteln, das mit Draht, Buchse und Schrumpfschlauch wieder einen Anschluss ermöglicht – wobei ich noch das Problem der Zugentlastung lösen muss.
  2. Ein (kaputtes) Mainboard mit gleicher, intakter Buchse finden, das ist als Ersatzteillager missbrauchen kann.

Ich tendiere mittlerweile aber schon sehr zu Variante eins. Das ist nicht so schick, aber weitere Reparaturen dürften sich wesentlich einfacher gestalten.

Spontane Idee: Festplattenstecker und -buchse verwenden. (Also, die Teile, die im PC zur Stromversorgung genutzt werden.) Die Festplattenbuchse wird dann mit Kabeln aufs Mainboard gelötet, an den Festplattenstecker kommt die Buchse für die Notebook-Stromversorgung. Der Festplattenstecker passt dann noch ins Notebook und dient gleichzeitig als Zugentlastung. Falls dort mal etwas reisst, lässt sich das leichter reparieren, als wenn ich wieder am Notebook löten müsste.

Kommentare in der .htpasswd

Ich bin gerade ein wenig unsicher, ob ich mal wieder Google-blind bin oder ob es wirklich nicht vorhanden ist – jedenfalls war ich nicht in der Lage, eine vernünftige Dokumentation des Dateiformats für die Passwortdateien des Apache zu finden.

Die meisten Einträge befassen sich damit, wie man das htpasswd-Tool benutzt, mit dem sich solche Dateien über die Kommandozeile bearbeiten lassen. Ich möchte aber wissen, ob und wie ich dort Kommentare einfügen kann.

Letztendlich habe ich einfach mal probiert und war damit erfolgreich, vor die betroffene Zeile eine Raute zu setzen (#), also so zu kommentieren, wie in shell-Scripten.

Aber eine fundierte Lösung wäre mir natürlich lieber. Falls jemand etwas hat: Ab in die Kommentare damit!

Spaß-Admins?

heise.de schreibt im Artikel “Per Browser auf den Mainframe”:

Es werde aber immer schwieriger, Nachwuchs für die Betreuung der Rechner und der Software zu finden, der mit den herkömmlichen Terminals arbeiten will.

Das bestätigt einen Eindruck, den ich selbst auch schon desöfteren hatte: Die neue Generation der Computernutzer scheint davon verwöhnt, dass Systeme entweder auf Anhieb funktionieren oder sich durch bunte Howtos und Rumklicken zu einer Form von Funktion bewegen lassen. Auf jeden Fall müssen sie schön bunt sein und Spaß machen.

Nach einem Hype von Ich-kenn-mich-mit-Computern-aus-Menschen scheinen sich wieder die herauszukristallisieren, die sich wirklich mit der Materie beschäftigen wollen – und sie dementsprechend auch beherrschen.

Gehen uns die Admins aus?

(Der Artikel ist einseitig, übertrieben und verallgemeinernd. Das muss so. Es darf diskutiert werden.)

Tiefenanordnung von Linien in Matlab-Plots

Heute geht es mal um ein sehr spezielles Problem mit einer Lösung auf die ich gestern durch Probieren gekommen bin und sehr erstaunt war, dass das so funktioniert und offenbar sogar so vorgesehen ist. Zunächst ein paar Worte zum ursprünglichen Problem.

Ich arbeite im Institut mit Matlab 6.1, zwar schon etwas in die Jahre gekommen aber brauchbar. Für die Auswertung meiner Messdaten habe ich ein GUI programmiert wo ich zwei verschiedene Sachen gleichzeitig in einem axes-Objekt darstellen will. Normalerweise kann man hier mit den Funktionen hold und plot arbeiten, aber mir war das zu unflexibel und ich habe daher gleich die LowLevel-Funktionen benutzt. Ich habe in dem GUI das gewünschte axes-Objekt. Direkt darunter in der Objekthierarchie kommen bereits die line-Objekte, die auch plot erzeugt. Von Hand kann man sich die mit dem Befehl line erzeugen, die landen dann in dem aktuellen axes-Objekt, das man zuvor mit axes(axeshandle) festlegen sollte. Bei der Erzeugung der line-Objekte speichere ich das line-Handle um später direkt wieder drauf zugreifen und beispielsweise die zugrundeliegenden Daten ändern zu können.

Soweit so gut, nun ist es so, dass ich nicht bestimmen kann, wann der Benutzer die eine Sache zum Plotten anklickt und wann die andere. Oben erscheint aber immer die zuletzt gewählte. Genauso verhält sich der Befehl plot. Was zuerst geplottet wird, landet hinten, die nachfolgenden Sachen darüber. Das ist bei vielen Darstellungen egal, bei einigen aber nicht.

Der Trick um die Darstellungsreihenfolge – oder englisch z-Order – zu ändern klingt ein wenig wie »von hinten durch die Brust ins Auge«, funktioniert aber wunderbar. Um zu verstehen, was dort gemacht werden muss, schaut man sich am besten nochmal die Objekthierarchie an. Ein axes-Objekt beherbergt beliebig viele line-Objekte. Die Handles dieser Objekte kann man sich ausgeben lassen:

linehandles = get(gca, 'Children')

Die einzelnen Elemente des Vektors linehandles haben genau die Reihenfolge der Anordnung in z-Richtung wobei das erste Element das zu oberst angezeigte ist. Es spricht nichts dagegen, die Elemente umzuordnen und dem axes-Objekt wieder zuzuweisen, z.B. in umgekehrter Reihenfolge:

set(gca, 'Children', flipud(get(gca, 'Children')))

Ich war einigermaßen überrascht, dass das tatsächlich so funktioniert, da ich in der ausführlichen Matlab-Hilfe nie darüber gestolpert bin. Dass das wirklich so vorgesehen ist, sagt einem Matlab selbst, wenn man versucht der Eigenschaft Children etwas anderes als ein umgeordnetes selbst zuzuweisen:

??? Error using ==> set
Children may only be set to a permutation of itself.

Damit das ganze noch ein wenig anschaulicher wird, habe ich noch ein kleines Skript geschrieben, dass die Sache nochmal illustriert:

% test data
a = rand(5,1)
b = rand(5,1)
c = rand(5,1)
% line handles
hp = plot([a b c])                  % hp in order we plotted
ha = get(gca, 'Children')           % reverse order
% vectors of line handles equal?
all(hp==ha)                         % not equal
all(hp==flipud(ha))                 % should be equal, see above
all(sort(hp)==sort(ha))             % also equal
% thick lines
set(ha, 'LineWidth', 10)
title('original order')
legend('a','b','c')                 % order as in plot call
print(gcf, '-dpng', 'z-order-original.png')
% color of the most front line, should be c
get(ha(1), 'Color')                 % should be red aka [1 0 0]
% now flip lines, put c in the back
set(gca, 'Children', [ha(2) ha(3) ha(1)])
title('flipped order')
print(gcf, '-dpng', 'z-order-flipped.png')
% color of the most front line, should be b
ha = get(gca, 'Children')
get(ha(1), 'Color')                 % should be green aka [0 0.5 0]

Schaut man sich hier die erzeugten PNG-Bilder an, erkennt man, dass die Linie für die Datenreihe c zunächst ganz vorn und dann ganz hinten dargestellt wird:

Alte Revisionen wiederherstellen mit Subversion

Im täglichen Umgang mit Subversion passiert es, dass man Dateien eincheckt, die man dann doch eigentlich nicht commiten wollte. Zum Glück kann man alte Revisionen wiederherstellen, dafür hat man ja das Versionsverwaltungssystem, man muss nur wissen wie.

Die erste Idee: revert – das funktioniert nicht, weil revert nur Änderungen an der lokalen Working Copy rückgängig macht, nach dem Commit kann revert nichts mehr ausrichten.

Die zweite Idee: update auf die ursprüngliche Version. Dann hat man in der Working Copy zwar zunächst mal die alte Version liegen. Man kann sie aber nich direkt commiten, weil Subversion sie für aktuell hält. Das ist sie im Grunde auch, nur halt in einer vorherigen Revision. Lokale Änderungen gibt es in dem Sinne nicht an der Datei. Bei Binärdateien kommt man an dieser Stelle nicht weiter, wenn man nicht jedesmal wieder ein update auf die alte Revision machen will.

Die dritte Idee: ins Handbuch schauen. Das exzellente Subversion-Buch hat natürlich auch zu dieser Problematik die passenden Tipps parat: Undoing Changes. (Wir arbeiten hier noch mit Subversion 1.4, daher der Link ins »alte« Buch.) Was auf den ersten Blick überraschend klingt: merge ist die Lösung für das Problem. Der Trick ist, dass wir dieses Mal rückwärts mergen. Dadurch gelangt die ältere Revision wieder in die Working Copy und nachdem man kontrolliert hat, ob damit alles stimmt, kann man die erneut commiten.

Genug der Vorrede, ich zeige den Vorgang mit dem Kommandozeilen-Client und mit TortoiseSVN am Beispiel. Ich habe hier eine Binärdatei driftcompgui.fig, die ich zuletzt in Revision 297 korrekt eingecheckt habe. In Revision 300 habe ich versehentlich eine falsche Version der Datei eingecheckt und möchte jetzt wieder die Version aus Revision 297 haben. Auf der Kommandozeile sieht das recht einfach aus (mit anschließendem Screenshot der Ausgaben):

svn merge -c -300 driftcompgui.fig

Wie man sieht liegt die Datei nun geändert in der Working Copy und zwar in der gleichen Version wie in Revision 297. Jetzt kann man die so einchecken oder noch weiter damit arbeiten. Bei TortoiseSVN erschließt sich diese Funktion aus dem GUI eher überhaupt nicht. Ich zeige zunächst mal den entscheidenden Screenshot und erkläre dann nochmal:

Hier wählt man zunächst im Feld »From:« die gewünschte Datei aus und klickt »HEAD Revision« an. Das ist sozusagen der Startpunkt des Rückwärts mergens. Bei »To:« natürlich »Use “From:” URL« auswählen, da es um die selbe eine Datei geht. Als Ziel Revision gibt man hier die an, die man wiederherstellen will, in meinem Fall 297. Jetzt kann man ohne weiteres auf »Merge« klicken und dann die Datei in der Working Copy untersuchen. Sollte irgendetwas nicht stimmen, kommt man mit revert wieder zur HEAD Revision, da wie bei jedem anderen Merge kein automatischer Commit passiert sondern die Änderungen des merge nur in der Working Copy landen. Wenn alles ok ist, kann man commiten und hat danach wieder die alte Version der Datei im HEAD des Repository.