Se corro svn rm file, il file viene rimosso dalla copia di lavoro locale.
Quello che faccio ora è:
$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file
Come evitare svn anche eliminando il file locale durante l'uso svn rm?
Se corro svn rm file, il file viene rimosso dalla copia di lavoro locale.
Quello che faccio ora è:
$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file
Come evitare svn anche eliminando il file locale durante l'uso svn rm?
Risposte:
Vuoi l' --keep-localopzione della riga di comando. Ciò rimuove il file dal controllo versione senza rimuoverlo dal file system.
$ svn rm --keep-local my_important_file
Nota: l' --keep-localunico effetto svn rmdella copia. Altri utenti possono avere la propria copia locale del file eliminata a meno che non vi sia un conflitto tra la loro copia locale e il repository a causa delle modifiche apportate. Questo potrebbe non essere il risultato desiderato. Vedi i commenti qui sotto.
Rimuovere un file da SVN senza eliminarlo localmente da nessuna parte è un problema comune. Un esempio importante è il file .classpath in un progetto Eclipse. Mettere questo file di configurazione in SVN è meraviglioso fintanto che tutte le macchine utilizzate nel progetto hanno la stessa installazione di Eclipse e Java. Una volta violata questa condizione, inizia a interrompere altri progetti Eclipse. Questo è il punto in cui bisogna rimuovere un file da SVN senza eliminare ist da nessuna parte.
svn rm --keep-local .classpath
fa perfettamente il lavoro su una macchina e in quel momento.
Il problema è che altre macchine potrebbero perdere quel file (durante l'aggiornamento) o resuscitarlo (durante il commit). Il difetto di SVN non è né di gestirlo --keep-localnel repository né di propagarlo ad altre copie funzionanti. Quindi su tutte le altre macchine sopra il comando deve essere eseguito - meglio prima di qualsiasi commit o aggiornamento.
Questo, ovviamente, funzionerà al massimo al 90%. Le cancellazioni e le versioni successive avverranno all'improvviso. La mia soluzione è di avere ogni macchina, a cui ho accesso diretto o indiretto
svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine
Questo è così brutto da non essere quasi definito una "soluzione". Tuttavia, ha sempre consentito riparazioni rapide di eventuali incidenti successivi.
Non ho una risposta a questa domanda precisa, ma ho una risposta a una domanda correlata, che è come rimuovere tutti i file (cioè non uno specifico) in una directory dal controllo versione senza eliminarli localmente. Questa soluzione proviene da un'implementazione di Scientific Linux.
ls -a .svn
dovrebbe mostrare la directory svn che memorizza i dati di controllo. Semplicemente:
rm -r .svn
sbarazzarsi di questa directory. Quindi digitando:
svn status
produrrà un errore "avviso: questa directory non è una copia funzionante", perché non è più sotto il controllo della versione.
Spero che aiuti.