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-local
opzione 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-local
unico effetto svn rm
della 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-local
nel 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.