SVN und Mac OS X und Umlaute

von Florian Mutter

Hat man unter Mac OS X schon einmal ein Subversion Repository ausgecheckt, das Dateien mit Umlauten im Namen enthält kennt man wahrscheinlich das Problem: Es werden scheinbar ohne Grund Dateien als geändert und als unversioniert angezeigt. Es gibt auch erst einmal keine offensichtliche Lösung für das Problem

Das Problem

Mac OS X speichert Umlaute in Dateinamen als sogenannte precomposed characters (auf Deutsch etwa: "zusammengesetzte Buchstaben"). Das bedeutet, dass ein "ü" nicht als einzelner Buchstabe gespeichert wird, sondern als Zusammensetzung aus einem "u" und dem Zeichen für zwei Punkte über dem Buchstabe ("¨"). Das ist an sich völlig in Ordnung und so vorgesehen. Allerdings gibt es Programme (wie Subversion), die beim Vergleich von Dateinamen diesen Umstand nicht berücksichtigen. Für Subversion sind das Zeichen "ü" und das zusammengesetzte Zeichen "ü" aus zwei Zeichen unterschiedliche Buchstaben.

Fügt man mit Windows eine Datei mit Umlauten in ein Subversion Repository hinzu und checked dieses auf OS X aus, sieht das Ergebnis von svn status so aus:

$ svn st
?       mytestätest.txt
!       mytestätest.txt
Man kann die Dateien weder commiten noch reverten. Der Zustand lässt sich nicht ändern. Das Problem ist im Subversion Bugtracker seit 2005 gemeldet. Es existiert auch eine Seite im Subversion-Wiki zu diesem Thema. Nur leider ist bisher noch keine Lösung im offizielle Subversion-Code gelandet (Zum Zeitpunkt der Erstellung diese Artikels ist 1.9.4 die aktuelle Version von Subversion).

Die Lösung

An der Fehlermeldung im Subversion-Bugtracker ist ein Patch angehängt, der das Problem behebt. Mit dem Paketmanager Homebrew kann dieser relativ einfach in Subversion eingebaut werden. Ein Nebeneffekt ist, dass man ab dann eine relativ aktuelle Version von Subversion verwendet.

Um den Patch einspielen zu können muss man natürlich erst einmal Homebrew installieren. Wie das geht steht auf der oben verlinkten Seite. Mit den folgenden Schritten kann man Subversion patchen:
  1. Im Terminal mit brew edit subversion die Subversion-Formel zum anpassen öffnen
  2. Unterhalb von patch :DATA muss die URL und der Hash des Patches eingetragen werden. Standardmäßig wird unter OS X der Editor VIM verwendet. Mit der Taste i kann man in den Eingabemodus wechseln. Die Datei sieht an dieser Stelle dann so aus:
...
patch :DATA
patch :p0 do
  url "https://issues.apache.org/jira/secure/attachment/12763261/7_svn_1.8.x_darwin_unicode_precomp.patch"
  sha256 "2eaee628e3161bce4b1697660281cab30f42265369bfa7074ea435e441d543e7"
end
...
  1. Die Datei speichern und schließen. In VIM drückt man zuerst ESC um den Eingabemodus zu verlassen und gibt dann :x ein und bestätigt mit Enter
  2. Speichern und Subversion bauen mit brew install --build-from-source subversion
  3. Terminal schließen und neu öffnen und mit svn --version überprüfen ob Version 1.9.4 oder neuer läuft

Update von Subversion

Mit Homebrew kann man im Terminal mit dem Befehl brew update und dann brew upgrade alle installierten Programme aktualisieren.

Bei brew update öffnet sich bedingt durch die obige Anpassung manchmal der Standardeditor mit einer Merge-Nachtricht. Es muss dann einfach gespeichert und der Editor beendet werden, damit Homebrew das Update beendet. Es handelt sich hier um einen normalen Git-Merge.

Wird eine neue Version von Subversion installiert (z.B. durch brew upgrade), wird automatisch die vorkompilierte Version verwendet. Diese muss dann durch eine selbstkompilierte Version ersetzt werden: brew reinstall --build-from-source subversion. So wird automatisch wieder der Patch eingespielt.

Nun kann man ohne Probleme mit Subversion-Repsitories arbeiten, die Datei mit Umlauten enthalten.

IntelliJ

IntelliJ kann glücklicherweise so eingestellt werden, dass die neue gepatche Version von Subversion verwendet wird. Dazu muss man in den Einstellungen auf die Homebrew-Version von Subversion wechseln (/usr/local/bin/svn):

Subversion in IntelliJ

Jetzt sollte auch IntelliJ mit Umlauten in Repositories umgehen können.

Subversion GUI Tools

Bei fast allen Subversion GUI Tools (z.B. VersionsCornerstone oder SmartSVN) ist es leider so, dass diese eingebaute Subversion-Clients verwenden. Diese sind in der Regel leider nicht gepatcht (siehe z.B. den FAQ von Cornerstone) und so zeigen diese Programme auch immer Dateien als geändert an, obwohl sich dort nichts geändert hat.

Kategorien: exensio

Zurück