2012-11-12 7 views
5

Ich benutze SmartSVN als ein Frontend für Subversion. Gelegentlich wird eine Quelldatei, die der Repository-Kontrolle unterliegt, überflüssig - ich brauche sie einfach nicht mehr. In einem solchen Fall möchte ich es in dem Sinne löschen, dass beim Aktualisieren der Arbeitskopie die Datei nicht mehr aus dem Repository abgerufen wird. Aber ich möchte immer noch den Verlauf der Datei (d. H. Die zuvor festgeschriebenen Revisionen) im Repository behalten.Entfernen einer Datei von SubVersion/SmartSVN

Wenn ich mich richtig erinnere, entfernt SmartSVN Befehl den Verlauf der Datei (ich bin offensichtlich zögerlich, dies zu überprüfen). Bitte korrigieren Sie mich, wenn ich mich irre. Ansonsten: Wie kann ich den gewünschten Effekt erzielen?

EDIT: Mit einer Dummy-Datei, bestätigt, dass Remove die Datei aus SVN-Steuerelement vollständig entfernt, und seine Geschichte ist nicht mehr sichtbar. Das Problem ist also real.

+0

Sie könnten es in einer Dummy-Datei versuchen. Fügen Sie es hinzu, commit, dann entfernen Sie es. Wenn ich einen Wetteinsatz habe, wird 'remove' oder' del' oder 'rm' den Verlauf nicht aus dem Repository entfernen. –

+0

@Luc M: Nur 'del' aufrufen bedeutet nach dem nächsten Update auf die Arbeitskopie, die Datei wird wieder da sein. – Dabbler

+0

Ich vermute, dass Sie "commit" müssen, um es aus Ihrer Arbeitskopie zu löschen. –

Antwort

4

Subversion löscht nie vollständig eine Datei aus dem Repository. In der Tat ist dies eine sehr gefragte Funktion.

Sie tun eine svn delete oder svn rm, und die Datei ist nicht mehr in der Arbeitskopie. Es ist jedoch definitiv immer noch da. Was ist wahrscheinlich überzeugt, dass die Datei dauerhaft entfernt worden ist, ist, dass Sie so etwas wie dies tun:

$ svn co http://repo/svn/project 
[...] 
$ cd project 
$ svn del foo.txt 
$ svn commit -m "Removed foo.txt" 
committed version 12345 
$ svn ls http://repo/svn/project/foo.txt 
No such file 

Das ist wahr. Die Datei foo.txt befindet sich nicht mehr in der aktuellsten Version von Subversion.

Vielleicht haben Sie so etwas wie dieses:

Sie wusste, dass die Datei 12345 nicht in Revision ist, weil Sie es entfernt. Lassen Sie uns jedoch in Revision aussehen 12344. Die Datei ist immer noch da in dieser Revision sein sollte:

$ svn ls -r12344 http://repo/svn/project/foo.txt 
No such file 

Schauen Sie, Revision ist nicht in Revision 12344. Aus diesem Grund hat sie endgültig gelöscht worden.

Nicht so schnell, Bunky. Was Sie angefordert haben, ist Revision 12344 der Datei in der aktuellen Revision des Repository-Layouts. Was Sie tun müssen, ist den Unterschied zwischen der Dateirevision und der Repository-Revision zu verstehen. Dies wird revision pegging genannt und kann eines der schwierigsten Konzepte in Subversion sein.

Was Sie sehen möchten, ist die Datei in der 12.344. Revision des REPOSITORY. Um dies zu erreichen, setzen Sie ein @ am Ende der Repository-URL:

$ svn ls http://repo/svn/project/[email protected] 
foo.txt 

Jetzt können wir die Datei sehen, weil sie in der 12344. Revision dieses Repository Layouts sind. Wenn Sie die Datei wiederherstellen müssen, können Sie die Version der Datei immer kopieren Sie von der verdübelt Revision des Repository Layout wollen:

$ svn cp -r12344 -m"undeleting foo.txt" \ 
     http://repo/svn/project/[email protected] \ 
     http://repo/svn/project 

Diese Revision 12344 der Datei foo.txt am 12344. Revision der Kopie wird Repository zur aktuellen Revision des Repositories.

Der einfachste Weg, um Dateien zu finden, die gelöscht wurden, ist bei svn log aussehen:

$ svn log -rHEAD -v http://repo/svn/project/foo.txt 
r12345 | dweintraub | [...] 

Removed foo.txt 

D /project/foo.txt 
----------------------------------------------------- 

I 12345. Deshalb Datei `foo.txt in Revision gelöscht, es in Revision 12344 noch existierte.Gut zu wissen, ob ich die Datei wiederherstellen muss.

Ja, es könnte in diesem Fall albern erscheinen, dass ich die Revision der Datei und des Subversion-Layouts anfordern muss, weil sie beide gleich sind. Dies wird jedoch nicht immer der Fall sein. Dateien werden verschoben und kopiert, gelöscht und wiederhergestellt. Die Version der gewünschten Datei stimmt möglicherweise nicht mit der von mir gesuchten Repository-Version überein.

0

Ich akzeptierte die Antwort von David W. - sie beschrieb den Zustand der Dinge aus der Sicht von Subversion (Kommandozeile-basiert) korrekt. Da ich SmartSVN als GUI-Frontend verwende, möchte ich die entsprechenden Informationen aus dieser Perspektive hinzufügen.

Um zu sehen, die Geschichte der gelöschten Datei SmartSVN verwenden,

  • Öffnen Sie ein Repository Browser
  • Ausgabe der Repository | Show Revision Befehl
  • die Revision Optionsfeld auswählen (als Fenster zum Projekt entgegengesetzt); klicken Sie dann auf die Schaltfläche Select
  • die Repository-Revision Sie sehen möchten, wählen

Sie dann die Datei sehen, sofern es in der Repository-Version vorlag Sie ausgewählt haben.

Beachten Sie, dass der ausgewählte Ordner bestimmt, welche Dateien angezeigt werden (es scheint keine Möglichkeit zu bestehen, alle Dateien wie im Projektfenster anzuzeigen) und auch, welche Repository-Revisionen zur Auswahl angezeigt werden.

1

In SmartSVN:

Wählen Sie Datei/Ordner -> Rechtsklick -> "Open in Repository Browser" -> rechts auf Datei klicken/Ordner möchten Sie entfernen -> "Entfernen ..."

Verwandte Themen