2011-08-05 8 views
21

Supongo que fui descuidado.Agregar archivos a SVN luego eliminar antes de cometer

que añade un montón de archivos a svn con svn add, luego vi unos pocos archivos agregaron que no quería, así que les ha de suprimirse rm.

Ahora no puedo confirmar más porque faltan archivos en la confirmación. Intenté la limpieza svn pero no ayudó.

Mi opción de trabajo ahora es eliminar manualmente todos los directorios .svn, pero eso parece incorrecto.

+4

Puede 'svn revert' los archivos agregados. –

+0

Créanme, no estaban siendo descuidados. Svn realmente debería ocuparse de esto por ti, pero no siempre es tan inteligente. – trysis

Respuesta

37

lo que tengo entendido que tiene esta situación:

$ touch foo 
$ svn add foo 
A   foo 
$ rm foo 
$ svn ci 
svn: Commit failed (details follow): 
svn: 'foo' is scheduled for addition, but is missing 

Así solucionarlo hacer esto: (! Gracias Linus)

$ svn revert foo 
Reverted 'foo' 

o se puede hacer esto:

$ touch foo 
$ svn delete --force foo 

para cada archivo, y debe poder registrarse sin problemas.

+1

No me di cuenta de que esto realmente eliminó el archivo en sí, no solo el seguimiento de SVN. Tenga en cuenta que esto también elimina el archivo del directorio local. –

1

Si tiene svn add X un archivo, pero no se ha comprometido, luego decide que desea eliminar ese archivo (y no confirmarlo); simplemente debe revertir el comando svn add X con svn revert X.

A continuación, se "deshace" el complemento aún no confirmado.

5

Si agregó una carpeta con subcarpetas y archivos dentro de , eliminó la carpeta antes de enviarla. En este caso, puede hacer lo siguiente.

$ svn revert <Deleted Folder Name> --depth infinity 
+0

Aparece un error: ** no se encontró el nodo ** –

2

Si tiene varios directorios con varios archivos borrados, el siguiente comando podría ayudar:

svn st | grep '!M' | sed 's/!M  \(.*\)$/"\1"/' | xargs svn revert 

recomiendo primero en la lista de los archivos que van a ser revertido. Podemos hacerlo eliminando la última tubería: svn st | grep '!M' | sed 's/!M \(.*\)$/"\1"/'.

Paso a la explicación de comandos paso:

  • svn st - En él se enumeran añadió y inapropiadamente eliminan archivos con !M símbolo
  • grep '!M' Encuentra las líneas con !M
  • sed 's/!M \(.*\)$/"\1"/' Esto se utiliza para deshacerse del !M con los espacios. También citará los nombres de los archivos para que no tenga que preocuparse si los archivos incluyen espacios en ellos.
  • xargs svn revert Esto revertirá todos los archivos de la lista.
+0

¿Podría elaborar más su respuesta agregando un poco más de descripción acerca de la solución que proporciona? – abarisone

+1

** Esta pregunta tiene casi tres años. ** También sería útil elaborar su respuesta un poco más. También tenga en cuenta que la salida de 'svn st' puede cambiar sin previo aviso lo que haría inútil su solución ... –

3

Esta es en realidad una versión ligeramente modificada de @Gonzalo Mateo, que resolvió mi problema.

svn st | grep '!' | sed 's/!M  \(.*\)$/"\1"/' | xargs svn revert --depth infinity 
+0

Esto resolvió mi problema. Gracias. –

0

Esto resolvió mi problema

svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity

Una cosa que debe tener en cuenta es que el código anterior sólo funciona para las últimas incorporaciones. Entonces, haga otro svn ci si le da un error y luego vuelva a ejecutar el código anterior. Luego nuevamente svn ci hasta que haya revertido todos los problemas.

Bono: Añadir un alias (esto es para Oh-My-ZSH Zsh Shell)

# SVN revert everything like reset hard alias sra="svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity"

Ahora sra es decir, SVN revertir todos le hará la vida fácil.

Cuestiones relacionadas