2010-09-16 11 views
7

He eliminado muchos archivos de mi copia local que estaban presentes en diferentes subdirectorios del directorio principal. Quiero eliminar también todos los archivos eliminados localmente de mi repositorio SVN.script svn para confirmar un conjunto de archivos eliminados

Si estoy comprobando el estado de SVN de mi directorio principal usando svn st main_dir, entonces todos los archivos eliminados se muestran con '!' símbolo que significa que faltan los archivos correspondientes. Pero esos archivos no se eliminan de mi repositorio SVN incluso si confirmo mis cambios usando svn ci main_dir.

¿Hay alguna manera o comando o secuencia de comandos para eliminar todos los archivos eliminados localmente de mi directorio principal y subdirectorios también desde mi repositorio SVN. Creo que podemos recorrer todos los archivos de cada carpeta y eliminar los archivos eliminados localmente de SVN al verificar el archivo SVN STATUS ('!') Correspondiente, pero no sé cómo convertir mi idea en una secuencia de comandos.

¿Alguien puede ayudarme a terminar esta tarea? Gracias por adelantado ...

Siva

+0

Ver mi respuesta en una pregunta que esto es básicamente una víctima de aquí: http://stackoverflow.com/questions/1308136/svn-set-all-files-marked-with-to-d/1308147#1308147 – jason

Respuesta

17

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

+0

Muchas gracias Gadolin, esto está funcionando perfectamente. Soy muy nuevo en este guión, ¿pueden explicarme esta afirmación un poco para poder entenderlo correctamente? – Siva

+0

1. svn st <- estado svn – Gadolin

+1

1. grep toma solo líneas del estado svn que comienza con!, Entonces esas son las que le interesan, entonces como el resultado del estado svn tiene dos columnas, awk toma la segunda columna (donde el nombre del archivo es) , entonces cada archivo se toma como una entrada en for loop como 'i'. Dentro del ciclo llamo svn delete $ i, donde $ i se sustituye por archivo. – Gadolin

0

Deberías haber utilizado svn delete PATH eliminar estos archivos. De esta forma, se eliminan de ambos, su sistema de archivos y la copia de trabajo.

Consulte svn delete para obtener más información.

Sugiero svn update para recuperar los archivos desde el repositorio remoto y eliminarlos usando svn delete.

+0

No he borrado esos archivos de forma manual, en realidad al actualizar una de mis bibliotecas de terceros algunos de los archivos antiguos se eliminaron de la versión anterior de esa biblioteca. Así que solo necesito eliminar esos archivos de mi repositorio SVN también. – Siva

+0

Esto requeriría que borre archivos solo usando svn delete , que es muy tedioso y algunas veces imposible (por ejemplo, cuando sincroniza la copia de trabajo con alguna otra versión del proyecto). – mvmn

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

Para los archivos con @ 2x en ellos.

+0

¡eres mi salvador! : D Es tan difícil de buscar en Google o SO para "svn delete @ 2x" y obtener la respuesta correcta! ¡Gracias de nuevo! –

+0

Ningún problema en absoluto. :) –

3

He encontrado xargs más fácil que el bucle for:

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

Habrá un error si no se encuentran archivos. – goofansu

0

Works también con un espacio en blanco en los nombres de archivo:

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