Das Entfernen einer Datei aus SVN, ohne sie lokal zu löschen, ist ein häufiges Problem. Ein prominentes Beispiel ist die Datei .classpath in einem Eclipse-Projekt. Das Einfügen dieser Konfigurationsdatei unter SVN ist wunderbar, solange alle im Projekt verwendeten Computer dieselbe Eclipse- und Java-Installation haben. Sobald diese Bedingung verletzt ist, beginnen Commits, andere Eclipse-Projekte zu brechen. Dies ist der Punkt, an dem man eine Datei aus SVN entfernen muss, ohne sie irgendwo zu löschen.
svn rm --keep-local .classpath
erledigt die Arbeit perfekt auf einer Maschine und zu diesem Zeitpunkt.
Das Problem ist, dass andere Computer diese Datei möglicherweise verlieren (beim Update) oder sie wiederbeleben (beim Festschreiben). Der Fehler von SVN besteht weder darin, --keep-local
das Repository zu behandeln noch es auf andere Arbeitskopien zu übertragen. Daher muss auf allen anderen oben genannten Computern der Befehl ausgeführt werden - am besten vor jedem Festschreiben oder Aktualisieren.
Dies funktioniert natürlich bestenfalls zu 90%. Löschungen und Neuversionen erfolgen plötzlich. Meine Lösung besteht darin, jede Maschine, auf die ich direkten oder indirekten Zugriff habe, zu tun
svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine
Dies ist so geradezu hässlich, dass man es kaum als "Lösung" bezeichnen kann. Trotzdem ermöglichte es immer eine schnelle Reparatur späterer Unfälle.