Come rimuovere un file dal controllo versione senza eliminarlo?


Risposte:


277

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.


4
Non lo eliminerà comunque dai sistemi di altre persone dopo l'aggiornamento?
Nyerguds,

1
@Nyerguds È corretto, poiché svn rm sta rimuovendo i file dal repository. Nel caso in cui desideri rimuovere i file dal repository, MA tienili localmente sul tuo computer, quindi useresti la bandiera qui sopra.
Greg Hilston,

6
@GregHilston Come ho detto, tuttavia, ciò non aiuta in realtà i progetti con più programmatori. Dovrebbe esserci un modo per annullare la conversione del file ovunque. Il caso più comune qui sono i file di impostazioni locali commessi accidentalmente (molto comuni nei progetti Java), ma la loro non conversione non dovrebbe cancellare i file delle impostazioni di altri utenti.
Nyerguds,

5
@GregHilston "progetti di programmatori multipli reali" erano piuttosto impliciti nei "sistemi di altre persone". Il problema è questo: gli altri si aggiornano e sovrascrivono le loro impostazioni. Questo di solito non è troppo problematico, ma abbastanza fastidioso da volerlo risolvere. Ma a quel punto, quando hanno già sovrascritto le impostazioni e ora ottengono un svn "rm" in fase di aggiornamento, in realtà rimuove il file delle impostazioni locali potenzialmente vitale dal loro sistema, mentre dovrebbe essere semplicemente ignorato in modo che possa essere configurato in locale impostazioni di nuovo.
Nyerguds,

4
Il ricaricamento di un file più vecchio dal repository lo contrassegna come da quella versione precedente, il che significa che un aggiornamento lo eliminerà semplicemente di nuovo. Non esiste un modo pulito per farlo che non richiede un intervento manuale su tutte le macchine del progetto.
Nyerguds,

13

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.


-3

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.


Una domanda correlata? Rimuovere un file e rimuovere l'intera copia di lavoro sono cose totalmente diverse IMHO.
Melebio
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.