Verwendung von Subclipse
Inhalt:
Installation
SVN Repository
Projekt zum Repository zufügen
Projekt aus SVN holen
Commit
Update
Merge
Lock
History
Installation
Die folgenden Schritte sind nur nötig wenn nicht mein vorgefertigtes Eclipse-Paket verwendet wird!
Wir verwenden Subclipse in der Version 1.4.6. Diese gibt es nur über den Eclipse-eigenen
Plugin-Installationsmechanismus. Wir gehen im Menü "Help" auf "Software Updates". Auf dem Karteireiter "Available Software" wird eine neue "Site" mit
der URL http://subclipse.tigris.org/update_1.4.x zugefügt:
Den die "Site" aufklappen. Die Unterelemente werden geladen. Haken vor den zu wählenden Komponenten "Site" setzen und auf "Finish" klicken. Folgende Komponenten sollten
gewählt sein:
SVN Repository
Über "Window" -> "Show View" -> "Other" finden wir das "SVN Repository":
In dieser View per Rechtsklick auf "New" -> "Repository Location" gehen und die URL https://rowlf.informatik.fh-wiesbaden.de/svn/GRUPPENNAME
angeben:
Vermutlich wird beim ersten Verbinden eine Warnung über einen unbekannten Zertifikataussteller kommen. Hier auf "Accept permanently" klicken.
Es erscheint der Dialog zur Eingabe eines Usernamens, hier müßt ihre euren FH-User verwenden. Die Option "Save Password"
ist zu empfehlen, weil es sonst sehr oft eingegeben werden muss.
Jetzt können wir uns durch das Repository klicken.
Es gibt übrigens eine Konsole, die uns die ausgeführten Subversion-Befehle und deren Statusausgabe anzeigt:
Projekt zum Repository zufügen
Im folgenden werde ich mein Stateless-Beispiel dem Repository zufügen.
Der erste Schritt ist es, im Repository ein Unterverzeichnis anzulegen. Dazu in der Repository-View Rechtsklick
und "New" -> "New remote folder" wählen und ein Verzeichnis "Stateless" anlegen:
ACHTUNG: Subclipse zeigt manchmal das neue Verzeichnis erst in der "SVN Repository"-View an, wenn wir Rechtsklick -> "Refresh" aufrufen.
Dies ist nach allen Aktionen nötig, bei denen Dateien dem Repository zugefügt werden.
Jetzt wählen wir nacheinander die vier Teilprojekte der EAR-Anwendung und führen jeweils Recktsklick -> "Team" ->
"Share Project" aus.
Als "Repository Type" wählen wir "SVN":
Im nächsten Schritt wählen wir unsere Repository Location:
Leider können wir nicht mit dem Default "Use project name as folder name" arbeiten, da das sonst direkt
in der Wurzel unseres Repositories landen würde.
Deshalb die Option "Use specified folder name" wählen und als Pfad "Stateless/Stateless" (im eben angelegten SVN-Verzeichnis "Stateless" wird
im Beispiel ein eigenes Unterverzeichnis für das EAR-Projekt angelegt) eingeben.
Im nächsten Schritt wird ein schöner Kommentar eingegeben, und wir klicken auf "Finish".
Es ploppt eine Abfrage "Zur Synchronize Perspective wechseln" auf.
Jetzt sehen wir unser Projekt in der Sychronize View. Das Plus-Icon vor jeder Datei gibt an, dass Dateien neu hinzugefügt werden.
Dateien, die beim Build-Vorgang entstehen, wollen wir nicht im Subversion haben. Dies geht, indem wir alle Dateien auswählen und im Contextmenü
=> "Commit" aufrufen. Jetzt können wir die unerwünschten und im Screenshot markierten Dateien aus der Auswahl entfernen:
Nach dem Commit stehen die Dateien immer noch als "Zum Repository hinzufügen" im "Synchronize"-Baum. Um sie auszublenden: Rechtsklick und "Add to svn:ignore"
aufrufen.
In der folgenden Abfrage nach Dateifilterung ändern wir nichts.
Nach diesem Schritt müssen wir vermutlich den Ordern "EARContent" nochmals committen, danach ist die View sauber.
Dies wiederholen wir für die anderen drei Module der Enterprise Application. Bei diesen gibt es zum Glück keine Dateien,
die ausgeschlossen werden sollen.
Das Ergebnis sieht so aus (nach einem "Refresh" des Repository):
Im Project Explorer haben unsere Projekte jetzt alle neue Icons erhalten. Hinter jeder Datei stehen
Version und letztes Commit-Datum. Im Projektverzeichnis wird in jedem Unterverzeichnis ein neues Unterverzeichnis ".svn" angelegt.
Projekt aus SVN holen
Jetzt wollen wir den umgekehrten Weg gehen: ein Projekt aus dem Subversion holen. Dazu Rechtsklick -> "New"
-> "Project...". Wir wählen die Option "SVN" -> "Checkout Projects from SVN".
Im nächsten Schritt wählen wir die Repository Location:
Wir wählen die vier Projekte der EAR-Anwendung aus (aber NICHT das Wurzelverzeichnis "Stateless" sondern nur die
vier Unterverzeichnisse):
Im nächsten Schritt belassen wir alles bei den Defaults:
Und nochmal Defaults:
Commit
Nachdem ich etwas an einer Datei geändert habe, möchte ich es ins Repository zurückspielen.
Dazu wähle ich alle Projekt der Enterprise Application aus, dann Rechtsklick und "Team" -> "Synchronize with Repository"
wählen. Beim allerersten Aufrufen kommt die Abfrage ob wir hierzu die "Team Synchronization"-Perspektive öffnen wollen.
Hier sagen wir natürlich "Yes". Danach erfolgt ein Subversion-Zugriff, und wir sehen links einen Baum der von uns geänderten
Dateien. Im Beispiel habe ich etwas an der GeometricModelBean geändert. Die Verzeichnisse "build" und "build\classes"
werden angezeigt, weil ich das Projekt aus Subversion abgerufen hatte, und sie nicht in der Quellcodeverwaltung vorhanden sind.
Jetzt führen wir einen Rechtsklick auf die geänderte Datei durch und wählen die Option "Commit...".
Update
Jetzt kommt der umgekehrte Fall: ein schlechter Mensch hat etwas am Projekt geändert und wir wollen diese Änderung haben.
Dazu wieder die Option "Team" -> "Synchronize with Repository" wählen.
Jetzt sollte die geänderte Datei (im Beispiel wiederum die "GeometricModelBean") mit dem "Update"-Icon versehen auftauchen:
Merge
Jetzt kommen wir zum Worst case: während wir in einer Datei etwas geändert haben hat dies der oben erwähnte Schlechte
Mensch ebenfalls getan und seine Änderungen sogar schon committed. In der Team Synchronization wird die Datei jetzt so dargestellt:
Durch Doppelklick auf die Datei kommen wir in den Merge-Modus. Unser Ziel ist es jetzt, unsere Datei auf Festplatte
mit der Datei aus dem Subversion abzugleichen. Im Beispiel passierten folgende Änderungen: Lokal wurde die Logger-Ausgabe
in "computeCuboidVolume" geändert, während gleichzeitig remote der die Logger-Ausgabe in "computeCuboidSurface" geändert wurde.
Es handelt sich also um Änderungen an unterschiedlichen Codestellen-
Wir können jetzt mit den beiden Buttons rechts in der Toolbar durch die Änderungen blättern:
Zuerst einmal übernehmen wir die "Non conflicting changes" aus dem SVN in die lokale Datei. Dadurch ist die "fremde" Änderung
aus dem SVN in unseren Code übernommen, und unser Code enthält jetzt die Mischung aus aktuellem SVN-Stand und unseren Änderungen:
Falls wir in der gleichen Codezeile wie unser ominöser Gegenspieler eine Änderung durchgeführt hätten, müssten wir die
jetzt über die beiden Buttons "Copy Current Change from Left to Right" bzw. "Copy Current Change from Right to Left"
manuell zusammenwürfeln.
Nachdem wir so eine Datei zusammengebastelt haben die uns gefällt können wir sie einchecken. Dazu müssen wir
sie allerdings zuerst als "Merged" markieren (Rechtsklick, "Mark as Merged").
Jetzt können wir "Commit" wählen und unser Gegenspieler sollte beim nächsten "Update" die neue Datei erhalten.
Um die Situation eines Merge zu verhindern, kann man ein exklusives "Lock" auf eine Datei setzen. Solange sie gesperrt ist,
kann niemand Änderungen comitten.
Um ein Lock zu erstellen: Rechtsklick auf die Datei, und "Team" -> "Lock" wählen.
Dass ein "lock" auf der Datei steht, erkennt man am geänderten Icon.
Natürlich sollte man nach getaner Arbeit nicht vergessen, die Datei wieder mittels "Unlock" freizugeben.
Möchte ein anderer Entwickler selbst ein "lock" auf die gesperrte Datei, dann erhält er eine Fehlermeldung
"svn: Server sent unexpected return value (423 Locked) in response to LOCK request for '/svn/knauf/Stateless/StatelessEJB/ejbModule/de/fhw/komponentenarchitekturen/knauf/stateless/GeometricModelBean.java'"
in der SVN-Konsole. Im "lock"-Dialog gibt es allerdings die Möglichkeit des "Steal lock", die mit Gewalt das Lock überträgt ;-)
Es ist dem ausgesperrten Entwickler aber möglich, Änderungen an seiner lokalen Version der Datei vorzunehmen. Diese kann er allerdings nicht comitten, dies führt
ebenfalls zu einer Fehlermeldung. Sobald das "lock" aufgehoben ist, muss er seine Änderungen mittels "Merge" in den SVN-Stand einpflegen.
History
Im "SVN Repository" können wir uns per Rechtsklick die Historie eines Items anzeigen lassen (im Beispiel
die oben verwendete "GeometricModelBean". Das gleiche Fenster finden wir auch in der "Synchronize"-Perspective.
Hier können wir uns auch den Code einer alten Version anschauen, indem wir die Datei per Doppelklick öffnen.
Stand 24.11.2008
Historie:
24.11.2008: Erstellt aus Vorjahresdoku, aktualisiert auf Eclipse 3.4, Subclipse 1.4.6