Da staunte ich nicht schlecht, als das schlichte Wechseln zwischen Branches meines Git-Repositories (via git-svn) keine Wirkung auf den Editor hatte. Wieso waren auf einmal alle Dateien und Versionsangaben die selben? Hatte ich aus Versehen etwas falsches committet? Hatte der Release-Branch jetzt auch die Trunk/Developer-Version? Oh Graus!

Nein, hatte er nicht. Sowohl die Subversion-Timeline als auch das eigentliche Repository zeigten alles korrekt an – Puh! Das bedeutetet jedoch, das aus irgendeinem Grunde die Synchronisation mit Git in die Hose gegangen war. Leider brachte auch das Re-Syncen nichts.

Erst das nähere Betrachten in einem visuellen Darstellung mit Hilfe von GitX brachte eine Erkenntnis: Aus irgendeinem Grunde war an einem bestimmten Tag X zwischen zwei Commits ein Merge des Release-Branches in den Hauptzweig “master/trunk” geschehen. Da ich mich an eine solche Aktivität nicht erinnern konnte (abgesehen der Tatsache, dass mir das mit git-svn auch als Kunststück vorkam), ergab das ein großes Fragezeichen… bis ich dann sah, was die besagten Commits in der SVN-Timeline waren.

Aus historischen und situationsabhängigen Gründen wurde damals ein unkonventionelle Weg eingeschlagen werden: Aus /trunk wurde Release 1.0; /trunk wurde verschoben (bzw. gelöscht, außerhalb des Standard-SVN-Schema) und schließlich /branches/new-release nach /trunk verschoben. An dieser Stelle verschluckt sich die Git-SVN-Bridge, und alle drei Branches verschmelzen zu einem gleichen Tree (nämlich den Master/Trunk).

Und die Lösung des Problems? Einmal abgesehen davon, dass natürlich die Aktion im SVN-Repository nicht gerade brilliant war, lässt sich dies über die .git/config lösen. (Hinweis: Ein einfaches git remote rm löst das Problem nicht, weil es git-svn remotes sind.)

[svn-remote "1.1-RELEASE"]
url = svn+ssh://your-server/home/svn/project-name/branches/1.1-RELEASE
fetch = :refs/remotes/1.1-RELEASE

oder auch

[svn-remote "1.1-RELEASE"]
url = svn+ssh://your-server/home/svn
fetch = project-name/branches/1.1-RELEASE:refs/remotes/1.1-RELEASE