Tag Archives: subversive

Eclipse-SVN Troubleshooting


Motivation

Im Zusammenspiel zwischen Eclipse und SVN entstehen ab und zu Inkonsistenzen zwischen lokaler Arbeitskopie und dem Stand des SVN Repository. Dieser Artikel soll für typische Fälle eine Anleitung zur Beseitigung dieser Widersprüche geben.

Generelles Vorgehen

Der erste Schritt bei auftretenden Widersprüchen zwischen der lokalen Arbeitskopie und dem SVN Repository besteht darin zu erreichen, dass alle im Repository enthaltenen Resourcen in der lokalen Kopie auch als solche gekennzeichnet werden. Die folgenden Schritte können in angegebener Reihenfolge versucht werden. Nach jedem Schritt sollte geprüft werden ob noch Widersprüche bestehen – falls nicht, sofort beenden und normal weiter arbeiten.

  1. Versuch: SVN Update um alle Resourcen aus dem Repository zu holen.
  2. Versuch: SVN Cleanup auf der lokalen Arbeitskopie ausführen um die Markierungen mit den wirklich im Repository existierenden Resourcen in Einklang zu bringen.
  3. Versuch: SVN Update erneut aufrufen, evtl. lassen sich jetzt fehlende Resourcen downloaden
  4. Versuch: Alle Commits die einzeln möglich sind in der Synchronize Perspective durchführen. Einzelfallprüfung! Die Synchronize Perspective lässt auch für im svn:ignore Property aufgeführte Ressourcen ein commit zu.
  5. Versuch: Alle Ressourcen die im Repository nicht sein sollten aber dort sind und in der lokalen Kopie auch nach Update noch fehlen, über die SVN Repository Perspective löschen.
    Dieser Schritt kann möglicherweise nicht rückgängig gemacht werden!
    Anschliessend unbedingt Update ausführen, am besten weiter mit Versuch 1.
  6. Versuch: Möglicherweise gibt es Resourcen auf denen Sie noch ein Rollback durchführen möchten. Jetzt wäre der geeignete Zeitpunkt für einen Versuch.
  7. Versuch: Wenn alles nichts geholfen hat, versuchen sie nur noch die modifizierten und neuen Ressourcen ins Repository zu bringen. Hier können manchmal auch Kommandozeilen Werkzeuge wie SVN-Tortoise helfen.
    Haben Sie das erfolgreich geschafft, verschieben sie die komplette Arbeitskopie an eine Stelle außerhalb des aktiven Workspaces (als Backup).
    Dann checken Sie das Projekt neu aus und löschen die noch zu entfernenden Ressourcen auf dem üblichen Weg.

Spezifische Probleme

Extra Files trotz Ignore Liste

Ob eine Resource in der svn:ignore Liste enthalten ist bekommt man in Eclipse heraus indem man das Projekt selektiert und sich vom Projekt die svn Properties anzeigen lässt (siehe obiges Bild).

Im Beispiel ist deutlich zu sehen, dass der target Folder in der ignore Liste enthalten ist. Dennoch stehen offensichtlich Resourcen unterhalb des target Folders unter SVN Kontrolle. Durch das Property ist auch bei Selektion des target Folders der Menüpunkt add to svn:ignore deaktiviert.

Ein einfaches delete auf die index.html im target Folder wirkt sich nicht direkt auf das Repository aus. Beim Versuch das Delete zu comitten (target Folder selektieren und commit) wird der komplette target Folder als neu gekennzeichnet und subversion versucht diesen in das Repository zu schreiben. Wir können das delete dennoch ins Repository eintragen indem wir alle neuen Einträge abwählen und nur das delete auswählen (siehe nachfolgendes Bild).

Führt dieser Weg nicht zum Erfolg kann alternativ auch der entsprechende Pfad im Repository gelöscht werden. Aber Vorsicht bei direkten Aktionen im Repository! Hier sollte man genau wissen was man tut und ob die Pfade noch benötigt werden. Die Repository Sicht zeigt nachfolgende Abbildung.

Am schnellsten lässt sich das Problem natürlich lösen, indem in der Repository Perspektive gleich der ganze target folder gelöscht wird. Damit umgeht man auch das schrittweise löschen der übergeordneten Folder. Allerdings muss man dann den lokalen Arbeitsstand noch bereinigen und auch dort den target Folder händisch löschen (ein einfaches update reicht jetzt nicht). Jetzt sieht alles wie gewünscht aus, siehe nächste Abbildung.

Wenn der target Folder beispielsweise durch erneute Generierung entsteht, wird er wieder wie gewohnt als Resource welche nicht unter SVN Kontrolle steht angezeigt.

Auch bei einer Synchronisation wird der target Folder wieder korrekt ignoriert (siehe folgende Abbildung).

Möglicherweise muss wie im Beispiel gezeigt, das svn:ignore Property mit der ignore Liste erneut commited werden, da es nur noch in der lokalen Arbeitskopie und nicht mehr im Repository existiert. Mit dem Löschen des target Folders im Repository ist offensichtlich auch das Property entfernt wurden.

Eclipse und SVN


Hallo allerseits,

bis heute hatte ich nie Probleme mit Eclipse auf meine SVN Repositories zuzugreifen. Heute jedoch durfte ich gleich den ganzen Tag mit der Suche nach der passenden Version verbringen. Das ist mir einen Blogeintrag wert auch wenn ich diesen wegen seiner Trivialität normalerweise nicht erstellt hätte.

Also was funzt aktuell?

Ich benutze Eclipse in der Version 3.6.0 Build I20100608-0911 und habe als SVN Features installiert:

  • Eclipse.org, Subversive SVN Team Provider (Incubation),  0.7.9. I20101001-1700
  • Eclipse.org, Subversive SVN Team Provider Localization (Incubation), 0.7.9. I20101001-1900
  • Eclipse.org, Subversive SVN Team Provider Revision Graph Plug-in (Incubation), 0.7.9. I20101001 1700
  • Polarion Software,Subversive SVN 1.4 SVN Kit Connector, 2.2.2 I20101001-1700
  • Polarion Software, Subversive SVN 1.5 SVN Kit Connector, 2.2.2 I20101001-1700
  • Polarion Software, Subversive SVN 1.6 SVN Kit Connector, 2.2.2 I20101001-1700

Benötigt werden aus meiner Sicht nur die fett geschriebenen Features.

Für den Windows Explorer nutze ich TortoiseSVN 1.5.9, Build 15518 – 32 Bit , 2009/02/27 18:34:12.

Meine Plattform ist Windows Vista – Home Premium mit Service Pack 2.

Über Tortoise habe ich ein SVN Repository angelegt und über die hier angegebene Konfiguration lässt es sich in Eclipse schreibend wie lesend verwenden. In Eclipse war es mir leider nicht gelungen das Repository anzulegen, da der Menüpunkt stets disabled war.

SVN Merge mit Eclipse


Heute wollte ich das erste Mal mit Eclipse Änderungen aus einem getaggten Codestand in die HEAD Revision mergen. Die von Eclipse (Galileo) bereitgestellten Dialoge waren umfangreich aber nicht intuitiv. Mit ein bischen probieren ging es aber.  Also alles von vorn.

  1. Du hast ein Projekt, hast es produktiv gesetzt und getaggt (konkret hab ich maven verwendet und ein release gebildet).
  2. Dann stelltst Du fest, dass Du noch ein paar Änderungen in der Doku im getaggten Stand anpassen musst. Also Check out mit Tag und Anpassungen durchführen und einchecken.
  3. Jetzt willst Du diese Änderungen in den HEAD mergen.

Dabei wie folgt vorgehen:

  1. HEAD Stand auschecken oder update ausführen.
  2. Projektordner auswählen und Kontextmenü öffnen.
  3. Team/Merge auswählen
    SVN Merge Dialog in Eclipse (Galileo)
  4. Als URL wird im obigen Dialog der URL des Tag Folders im Remote Repository ausgewählt.
  5. Über Preview kann man sich die Änderungen vorher anschauen, die durchgeführt werden.
  6. Dann auf OK und die Änderungen werden auf der lokalen Kopie eingearbeitet.
  7. Über den gewohnten Dialog zur Synchronisation mit dem Repository kann dann entschieden werden, was germerged, was ignoriert und was noch zu ändern ist.

Das wars schon, viel Spass beim Selbstversuch – geht ganz einfach.