2011-01-05 20 views
44

Tengo una escritura en la que agrego todos los archivos nuevos antes de cometer mi copia de trabajo al repositorio con esta línea:¿Cómo eliminar todos los archivos eliminados del repositorio?

svn status | grep ^\? | awk '{print $2}' | xargs svn add 

ahora quiero añadir una línea que borrar desde el repositorio de todos los archivos borrados en mi trabajo dupdo. 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 se puede ver he reemplazado

"?" con "!" y

"add" con "--force delete"

¿Me podría decir por qué doesn' t trabajo?

ps. Sé que es un procedimiento arriesgado. Ya he discutido todo al respecto. gracias

gracias

+0

¿Lo has probado? ¿Por qué no hacerlo tú mismo en lugar de esperar una respuesta? – viraptor

+0

@viraptor Acabo de intentar, no funciona – aneuryzm

+0

El problema es que está tratando de eliminar los archivos que están marcados con un signo de exclamación que significa que algo anda mal. Esto significa que ha eliminado ese archivo mediante el comando del sistema de operación en lugar de svn borrar el SVN que no le gusta ... El problema no lo entiendo ... ¿cómo se hizo la eliminación de los archivos que ahora quiere? hacer permanente por svn rm --force? – khmarbaise

Respuesta

59

Acabo de intentar esto 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. Tiene:

svn --force delete 

y no:

svn delete --force 

El --force es un parámetro del comando delete y no el comando svn.

+0

Tengo una pregunta al respecto. Si elimino un archivo, ¿pierdo todas las versiones anteriores? En otras palabras, no puedo revertirlo, ¿verdad? ¿Entonces todos los compromisos anteriores también se borran? – aneuryzm

+0

Todavía no funciona ... pero en este momento estoy pensando en usar una herramienta como rsync para hacer copias de seguridad de mis archivos (este comentario está fuera de duda, pero me di cuenta de que no puedo usar svn así) – aneuryzm

+1

Sí, puede recuperar un archivo que fue eliminado. Necesita encontrar la revisión del directorio con el archivo que eliminó y usar el ajuste de revisión ("@" al final de la URL). A partir de ahí, puede copiar el archivo perdido a la revisión actual. También puede hacer una combinación inversa para deshacer todos sus cambios. De hecho, una de las quejas sobre svn es que no puedes eliminar (eliminar) por completo un archivo en caso de que hayas cometido un archivo que no deberías (como tu contraseña). –

2

¿qué pasa con la adición simplemente podría utilizar

svn add --force . 

o

svn --force add . 

que haría lo mismo: añadir todos los archivos sin versión, excepto los que emparejan SVN: patrones de ignorar

+0

La secuencia de comandos OP funciona recursivamente; este método no. – Mortoc

+3

¿por qué? Lo he comprobado, funciona de manera recursiva – sdespolit

2

un enfoque usando un oneliner Perl sería:

svn st | perl -ne 'print "$1\n" if /^\!\s+(.*)/' | xargs svn rm 

esto también debería funcionar con caracteres de espacio en los nombres de archivo.

edición: mejor expresión regular

5
svn status | grep '^!' | sed 's/! *//' | xargs -d '\n' svn delete --force 

La solución funciona para nombres de archivo con espacios y caracteres especiales.

  • svn status - listas de todos los cambios, borrar archivos se marcan como !
  • grep '^!' - Extractos líneas que comienza con ! (es decir, los archivos eliminados)
  • sed 's/! *//' - elimina ! -char al principio y después de que los espacios
  • xargs -d '\n' - trata cada línea de entrada (incluyendo espacios y caracteres especiales) como un argumento separado y los pasa a svn delete --force
+0

FYI la opción '-d' de' xargs' no es compatible con OS X, por lo que parece que solo funciona para Linux (¿o me falta algo?) – HughHughTeotl

+0

Subida para '-d '\ n'' ¡opción! – Mitchapp

Cuestiones relacionadas