Löschen, Verschieben und Umbenennen

Im Gegensatz zu CVS erlaubt es Subversion, Dateien und Ordner umzubenennen oder zu verschieben. Deshalb gibt es im Kontextmenü Befehle für diese Operationen.

Abbildung 5.28. Explorer Kontextmenü für Dateien unter Versionskontrolle

Explorer Kontextmenü für Dateien unter Versionskontrolle


Löschen von Dateien und Ordnern

Verwenden Sie TortoiseSVNLöschen, um Dateien oder Ordner aus der Versionskontrolle zu entfernen.

Wenn Sie mittels TortoiseSVNLöschen eine Datei löschen, wird diese sofort aus der Arbeitskopie entfernt und zum Löschen aus dem Projektarchiv bei der nächsten Übertragung markiert. Der Elternordner der Datei zeigt ein „Gelöscht“ Symbol an. Solange Sie die Löschung noch nicht übertragen haben, können Sie die Datei mit dem TortoiseSVNRückgängig... Befehl auf dem Elternordner wieder herstellen.

Wenn Sie mittels TortoiseSVNLöschen einen Ordner löschen, bleibt dieser in der Arbeitskopie, wird aber durch das Gelöscht Symbol gekennzeichnet.Solange Sie die Löschung noch nicht übertragen haben, können Sie die Datei mit dem TortoiseSVNRückgängig... Befehl auf dem Ordner selbst wieder herstellen. Dieses unterschiedliche Verhalten beim Löschen von Dateien und Ordnern ist Teil von Subversion, nicht von TortoiseSVN.

Wenn Sie eine Datei oder einen Ordner aus dem Projektarchiv löschen, aber lokal noch als unversioniertes Objekt beibehalten wollen, wählen Sie Erweitertes KontextmenüLöschen (lokal erhalten). Sie müssen die Umsch-Taste gedrückt halten, während Sie einen Rechtsklick auf Objekt im rechten Fenster des Explorers machen, um das erweiterte Kontextmenü zu sehen.

Wenn eine Datei über den Explorer anstelle des TortoiseSVN Menüs gelöscht wird, zeigt Ihnen der Übertragen-Dialog die fehlenden Dateien an und erlaubt Ihnen, diese aus der Versionskontrolle zu entfernen. Wenn Sie allerdings vorher Ihre Arbeitskopie aktualisieren, wird Subversion die fehlenden Dateien bemerken und durch die aktuelle Version aus dem Projektarchiv ersetzen. Wenn Sie ein Objekt, das sich in der Versionskontrolle befindet, löschen wollen, müssen Sie dazu TortoiseSVNLöschen verwenden, damit Subversion nicht raten muss, was Sie wirklich tun wollten.

Wenn ein Ordner über den Explorer anstelle des TortoiseSVN Menüs gelöscht wird, beschädigt das Ihre Arbeitskopie und sie können nicht mehr übertragen. Wenn Sie Ihre Arbeitskopie aktualisieren, wird Subversion den fehlenden Ordner wieder durch die neueste Version aus dem Projektarchiv ersetzen. Sie können den Ordner dann auf die korrekte Art mittels TortoiseSVNLöschen entfernen.

Eine gelöschte Datei/Ordner zurückholen

Wenn Sie eine Datei oder einen Ordner gelöscht und die Löschung bereits ins Projektarchiv übertragen haben, wird ein normaler TortoiseSVNRückgängig Befehl diese nicht wieder zurückbringen können. Aber die Datei oder der Ordner ist nicht verloren. Wenn Sie die Revisionsnummer kennen, in der sie gelöscht wurde (Benutzen Sie den Log-Dialog um das herauszufinden) öffnen Sie den Projektarchivbetrachter. Wechseln Sie dann zu der Revisionsnummer, selektieren Sie die Datei oder den gelöschten Ordner, Rechtsklick und wählen Sie den Befehl KontextmenüKopieren zu.... Als Ziel für diesen Kopierbefehl geben Sie den Pfad zu Ihrer Arbeitskopie an.

Dateien und Ordner verschieben

Wenn Sie eine Datei oder einen Ordner an Ort und Stelle umbenennen wollen, wählen Sie KontextmenüUmbenennen.... Sie müssen nur noch den neuen Namen angeben.

Wenn Sie Dateien innerhalb Ihrer Arbeitskopie, zum Beispiel in einen anderen Ordner, verschieben möchten, können ebenfalls die Ziehen und Ablegen Funktion verwenden:

  1. Wählen Sie die Dateien aus welche Sie verschieben möchten.

  2. Ziehen Sie die Dateien mit gedrückter rechter Maustaste an den neuen Ort.

  3. Lassen Sie die rechte Maustaste los.

  4. Wählen Sie den Befehl KontextmenüSVN Dateien hierher verschieben

Den übergeordneten Ordner übertragen

Da Umbenennen und Verschieben als Löschen gefolgt von einer Kopie implementiert sind, müssen Sie den übergeordneten Ordner der verschobenen/umbenannten Datei übertragen, damit die Löschung zum Projektarchiv übertragen wird. Wenn Sie das nicht tun, bleiben die lokal gelöschten Dateien im Projektarchiv erhalten und die Arbeitskopien Ihrer Kollegen werden beim Aktualisieren von der Löschung nichts mitbekommen. Das führt dazu, dass sie dann beide Kopien, die alte und die neue, enthalten.

Sie müssen einen umbenannten Ordner übertragen, bevor Sie Dateien innerhalb des Ordners bearbeiten. Andernfalls kann Ihre Arbeitskopie sehr durcheinander kommen.

Sie können auch mit Hilfe des Projektarchiv-Betrachters Objekte verschieben. Lesen Sie in „Projektarchivbetrachter“ nach, wie man mit dem Betrachter arbeitet.

SVN Externals nicht verschieben

Sie sollten niemals Verzeichnisse, die auf svn:externals zeigen mittels TortoiseSVN Verschieben oder Umbenennen. Dies würde dazu führen, dass das Objekt aus dem externen Projektarchiv gelöscht wird, was voraussichtlich eine Menge Leute verärgern würde. Wenn Sie einen externen Ordner verschieben wollen, sollten Sie dazu den normalen Windows Explorer verwenden und anschließend die svn:externals Eigenschaften des Quell- und des Zielordners anpassen.

Groß-/Kleinschreibung eines Dateinamens ändern

Die Groß-/Kleinschreibung eines Dateinamens mit Subversion unter Windows zu ändern ist trickreich, weil während einer kurzen Zeitspanne beim Umbenennen die Datei in beiden Schreibweisen existieren muss. Da Windows die Groß-/Kleinschreibung ignoriert, gibt es Konflikte beim Verwenden des normalen Umbenennen Befehls.

Glücklicherweise gibt es (mindestens) zwei Lösungen, eine Datei umzubenennen ohne die Historie zu verlieren. Es ist wichtig, die Datei mit Subversion umzubenennen. Ein Umbenennen nur im Explorer wird die Arbeitskopie beschädigen!

Lösung A) (empfohlen)

  1. Übertragen Sie die Änderungen der Arbeitskopie.

  2. Benennen Sie mit dem Projektarchivbetrachter die Datei von GROSSbuchstaben in grossBUCHSTABEN direkt im Projektarchiv um.

  3. Aktualisieren Sie die Arbeitskopie.

Lösung B)

  1. Benennen Sie die Datei mit dem KontextmenüUmbennennen... von GROSSbuchstaben in GROSSbuchstaben_ um.

  2. Änderungen übertragen.

  3. Benennen Sie die Datei von GROSSbuchstaben_ in grossBUCHSTABEN um.

  4. Änderungen übertragen.

Behandeln von Konflikten in der Groß-/Kleinschreibung

Wenn das Projektarchiv bereits zwei Dateien mit demselben Namen aber unterschiedlicher Groß-/Kleinschreibung (z.B. TEST.TXT und test.txt) enthält, können Sie diesen Ordner unter Windows nicht mehr aktualisieren oder auschecken. Während Subversion bei Dateinamen Groß-/Kleinschreibung beachtet, wird sie von Windows ignoriert.

Dies passiert manchmal, wenn aus verschiedenen Arbeitskopien Dateien mit dem gleichen Namen aber unterschiedlicher Groß-/Kleinschreibung übertragen werden. Eine weitere Möglichkeit sind Übertragungen aus einem Betriebssystem wie Linux, das Groß-/Kleinschreibung berücksichtigt.

In diesem Falle müssen Sie entscheiden, welche der beiden Dateien Sie behalten möchten und die andere Datei aus dem Projektarchiv löschen oder umbenennen.

Zwei Dateien mit demselben Namen verhindern

Es gibt ein serverseitiges Aktionsskript hier: http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ welches verhindert, dass zwei Dateien mit demselben Namen aber unterschiedlicher Schreibweise in das Projektarchiv gelangen.

Externes Umbenennen reparieren

Manchmal wird Ihre freundliche Entwicklungsumgebung beim Umarbeiten von Projekten Dateien für Sie umbenennen und Subversion nicht davon in Kenntnis setzen. Wenn Sie dann Ihre Änderungen übertragen wollen, zeigt Ihnen Subversion die alte Datei als fehlend und die neue als nicht versioniert an. Sie könnten jetzt einfach die neue Datei übertragen, aber Sie würden dadurch die Historie der Datei verlieren, da Subversion nicht weiß, dass die beiden Dateien zusammenhängen.

Besser ist es, wenn Sie Subversion mitteilen, dass diese Änderung eigentlich eine Umbenennung war. Sie können das in den Übertragen und Auf Änderung prüfen Dialogen tun. Markieren Sie einfach beide, die alte (fehlende) und die neue (unversionierte) Datei und wählen Sie KontextmenüUmbenennen reparieren, um die beiden Dateien zu einer Umbenennung zusammenzufassen.

Nicht versionierte Dateien löschen

Meistens tragen Sie in Ihre Ignorieren-Liste sämtliche generierten Dateien ein, da diese normalerweise von der Versionierung ausgeschlossen werden sollen. Aber was ist, wenn Sie all diese ignorierten Dateien löschen wollen, um Ihr Projekt sauber generieren zu können? Meistens gibt es eine entsprechende Funktion im Makefile, aber falls es noch kein Makefile gibt oder dieses gerade überarbeitet wird wäre es nützlich, eine Funktion zum Bereinigen der Arbeitskopie zu haben.

TortoiseSVN stellt eine solche Funktion unter Erweitertes KontextmenüUnversionierte Objekte löschen... zur Verfügung. Sie müssen die Umsch Taste drücken, während Sie einen Rechtsklick auf einen Ordner im rechten Fenster des Explorers machen, um das erweiterte Kontextmenü zu sehen. Daraufhin wird ein Dialog mit sämtlichen nicht versionierten Dateien in Ihrer Arbeitskopie angezeigt, in dem Sie die zu löschenden Objekte auswählen können.

Wenn solche Objekte gelöscht werden, werden sie in den Papierkorb verschoben, so dass Sie eine versehentlich gelöschte Datei, die eigentlich versioniert werden sollte, wieder herstellen können.