tag - revertir cambios svn
¿Cómo eliminar todos los archivos eliminados del repositorio? (5)
Tengo un script en el que agrego todos los archivos nuevos antes de enviar mi copia de trabajo a mi repositorio con esta línea:
svn status | grep ^/? | awk ''{print $2}'' | xargs svn add
Ahora quiero agregar una línea que elimine del repositorio todos los archivos eliminados en mi copia de trabajo. En otros términos, no puedo especificarlos uno por uno, y necesito detectarlos con el estado svn y luego eliminarlos automáticamente. Sin embargo, la línea no funciona.
svn status | grep ^/! | awk ''{print $2}'' | xargs svn --force delete
Como puedes ver he reemplazado
" ?
" con " !
" y
" add
" con " --force delete
"
¿Podría decirme por qué no funciona?
PD. Sé que es un procedimiento arriesgado. Ya he discutido todo al respecto. Gracias
Gracias
¿qué hay de agregar simplemente podría usar
svn add --force .
o
svn --force add .
haría lo mismo: agregue todos los archivos no versionados, excepto los que coincidan con svn: ignorar patrones
He encontrado otra solución, también.
svn status | grep ''^/!'' | sed ''s/! *//'' | xargs -I% svn rm %
Lo he visto en http://donunix.blogspot.de/2009/02/svn-remove-all-deleted-files.html
Lo intenté y funciona perfectamente.
$ svn st | grep ''^!'' | awk ''{print $2}'' | xargs svn delete --force
D groups.pl
D textblock.pl
¿Sus archivos tienen espacios en sus nombres?
¡¡ESPERA UN SEGUNDO!! Veo el problema Tienes:
svn --force delete
y no:
svn delete --force
La --force
es un parámetro del comando delete
y no del comando svn
.
un acercamiento usando un oneliner de Perl sería:
svn st | perl -ne ''print "$1/n" if /^/!/s+(.*)/'' | xargs svn rm
esto también debería funcionar con caracteres espaciales en los nombres de archivo.
editar: expresiones regulares mejoradas
svn status | grep ''^!'' | sed ''s/! *//'' | xargs -d ''/n'' svn delete --force
La solución funciona para nombres de archivos con espacios y caracteres especiales.
-
svn status
: enumera todos los cambios, los archivos eliminados se marcan como!
-
grep ''^!''
- ¡Extrae líneas que comienzan con!
(es decir, archivos eliminados) -
sed ''s/! *//''
sed ''s/! *//''
- elimina!
-char al principio y espacios después -
xargs -d ''/n''
- trata cada línea de entrada (incluyendo espacios y caracteres especiales) como argumento separado y los pasa asvn delete --force