2008-10-01 16 views
8

He estado usando este comando largo:¿Cómo agregas todos los archivos sin seguimiento en svn? Algo así como git add -i?

svn st | awk '/\?/ {print $2}' | xargs svn add 

Del mismo modo, a svn rm archivos He eliminado accidentalmente con RM normal con:

svn st | awk '/\!/ {print $2}' | xargs svn rm --force 

creo que puedo escribir una función bash para hacer estas dos, pero preferiría un add/rm interactivo como el que tiene el git.

+0

Tenga en cuenta que sus líneas se rompen para los archivos no rastreados con espacios en su nombre – freespace

+4

Use 'svn st | grep '^?' | sed 's/^ [?] */"/ '| sed' s/$ /"/'| xargs svn add' en su lugar, que no sufre el problema de espacio en blanco – freespace

Respuesta

6

Utilizo una generalización de la línea de comandos que ejecuta, llamada svnapply.sh. No lo escribí, pero no recuerdo dónde lo encontré. Con suerte, el autor original será perdóname por volver a colocar aquí:

#!/bin/bash 
# 
# Applies arbitrary commands to any svn status. e.g. 
# 
# Delete all non-svn files (escape the ? from the shell): 
# svnapply \? rm 
# 
# List all conflicted files: 
# svnapply C ls -l 

APPLY=$1 
shift 

svn st | egrep "^\\${APPLY}[ ]+" | \ 
sed -e "s|^\\${APPLY}[ ]*||" | \ 
sed -e "s|\\\\|/|g" | \ 
xargs -i "[email protected]" '{}' 

por los comentarios, la secuencia de comandos permite ejecutar comandos arbitrarios en contra de todos los archivos con el mismo estado.

Actualización:

No sería demasiado difícil escribir un guión que toma una ruta de archivo como argumento y solicita al usuario añadir/eliminar y luego hace lo apropiado para ese archivo. Encadenando eso junto con el script anterior obtendría lo que desea.

0

Utilice una GUI que le muestre todos los archivos sin seguimiento, luego selecciónelo todo y agréguelo. Cualquier GUI SVN decente debería proporcionar esta funcionalidad.

Dicho esto, tenga cuidado de que realmente quiera todos esos archivos.

0

TortoiseSVN tiene la opción de mostrar archivos no versionados en los cuadros de diálogo Confirmar y Mostrar cambios. Puede hacer clic con el botón derecho en un archivo para 'Agregarlo' o marcarlo como ignorado.

Si está usando Visual Studio: La última versión estable de AnkhSVN tiene un comando similar, pero en la mayoría de los casos solo muestra los archivos que debe agregar. (El proyecto proporciona una lista de archivos a la versión con el proveedor de SCC; otros archivos se tienen en cuenta automáticamente)

+2

Si está en el diálogo de confirmación de TortoiseSVN puede estar aún más holgazán. TortoiseSVN agregará automáticamente los archivos no versionados que haya marcado en el diálogo cuando realice la confirmación. –

7

hay una línea más fácil ...

svn add `svn status | grep ?` 

a continuación, puede configurarlo como un alias en ~ /.bashrc como

alias svn-addi='svn add `svn status | grep ?`' 
+2

esto no funciona –

+2

Terminé haciendo esto: para un estado 'svn | grep? | nawk '{print $ 2}' '; hacer svn agregar $ a; hecho –

0

Hay una similar question que contiene una nice Ruby script que le brinda la opción de añadir, ignorar u omitir los archivos nuevos. Lo probé y funcionó para mí. No se necesita GUI, solo Ruby.

5

Esto añade todos los archivos de SVN-sin seguimiento y -unversioned en el directorio actual, de manera recursiva a través de todos los subdirectorios:

svn add --force ./* 

funciona para mí en MacOS 10.6+ y Ubuntu 10, con 1.6 + SVN. Esto no proporciona ninguna interactividad del usuario por archivo; No sé cómo hacer eso.

Eso también agregará archivos svn-ignored, para bien o para mal.

+0

Eso también agregará archivos ignorados, que probablemente no es lo que la mayoría de la gente quiere. –

+0

@IanDunn gracias, he actualizado la respuesta en consecuencia. –

Cuestiones relacionadas