2010-08-26 4 views
112

Wenn ich svn rm file ausführen, wird die Datei aus der lokalen Arbeitskopie entfernt.Wie entferne ich eine Datei aus der Versionskontrolle, ohne sie zu löschen?

Was ich tue, ist jetzt:

$ cp file file2 
$ svn rm file 
$ svn ci 
$ mv file2 file 

Wie vermeide ich SVN auch die lokale Datei zu löschen, wenn svn rm verwenden?

+0

mögliches Duplikat von [SVN Datei aus dem Repository entfernen, ohne lokale Kopie zu löschen] (http://stackoverflow.com/questions/542065/svn-remove-file-from-repository-without-deleting-local-copy) – Shai

Antwort

250

Sie wollen die --keep-local Befehlszeilenoption. Dadurch wird die Datei aus der Versionskontrolle entfernt, ohne sie aus Ihrem Dateisystem zu entfernen.

$ svn rm --keep-local my_important_file 
+2

Gewonnen Lösche es nach der Aktualisierung immer noch nicht von anderen Systemen? – Nyerguds

+1

@Nyerguds Das ist korrekt, da die SVN rm die Dateien aus dem Repository entfernt. Für den Fall, dass Sie Dateien aus dem Repo entfernen möchten, diese jedoch lokal auf Ihrem Computer behalten möchten, verwenden Sie die obige Markierung. –

+3

@GregHilston Wie ich schon sagte, hilft das nicht wirklich in Projekten mit mehreren Programmierern. Es sollte einen Weg geben, die Datei einfach überall zu versionieren. Der häufigste Fall sind lokale Einstellungsdateien, die versehentlich festgeschrieben wurden (in Java-Projekten sehr häufig). Wenn Sie sie jedoch nicht versionieren, sollten sie nicht die Einstellungsdateien anderer Benutzer löschen. – Nyerguds

-1

Ich habe keine Antwort auf diese genaue Frage, aber ich habe eine Antwort auf eine ähnliche Frage haben, das ist, wie alle Dateien zu entfernen (dh kein spezifisches) in einem Verzeichnis aus der Versionskontrolle ohne Löschen sie lokal. Diese Lösung stammt aus einer wissenschaftlichen Linux-Implementierung.

ls -a .svn

sollte das SVN-Verzeichnis zeigen, die Steuerdaten speichert. Einfach gesagt:

rm -r .svn

wird die Befreiung von diesem Verzeichnis. Dann eingeben:

svn status

produziert eine ‚Warnung: Dieses Verzeichnis keine Arbeitskopie ist‘ Fehler, weil es nicht mehr unter Versionskontrolle ist.

Ich hoffe, das hilft.

+0

Eine verwandte Frage? Entfernen einer Datei und Entfernen der gesamten Arbeitskopie sind völlig andere Dinge IMHO. – Melebius

6

eine Datei aus dem SVN zu entfernen, ohne es lokal nirgends zu löschen ist ein häufiges Problem. Ein prominentes Beispiel ist die Datei .classpath in einem Eclipse-Projekt. Diese Konfigurationsdatei unter SVN zu speichern ist wunderbar, solange alle Maschinen, die im Projekt verwendet werden, dieselbe Eclipse- und Java-Installation haben. Sobald diese Bedingung verletzt ist, beginnen die Commits, andere Eclipse-Projekte zu unterbrechen. Dies ist der Punkt, an dem man eine Datei aus dem SVN entfernen muss, ohne sie irgendwo zu löschen.

svn rm --keep-local .classpath 

erledigt den Job perfekt auf einer Maschine und zu diesem Zeitpunkt.

Problem ist, andere Maschinen, die Datei (auf Update) verlieren oder es wieder aufleben lassen (auf begehen). SVN des Fehler ist weder --keep-local im Repository zu behandeln, noch an anderen Arbeitskopien zu verbreiten. Daher muss auf allen anderen oben genannten Maschinen der Befehl — am besten vor jedem Commit oder Update ausgeführt werden.

dies am besten, natürlich, wird 90% arbeiten, an. Löschungen und Neu-Versionen werden plötzlich passieren. Meine Lösung ist jede Maschine zu haben, ich habe direkten oder indirekten Zugang zu tun

svn rm --keep-local .classpath 
copy .classpath .classpath-nameOfTheMachine 
svn add .classpath-nameOfTheMachine 

Dies ist so geradezu hässlich kaum eine „Lösung“ genannt zu werden. Trotzdem erlaubte es immer schnelle Reparaturen von späteren Unfällen.

Verwandte Themen