Eclipse Luna, SVN – problem with older Subversion 1.6 repositories !

In Eclipse I have to handle a variety of PHP projects (with additional natures) which are interconnected in different ways. E.g. my present project may for convenience have links to folders of another project in another Eclipse workspace. Such links exist in my case for example to files containing very basic classes of some of my own frameworks. In some projects I combine the present project work with upgrading the basic framework classes in parallel to a new level of capabilities. In such a situation I want to directly change the basic classes for all other projects that use them and test compatibility aspects.

The version control of almost all interconnected projects is done by Eclipse Subversive plug-ins from Polarion. The link situation on the folder/file side of my projects leads to so called external SVN relations on the SVN side of my interconnected projects. These relations are generated automatically by the Subversive plug-ins for Eclipse.

In some cases I may even have different SVN locations – some local, some on a dedicated SVN servers in the local network or on the Internet. Unfortunately, not all of my SVN repositories are of the same Subversion version – which was no problem as long as different connectors were available in Eclipse and the repositories were generated to be backward compatible. Some of my SVN repositories are relatively old ones – i.e. of SVN version 1.6. Mostly associated with framework classes I continuously have worked on for years.

From KDE’s SVN client “kdesvn” I am very familiar with the problem that e.g. a client for a Subversion version 1.8 is not able to deal with SVN repositories that were generated with an older version of Subversion (e.g. Subversion version 1.6). An error message including as “… working copy is too old …. “ is a typical indication of this situation. In this case it does not help that you may have set up the repository with backward compatibility (e.g. to SVN version below 1.6). You have to update your repository by using the command

svnadmin upgrade

inside the base directory of the repository. Which may be delicate – if you did not set up any backward compatibility your Eclipse plug-in may no longer be able to handle the repository.

So, before updating SVN in your Linux OS and upgrading your SVN repositories you should always check carefully, whether the Subversive SVN plug-ins in Eclipse will be able to handle the repository afterwards. Actually, already this type of problem indicates that a strategy to maintain SVN repository versions consistently should be followed. However, I am a bit lazy. And as long everything worked smoothly I had no reason to upgrade my SVN repositories to one and the same Subversion version.

Some days ago – due to some irritating errors of syntax highlighting in the Kepler JSDT module – I installed Eclipse LUNA (i.e. version 4.4.2.) instead of KEPLER. The JSDT highlighting error went away. However, I ran into deep trouble with the subversion plug-ins.

Actually, my Eclipse upgrade lead to a complete mess because of my laziness in the past to keep the different Subversion versions of SVN repositories on the same level. The following discussion may help others to recover from such a situation and reconsider a strategy to keep the Subversion versions of one’s SVN repositories consistently aligned.

Eclipse Subversive plug-ins for LUNA provide SVN Connector Kits for Subversion versions 1.7 and 1.8, only

Recently, I had started with a new PHP project in Eclipse KEPLER depending on a set of classes of one of my frameworks. So, I thought this project would be a good choice to get some experience with Luna. Without much thinking I had installed several Eclipse plugins I typically use into LUNA as PDT, WST, Mylyn, JSDT
Jquery , etc. and of course Subversion and Polarion Subversive SVN Connector Kits. So, I felt well prepared to open the my Kepler workspace with Luna.

The first thing you may stumble across when using Luna first time is that you should make a copy of your original PHP projects in the Kepler workspace directory. Luna will upgrade your Kepler project in a way that is not backward compatible to older Eclipse versions. Ok, that done, I wanted to share my upgraded project by using a SVN repository. I chose an existing local SVN location – based on the “file” sub protocol of SVN. Then I started to check in the directories and files of my project. The check in process seemed to work well in the beginning. But then I was bombarded with error messages. Besides other things the messages told me that subversion stumbled across an “unsupported working copy”.

Ok, I checked the installed connector versions of the SVN Polarion plug-ins and did additional research on the Internet – the connectors were for Subversion version 1.7 and 1.8, only! Others are not available for Luna! As I did not remember exactly the version of my local repository (probably 1.6) I disconnected the PHP project from SVN with allowing to delete all SVN information from disk.

Making a new repository for your present project may not help

Next thought: Well, lets make a new SVN repository then – of SVN version 1.8. I combined this step with setting up a local lightweight SVN server – because somebody had told me that the performance of the core SVN protocol would be much better than the “file” protocol. After the intermezzo of the server setup I manually created a new SVN database on my local SVN server (i.e. my workstation). As Subversion on the Linux workstation is of version 1.8 -I had no doubts that LUNA now should be able to work together with this SVN database. From Eclipse I shared my previously disconnected project by using the new SVN location with the generic “svn//” protocol. And started to check in again. Which started well and then ran into errors again … 🙁

To analyze what happened I set up a fresh independent project and filled it with some directories and files and tested SVN transactions with my version 1.8 SV repository. That worked perfectly! So, something obviously was wrong with my other more complicated project. A closer analysis showed what the reader may already have guessed:

The errors occurred during the check in process when directories were reached that were linked to my basic long term projects with their old repositories. Which on the SVN side are located in an “external” repository. So, my conclusion was:

One must first remedy the outdated working copy situation for the basic projects which your present project may depend on by links. Their (external) SVN repositories have to be upgraded first.

In complicated dependency situations you may run into more problems

Although the above conclusion is correct it may not directly lead to success. By walking through my projects and trying to get them working again with SVN under LUNA I stumbled across several situations which stressed my nerves. Among others there are 2 stupid things that may lead you to dead end situations and prevent a recovery from them with the Eclipse subversion tools:

  • After a trial to check in files into (too old) repositories there may be open outgoing SVN transactions left which cannot be resolved due to the impossibility to handle old SVN working copies of connected projects with linked folders. You are forced to completely disconnect your present project from the SVN repository with a deletion of all SVN information from disk (i.e. “.svn” files in the folders and sub folders of your Eclipse project)
  • In complicated link situations you may find the following: There may be a mixture of “.svn” files in a project which describe the diverse repositories of linked folders of other projects on different version levels. I found that with the present plug-ins of LUNA this may lead to unrevoverable SVN situations and even repository corruption.
  • Despite disconnecting projects and allowing for a deletion of SVN information some “.svn” files may remain at unexpected locations. This may depend of what kind of SVN trouble and corruption you had and what you tried to remedy the situation. The remaining “.svn” files may include old SVN version information – leading to trouble again when you try to connect to an SVN repository next time.

Eventually, I gave up and really tried to build my previous Kepler projects from scratch again under Luna. Including the SVN aspects.

Steps to recover and get a working LUNA – SVN implementation again

The following sequence of steps worked in my case:

  • First, make copies of your projects AND the associated SVN repositories. You never know ….
  • Check in all files and directories in all of your projects with the old Eclipse version (in my case Kepler) to get the latest versions into the existing SVN repository.
  • If one of the previous SVN repositories used under Kepler is corrupted (according to SVN messages in Eclipse) – do not use it any longer in the steps below. Build a new repository location instead.
  • Disconnect all existing Kepler projects from SVN via the context menu of the project by using the menu points “Team >> Disconnect” and allow for a deletion of the SVN information from disk.
  • Important point: Remove all remaining “.svn” files inside your Eclipse projects which may have remained there by using the command
    find . -name “.svn” -exec rm -fR {} \;
  • Go to the SVN repositories that still worked in Kepler (wherever they may reside) and upgrade by “svnadmin upgradeconsistently to the present SVN version – in my case 1.8.
  • Systematically restore your basic projects – i.e. the ones on which other projects may depend – from scratch by using the upgraded repositories. Or share these projects again with reference to the upgraded repository from which you then update the files to the latest repository version.
  • If one of the last steps is not possible due to repository corruption you build up new projects in Eclipse and fill them with the files from your (Kepler) project backups. Then share them by using a new repository location of your choice. Check that all SVN transactions work as expected for your basic projects.
  • Only then rebuild your more complicated projects depending which depend on your basic projects and share them again with the upgraded SVN repositories or newly generated ones.

And in the future:

Follow a systematic approach to upgrade your SVN repositories consistently to Subversion versions your Eclipse installation AND your other tools of your Linux desktop can handle.

Finally: Have fun with Eclipse LUNA and PHP or JS/Ajax projects. It feels great so far ….

Kurzreview Eclipse 4.3 Kepler mit PDT und Aptana

Vor einiger Weile hatte ich mich wegen der miserablen Performance enttäuscht von Eclipse 4.2 Juno mit PDT abgewandt. Besonders bei Benutzung der neuen GTK-Oberfläche tauchten immer wieder lange andauernde 100%-Peaks in der CPU-Belastung von 1 bis 2 CPU-Cores auf. Auf meinem schwachbrüstigen Laptop eine Katastrophe – aber auch auf einem gut ausgestatten Desktop-Rechner eine echte Belastung.

Im besonderen galt dies beim Hin- und Herziehen von Tabs zwischen zwei getrennten parallelen, vertikalen Editor-Bereichen der GUI von Juno. Das Öffnen des Outline-Bereiches machte das System nochmal träger. Die parallel Sicht auf mehrere geöffnete Files sowie den Outline-Bereich benötige ich beim Arbeiten mit vielen Klassenbibliotheken aber immer wieder.

Es half keine Herumdoktern an den Speichereinstellungen für die JVM. Genausowenig half eine Umstellung auf die klassische Eclipse GUI. Daneben gab es auch immer wieder seltsame Probleme mit einer parallelen Installation von Aptana und PDT 3.1/3.2. Die Content Assist Vorschläge wurden entweder gar nicht oder nicht immer vollständig angezeigt. Die Schwierigkeiten waren sowohl bei Einsatz von Suns JVM für Java 7 als auch von OpenJDK 1.7 gegeben. Alles unter Opensuse 12.2 und 12.3 (64 Bit).

Für meine PHP-Entwicklungsarbeiten griff ich aus diesen Gründen bis gestern immer noch auf Eclipse 3.7 “Indigo” zurück.

Nun ist Eclipse in der Version 4.3 unter dem Namen “Kepler” erschienen. Daher habe ich gestern erneut einen Anlauf mit dieser aktuellen Eclipse-Version und dem zugehörigen PDT 3.2 plus Aptana Studio 3 unternommen. Und diesmal wurde ich nicht entäuscht:

Alles funktioniert wie es soll und das wirklich performant. Allerdings musste ich meine unter Indigo aufgebauten Workspaces unter Rückgriff auf vorhandene SVN-Repositories komplett neu aufbauen. Erst danach lief alle fehlerfrei.

eclipse_kepler_1_600

An den Standard Speichereinstellungen habe ich nichts verändert. Die “eclipse.ini” sieht daher wie folgt aus:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
–launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20130521-0416
-product
org.eclipse.epp.package.standard.product
–launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
–launcher.XXMaxPermSize
256m
–launcher.defaultAction
openFile
–launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-XX:MaxPermSize=256m
-Xms40m
-Xmx512m

Es gab und gibt nach bislang 12 Stunden Arbeit keinerlei Hänger und keine Peaks in der CPU zu bemängeln! Das Arbeiten mit mehreren parallel angezeigten Editor- und GUI-Bereichen läuft sehr flüssig. Das Verschieben von Tabs für geöffnete Dateien zwischen zwei Darstellungsbereichen führt zwar zu einer kurzfristigen Belastung mehrerer CPU-Kerne – aber eben wirklich nur sehr kurzzeitig und das ist nicht als Bremse für das Arbeiten wahrnehmbar. Auch die Build-Operation für Projekte laufen mit angemessener Geschwindigkeit.

Aptana lässt sich parallel zu PDT einsetzen. Man kann zwischen den verschiedenen “Natures” entsprechend “facettierter” Projekte nach Lust und Laune hin- und herschalten. Die Content-Assists-Hinweise kommen entsprechend. Ich nutze z.T. den Aptana-Editor, um HTML-Code in TPL-Files für die Template-Engines Pear-ITX oder Smarty zu bearbeiten. Ich schätze dabei die browser-bezogenen Content Assist Hinweise. Aber auch der Wechsel zum normalen WST-HTML-Editor mit dessen Content-Assists-Fähigkeiten für HTML- und CSS-Vorschlägen klappt einwandfrei.

Aptanas PHP-Unterstützung benutze ich in der Regel nicht und
habe ich daher nicht wirklich getestet. Ein kurzes Umschalten auf die Aptana Editoren und Aptanas Content Assist für PHP zeigte mir aber keine unerwarteten Probleme.

Die SVN-Anbindung über Subversive und die Polarion-Konnektoren lief wie erwartet. Ein Gleiches gilt für MyLyn

Kurzum:
Für PHP-Projekte stellt Eclipse 4.3 “Kepler” endlich eine ernsthafte, weil funktionierende und performante “Eclipse 4.x”-Alternative zu Indigo dar. Ich kann den Umstieg wirklich empfehlen.

Ein kleiner Wermutstropfen
Schade irgendwie, dass es der HTML-“Web Page Editor” bisher nicht in die “WTP 3.5” -Repositories von Kepler geschafft zu haben scheint. Aber eine Installation aus den WTP 3.3.2 Ressourcen scheint keine größere Probleme zu machen.

Eclipse, SVN, kopierte .svn-Verzeichnisse (beseitigen)

Der Mensch ist ein Gewohnheitstier. Leider auch im Machen von Fehlern. Ein Beispiel für eine solche Fehl-Leistung hat mich gestern wieder im Zusammenhang mit Eclipse und der SVN-Verwaltung neu angelegter, kundenspezifischer PHP-Projekte ereilt. Für die PHP-Entwicklungsarbeit nutze ich primär Eclipse unter Linux.

Beim Zusammenstellen der Verzeichnisse und Dateien für neue PHP-Projekte unter Eclipse kopiere ich manchmal ganze Verzeichnisstrukturen aus anderen, früheren PHP-Projekten. Wenn ich dabei zu bequem vorgehe, erwische ich beim Datentransfer auch alle vorhandenen “.svn”-Verzeichnisse innerhalb der kopierten Verzeichnishierarchie.

Vergesse ich nun (wie gestern geschehen), diese “.svn”-Verzeichnisse zu löschen, bevor ich eine Zuordnung des neuen kundenspezifischen PHP-Projekts zu einem SVN-Repository vornehme, so führt dies zwangsläufig zu Problemen mit der Versionsverwaltung der kopierten Dateien im neuen PHP-Projekt. Je nach Projekt-Setup

  • wundert man sich anschließend ggf. über unabgeschlossene SVN-“Commit”-Vorgänge bzgl. der (kopierten) Verzeichnisse in das eben zugeordnete SVN-Repository
  • oder aber man erkennt an der grafischen Darstellung des PHP-Explorers, dass es zugrunde liegende SVN-Links zwischen dem neuen und den alten Projekten gibt, die man im neuen, kundenspezifischen Projekt aber nicht haben will und auch nicht beabsichtigt hatte.

Um die durch die Kopiererei verkorkste SVN-Situation unter Eclipse zu bereinigen, muss man das neu angelegte Projekt mit den kopierten Verzeichnissen wieder von SVN lösen, die kopierten “.svn”-Verzeichnisse rekursiv beseitigen – also löschen – und dann erneut die Zuordnung des neuen Projektes zu einem SVN-Repository durchführen.

Aber der Reihe nach.

2 Arten der Nutzung vorhandener Arbeitsergebnisse und Dateien in neuen PHP-Projekten unter Eclipse

Beim Anlegen von bestimmten neuen PHP-Projekten unter Eclipse stelle ich mir als Ausgangspunkt meiner Arbeit Verzeichnisstrukturen zusammen, bei denen ich die Früchte bisheriger Arbeit nutze. Hierbei gibt es u.a. zwei Hauptvarianten:

Zugriff auf Dateien zentraler Bibliotheken

Dabei spielt zum einen der Zugriff auf Verzeichnisstrukturen zentraler Klassen- und Funktions-Bibliotheken eine Rolle. Diese Bibliotheken und deren Dateien werden bei mir über eigene spezielle Projekte gepflegt. Sie stellen das Fundament dar, auf dem kundenspezifische Projekte aufbauen können.

Die Dateien der zentralen kunden-unspezifischen Bibliotheken (und ihre dort definierten Klassen/Funktionen) können und sollen von anderen Projekten genutzt werden. Den Zugriff auf solche Ressourcen von einem kundenspezifischen PHP-Projekt aus erreiche ich unter Eclipse durch Ordner-Verlinkung und ein entsprechendes Setup der PHP-Build-Pfade.

Man legt den neuen Ordner im Projekt einfach als Verweis auf ein vorhandenes Verzeichnis an.

Eclipse Verzeichnis Link

(Man ignoriere die Fehleranzeige bei den Projekten – so schlimm wie das erscheint, ist die Situation in meinen Projekten wahrlich nicht 🙂 . Der Fehler vererbt sich durch regelmäßige Referenz auf bestimmte phpmyadmin-Dateien.

Je nach Rechte-Setup kann ich danach von einem spezifischen Kunden-Projekt aus die zentralen Ressourcen bei Bedarf auch modifizieren. Das Ergebnis steht dann automatisch auch allen anderen kundenspezifischen Projekten zur Verfügung. Für die Unterstützung der “Content-Assist”-Funktionalität (Vorschläge beim Coding – Variablen, Klassen etc.) muss man im PHP-Projekt ggf. die Build-Pfade richtig setzen.

Die SVN-Versions-Verwaltung der zentralen Bibliotheken erfolgt in
meinem Fall natürlich getrennt von der SVN-Verwaltung des spezifischen neuen Kunden-Projektes. Die SVN-Verwaltung der zentralen Klassenbibliotheken führe ich über deren eigene Projektumgebung und gemäß des zugehörigen SVN-Setups durch und nicht über die Kundenprojekte.

Die Eclipse SVN-Plugins erkennen die verlinkte Verzeichnis-Struktur der Kundenprojekte und reagieren adäquat:

Die per Link eingebundenen Verzeichnisse und Dateien werden beim Ein- und Auschecken in das spezifische SVN-Repository des neuen kundenspezifischen PHP-Projektes ignoriert. Das ist vernünftig, weil ressourcenschonend und so auch von mir gewünscht. Die Projekte für die zentralen Bibliotheken habe ihr eigene SVN-Repository-Verwaltung – unabhängig von meinem kundenspezifischen Projekt. So weit, so gut.

Kopierte Verzeichnisse und Dateien, die projektspezifisch verändert werden

Zum anderen “kopiere” ich mir aber auch etliche Verzeichnisse mit spezifischen Klassendefinitionen und PHP-Programmen in mein PHP-Projekt. Dabei verlinke ich die entsprechenden Ordner nicht wie bei der Benutzung echter, zentral gepflegter Bibliotheken:

Ich kopiere, weil die entsprechenden Files (Programme, Funktionen, Klassen) projektspezifisch verändert werden sollen.

Die kopierten Verzeichnisse können dabei durchaus eine komplexe Subverzeichnisstruktur aufweisen. Einen Teil der Verzeichnisstrukturen richte ich dabei zudem auf Samba-Verzeichnissen ein, so dass die entsprechenden Dateien unter (virtuellen) Windows-Maschinen parallel auch in Dreamweaver-Projekte eingebunden werden können. (Wie man einen entsrpechenden durchgehenden Arbeitsfluss gestaltet, beschreibe ich vielleicht mal in einem gesonderten Beitrag). Aus Hygienegründen trenne ich das Samba-Verzeichnis vom Eclipse-Workspace-Verzeichnis ab. Unter Eclipse führe ich alle Ressourcen aber wieder durch geeignete Projekt-Setups zusammen.

Dabei schließe ich Dreamweaver-spezifische “_notes”-Verzeichnisse und “*.LCK”-Dateien, aber auch “.svn”-Verzeichnisse aus der Projektstruktur- und Build-Verwaltung über das Setzen von rekursiven “Ressource-Filtern” aus.

Eclipse Resource Filter

Im PHP-Explorer erscheinen die entsprechenden Verzeichnisse und Dateien dann nicht mehr ! (SVN geht natürlich trotzdem).

Die erforderlichen initialen Kopiervorgänge führe ich der Bequemlichkeit halber oft außerhalb von Eclipse auf Kommandozeilenebene oder mit einem Dateimanager durch. Manchmal benutze ich aber auch die Exportfunktionalität innerhalb von Eclipse.

Ein klassisches SVN-Problem entsteht anschließend, wenn ich aus Unachtsamkeit oder Bequemlichkeit die aus den älteren Projekten vorhandenen “.svn”-Verzeichnisse in das neue Projekt mit hinein kopiert habe. Und das können je nach Tiefe der Verzeichnisstruktur sehr, sehr viele “.svn”-Ordner sein (pro vorhandenem Subverzeichnis nämlich ein “.svn”-Ordner!).

Manchmal vergesse ich leider die kopierten “.svn”-Verzeichnisse einfach aufgrund anderer Themen, die mir dazwischenkommen (ja das Alter!), und wegen der gesetzten Ressource-Filter fallen mir die kopierten “.svn”-Ordner anschließend auch nicht mehr ins Auge.

SVN übernimmt die Verwaltung der kopierten Verzeichnisse und Dateien nicht wie gewünscht

Nach den ersten Schritten im Projekt erreicht man dann schnell ein Stadium, in dem man seine Ergebnisse der Versionsverwaltung SVN anvertrauen möchte.

Mein SVN-Plugin stellt unter dem Menüpunkt “SVN >> Share Projects …” eine menügeführte Möglichkeit zur Zuordnung eines Projekts zu einem Repository bzw. einem Unterbereich davon zur Verfügung. Ich “share” also mein
neu angelegtes Projekt und platziere es in einem eigenen SVN-Repository oder einem eigenen Zweig eines vorhandenen Repositories.

Natürlich möchte ich nun, dass bei der Anlage dieses projektspezifischen Repository-Bereichs eine initiale Erfassung auch derjenigen Verzeichnisse und Dateien erfolgt, die in mein kundenspezifisches Projekt kopiert wurden. Genau das funktioniert aber leider nicht wie erwartet, wenn in den Verzeichnissen bereits gültige “.svn”-Ordner existieren!

SVN meint dann, dass diese Verzeichnisse ja schon einer SVN-Verwaltung unterliegen würden und nutzt SVN-interne Links auf die bereits verwalteten SVN-Ressourcen.

Das ist natürlich nicht im Interesse meines neuen Projekts – ich bewege mich da ja in einem völlig anderen Kontext und was dort mit den kopierten Dateien geschieht, hat mit den in den Änderungen, die in der Versionsverwaltung eines anderen Projektes erfasst werden, nichts zu tun. Die SVN-interne Verlinkung ist im vorliegenden Fall sogar schädlich bis gefährlich. (In anderen Fällen als dem beschriebenen mag eine SVN-Verkettung aber durchaus sinnvoll sein).

Leider weiß SVN aber nichts von meiner stumpfsinnigen Kopiererei und meinen Intentionen. Es nimmt die Hinweise in den entdeckten (kopierten) “.svn”-Verzeichnissen ernst.

Man merkt die Verkopplung des neuen Projektes mit älteren auf SVN-Ebene u.a. durch einen roten Pfeil in der rechten unteren Ecke der Dateisymbole im PHP-Explorer.

Eclipse SVN Link

Der Pfeil zeigt die Referenz auf SVN-Ebene zu einem anderen Repository-Container eines anderen Projektes an. Commit-Vorgänge auf dem aktuellen Projekt werden ggf. nicht als abgeschlossen angezeigt, wenn im anderen Projekt durchgeführte Dateiänderungen noch nicht “committed” wurden. Auch sonst kann es zu erheblichen Verwirrungen kommen

Bereinigung des SVN-Problems – Rekursives Entfernen der kopierten “.svn”-Ordner

Was ist in dieser Situation zu tun? Es ist notwendig, das neu angelegte Projekt vom kopierten Ballast anderer Projekt zu befreien und erst danach – also im aufgeräumten Zustand – einem SVN-Repository zuzuordnen. Vorher lösen wir das Projekt aber von der schon vorgenommenen Versionsverwaltung. Folgende Schritte sind somit durchzuführen:

  • Schritt 1: Man muss das neu angelegte PHP-Projekt zunächst vom SVN-Repository “disconnecten”.
  • Schritt 2: Man muss nun alle kopierten “.svn”-Ordner löschen.
  • Schritt 3: Erneute Zuweisung des Projektes an SVN und an ein neu anzulegendes SVN-Repository oder einen neuen Zweig eines vorhandenen Repositories

Das hört sich einfach an. Schritt 2 kann sich ohne Shell-Einsatz aber als aufwändig erweisen.

Hinweis zu Schritt 1:
Die Durchführung von Schritt 1 ermöglicht ein Menüpunkt im verzeichnisspezifischen Kontext-Menü: “Team” >> “Disconnect”.

Eclipse SVN Disconnect

Dabei lässt man im nächsten Schritt auf Rückfrage auch die projektspezifischen “.svn”-Einträge löschen. Dabei bleiben allerdings – wie ein anschließender Blick auf die Verzeichnisstruktur zeigt – die ins Projekt kopierten “.svn”-Ordner unangetastet! Das musste man eigentlich erwarten.

Hinweis zu Schritt 2:
Schritt 2 ist wegen der Vielzahl der “.svn”-Verzeichnisse u.U. sehr zeitaufwändig. Ein rekursives Löschen der “.svn”-Verzeichnisse auf allen (!) Verzeichnisebenen der kopierten Ordner ist erforderlich.

Bei einer hinreichend komplexen und umfangreichen Ordner-Struktur braucht man dann gar nicht anfangen, mit “Dolphin” oder anderen grafischen Dateimanagern
herumzuwurschteln. Ich nutze in einer solchen Situation lieber die Kommandozeile.

Dort gibt es dann im Hauptverzeichnis der kopierten Ordnerstruktur (hier: “/projekte/dw/ntcomp” ) folgende Möglichkeit für die Vorsichtigen:

tux@my:/projekte/dw/ntcomp> find . -name “.svn” -exec rm -r {} \;
rm: reguläre Datei (schreibgeschützt) ?./ntc/scripts/_notes/.svn/prop-base/dwsync.xml.svn-base? entfernen? yes

Hierbei muss man allerdings das Entfernen jeder einzelnen Datei unterhalb der gefundenen “.svn”-Verzeichnisse bestätigen! Auch das ist aufwändig – wenn auch vielleicht schneller als die Arbeit mit grafischen Dateimanagern.

Für die weniger Vorsichtigen tut es auch ein

tux@my:/projekte/dw/ntcomp> find . -name “.svn” -exec rm -fR {} \;

oder ein

tux@my:/projekte/dw/ntcomp> find . -type d -name .svn | xargs -i rm -r {};

In den beiden letzten Fällen muss man die Löschaktion nicht bestätigen und das rekursive Löschen braucht nur Millisekunden. Also Vorsicht: Doppelt und dreifach checken, dass man das Richtige im richtigen Verzeichnis tut – und vorher lieber mal alles sichern! Lieber auch nur den “.” als “./” angeben. Vergisst man bei “./” durch Fehler den “.” hat dies je nach Rechtesituation evtl. gravierende Auswirkungen!

Wenn ich alles richtig gemacht habe, ist mein neues PHP-Projekt schließlich von allem ungewollten SVN-Ballast alter Projekte, aus denen ich Verzeichnisse kopiert habe, befreit.

Und dann funktioniert auch die SVN-Verwaltung des neuen Projektes mit den sich spezifisch entwickelnden Klassen und Programmen wieder wie gewünscht – nämlich vollständig und unabhängig von alten Projekten !

Schritt 3 braucht für diejenigen, die SVN unter Eclipse einsetzen, keine besondere Erläuterung. Man “shared” das Projekt erneut (Menüpunkt “SVN” >> “Share Projects …” ) und hangelt sich durch die menügeführte SVN-Einrichtung für das Projekt.

Viel Spaß weiterhin mit Eclipse, SVN und PHP.