una tag subir revertir ignorar eliminar deshacer descartar crear copia con como cambios archivos archivo svn

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



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 a svn delete --force