2010-09-16 6 views
7

Ho eliminato molti file dalla mia copia locale che erano presenti in diverse sottodirectory della directory principale. Voglio rimuovere anche tutti i file eliminati localmente dal mio repository SVN.script svn per il commit di una serie di file cancellati

Se sto verificando lo stato SVN della mia directory principale utilizzando svn st main_dir, tutti i file eliminati vengono visualizzati con "!" simbolo che significa che mancano i file corrispondenti. Ma questi file non vengono rimossi dal mio repository SVN anche se applico le mie modifiche usando svn ci main_dir.

Esiste un modo o un comando o uno script per rimuovere tutti i file eliminati localmente dalla directory principale e dalle sottodirectory anche dal mio repository SVN. Penso che possiamo scorrere tutti i file di ogni cartella e rimuovere i file eliminati localmente da SVN controllando il file corrispondente SVN STATUS ('!'), Ma non so come convertire la mia idea in uno script.

Qualcuno può aiutarmi a completare questo compito? Grazie in anticipo ...

Siva

+0

Vedere la mia risposta su una questione che questo è fondamentalmente una vittima di qui: http://stackoverflow.com/questions/1308136/svn-set-all-files-marked-with-to/1308147#1308147 – jason

risposta

17

for i in $(svn st | grep \! | awk '{print $2}'); do svn delete $i; done

+0

Grazie mille Gadolin, funziona perfettamente. Sono molto nuovo a questo script, puoi spiegare questa affermazione un po 'così che io possa capire bene. – Siva

+0

1. svn st <- stato di svn – Gadolin

+1

1. grep accetta solo le righe dallo stato di svn che inizia con!, Quindi quelle sono interessate, quindi come output di stato svn ha due colonne, awk prende la seconda colonna (dove è il nome del file) , quindi ogni file viene preso come input in per loop come 'i'. All'interno del ciclo io chiamo svn delete $ i, dove $ i è sostituito da file. – Gadolin

0

Avresti dovuto utilizzato svn delete PATH per cancellare quei file. In questo modo vengono eliminati da entrambi, dal tuo filesystem e dalla copia di lavoro.

Vedere svn delete per ulteriori dettagli.

Ti suggerisco di svn update per recuperare i file dal repository remoto ed eliminarli utilizzando svn delete.

+0

Non ho cancellato quei file manualmente, in realtà durante l'aggiornamento di una delle mie librerie di terze parti alcuni dei vecchi file sono stati cancellati dalla vecchia versione di quella libreria. Quindi ho solo bisogno di rimuovere quei file dal mio repository SVN anche. – Siva

+0

Ciò richiederebbe di eliminare i file solo usando svn delete , che è molto noioso e talvolta non è possibile affatto (ad esempio, quando si sincronizza la copia di lavoro con un'altra versione del progetto). – mvmn

1
for i in $(svn st | grep \! | awk '{print $2}'); do svn delete $i'@'; done 

Per i file con @ 2x in loro.

+0

tu sei il mio salvatore! : D È così dannatamente difficile cercare in Google o in SO "svn delete @ 2x" e ottenere la risposta giusta! Grazie ancora! –

+0

Nessun problema. :) –

3

ho trovato xargs più facile che il ciclo for:

svn stat | grep \\! | awk '{print $2}' | xargs svn remove 
+0

Ci sarà un errore se nessun file trovato. – goofansu

0

funziona anche con spazi bianchi nei nomi di file:

svn st | grep ! | sed 's/!\s*//' | xargs -I{} svn remove '{}' 
Problemi correlati