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.
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. –
@Luc M: Nur 'del' aufrufen bedeutet nach dem nächsten Update auf die Arbeitskopie, die Datei wird wieder da sein. – Dabbler
Ich vermute, dass Sie "commit" müssen, um es aus Ihrer Arbeitskopie zu löschen. –