2010-12-23 29 views
10

Me gustaría eliminar todos los archivos de mi copia de trabajo que no se conocen en el repositorio svn.Limpiar una comprobación svn (eliminar archivos que no sean svn)

Efectivamente, como si acabara de hacer una comprobación limpia, pero prefiero no tener que volver a descargar todos los archivos.

La reflexión más cercano que he llegado a esto es ...

rm -rf `svn st | grep "^?" | cut -d" " -f8` 

Pero esto parece torpe y no me fío totalmente ya que la inconsistencia en la producción podría eliminar directorios fuera SVN.

"svn export" no es lo que estoy buscando porque no estoy limpiando la fuente para empaquetarlo, solo quiero eliminar principalmente cruxt (* .pyc, * .orig, * .rej, svn-commit .tmp, * .swp).

¿Hay una manera mejor de hacer esto además de realizar un pago limpio?

+0

(por @rodion) posible duplicado de [eliminar automáticamente archivos Subversion No versionado] (http://stackoverflow.com/questions/239340/automatically-remove-subversion-unversioned- archivos) –

+0

Posible duplicado de [esto] (http://stackoverflow.com/questions/239340/automatically-remove-subversion-unversioned-files) – rodion

Respuesta

18

mayoría las soluciones que se publican aquí no pueden manejar carpetas con espacios en blanco. Esto es por qué usamos la siguiente:

svn status --no-ignore | grep '^[?I]' | sed "s/^[?I] //" | xargs -I{} rm -rf "{}" 
+0

Las grandes mentes piensan igual. Esta es la línea de comando perfecta para lograr esa hazaña. –

-2

¿Eliminar todos los archivos que no tienen el atributo readonly? Asegúrese de que usted no tiene cosas sacados beforehands ...

+2

thejohndonson al rescate))) Y de eso se trata la pregunta: cómo hacerlo automáticamente :-)) – zerkms

+1

¿Desde cuándo SVN aplica el atributo de solo lectura a todos los archivos en el proceso de pago? Pensé que ese tipo de mala conducta era territorio de TFS. – cdhowie

2

Utilice esta:

svn status --no-ignore | grep ^I | awk '{print $2}' | xargs rm -rf 

Se obtiene de commandlinefu.

5

http://www.cuberick.com/2008/11/clean-up-your-subversion-working-copy.html

Aquí es lo que hago cuando quiero mi copia de trabajo a ser idéntica a la repo:

svn st | awk '{print $2}' | xargs rm -rf 

que eliminará todos los archivos que están fuera de sincronía con el repositorio. Luego, simplemente actualice para restaurar las cosas que eliminó y actualice.

svn up 

... Asegúrese de que usted no tiene ninguna ediciones o añade! comando podría ser más seguro:

svn st | grep '?' | awk '{print $2}' |xargs rm -f 

... ¿Qué hay de ficheros ignorados? P.ej.

svn st --no-ignore 
svn st --no-ignore | awk '{print $2}' | xargs rm -rf 
svn st --no-ignore | grep '?' | awk '{print $2}' |xargs rm -f 
+0

Estoy bastante seguro de que sus comandos con 'awk' fallarán si hay espacios en los nombres de archivo, porque' awk' solo captará el segundo "campo", que podría ser solo la primera palabra en un nombre de archivo/carpeta. 'rm' no podrá encontrar el archivo/carpeta. –

3
svn status --no-ignore | grep '^[?I]' | awk '{print $2}' | xargs rm -rf 

Me explico.

obtener el estado de los archivos en un repositorio y las imprime uno por uno a la salida estándar en una matriz

svn status 

Esto incluye los archivos creados para ser ignorado normalmente mediante SVN

--no-ignore 

Coincidir con las líneas que incluyen un? o un I como estado. Me refiero a un archivo ignorado y? significa un archivo que no está bajo control svn.

| grep '^[?I]' 

Esto imprime la segunda variable en la matriz, que es el nombre del archivo

| awk '{print $2}' 

Esto elimina los archivos con las filesnames impresos

| xargs rm -rf 

Cheers, Loop

Cuestiones relacionadas