2011-01-05 14 views
5

Cuando intento para cometer mi proyecto a svn me sale el siguiente tema¿Puede svn "ignorar" los archivos eliminados o eliminarlos del repositorio?

svn: '/var/www/sites/blabla/425/file.png' is scheduled for addition, but is missing 

Esto sucede debido a que algunos materiales se elimina del proyecto (y no puedo usar SVN para eliminarlo). ¿Hay alguna manera de decir svn para ignorar esos archivos, o simplemente eliminarlos si no se encuentran?

Respuesta

7

Cuando haces un svn status, la salida se mostrará ningún tipo de archivos que están "perdidos" como una línea que comienza con un signo de exclamación:

!  425/file.png 

Usted debe escribir un script (en su lenguaje de script o un comando línea shell de elección) que analiza este resultado, busca líneas que comiencen con un signo de exclamación, extrae el nombre del archivo y luego hace un svn revert <filename>. Esto deshará el cambio local a ese archivo, permitiéndote comprometerse sin problemas.

edit: desde que mencionaste un script php en un comentario, supongo que estás familiarizado con PHP scripting. En ese caso, puede hacer uso de la función PHP svn_status.

edit2: si quiere eliminar el archivo del repositorio, haga un svn rm --force <filename> en su lugar.

+0

Gracias por la sugerencia. De hecho, estoy usando un script similar para agregar todos los archivos nuevos: ** estado de svn | grep^\? | awk '{print $ 2}' | xargs svn add **. ¿Crees que puedo simplemente reemplazar "?" con "!" y "agregar" con "--force delete"? – aneuryzm

+0

Lo he intentado y no funciona. Lo siento, olvidé mencionar que no quiero revertir el archivo, sino eliminarlo del repositorio. – aneuryzm

+0

Simplemente use "svn rm" en lugar del comentario "svn add" de @Patrick – ATorras

5

¿Así que usted svn add el archivo pero luego lo eliminó manualmente? Tratar;

svn rm --force file.png 

para eliminarlo del índice SVN.

+0

@ İsmail 'cartman 'Dönmez El archivo es eliminado por un script php. Así que no sé qué archivos eliminar con "svn rm" (no sé el nombre del archivo en su comando). Necesito eliminar automáticamente los archivos que no se encuentran en la copia de trabajo). – aneuryzm

+0

No hay una manera automática, necesita encontrar manualmente esas rutas eliminadas y ejecutar 'svn rm --force' en ellas. – ismail

+0

El comportamiento que está solicitando es "peligroso". Si elimina accidentalmente un archivo de su espacio de trabajo, esa es una respuesta bastante destructiva. – jaydel

2

Ejecutar el siguiente comando desde la terminal:

svn revert $(svn st | awk 'BEGIN{FS=""} $1=="!" && $2 !~ /\.(sql|log|tmpl)$/ {print $2}') 
1

funciona para mí:

svn status | grep ^\! | awk '{print $2}' | xargs -L1 svn del --force 

y si tiene espacios en blanco en los nombres de archivo, no podemos usar awk así que corta hasta el inicio de la nombre de archivo (Probablemente tendrá que editar este: porque idk si debemos cortar 9 caracteres en cada sistema):

svn status | grep ^\! | cut -c9- | sed 's/ /\\ /g'| xargs -L1 svn del --force 
+1

Si bien este código/fragmento puede responder la pregunta, proporcionar un contexto adicional sobre cómo y/o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta . – Akkusativobjekt

+0

el único truco que debe saber aquí es usar la opción -L1 para xargs para limitar la ejecución una línea tras otra. Si no lo hace, puede terminar desbordando el tamaño de caracteres que xargs puede manejar –

Cuestiones relacionadas