¿Cómo puedo eliminar todos mis cambios en mi directorio de trabajo SVN?

195

Tengo un directorio de trabajo SVN. Hice algunos cambios en ese directorio, y se muestra en svn status. Pero, ¿hay alguna forma de eliminar todos mis cambios allí y obtener todo del tronco usando la línea de comando?

n179911
fuente

Respuestas:

274
svn revert -R .
svn up

Esto revertirá de manera recursiva el directorio actual y todo lo que contiene y luego se actualizará a la última versión.

Mike McQuaid
fuente
2
Tenga en cuenta que esto no funciona con elementos externos (aparentemente se ignoran).
cic
86

Utilicé una combinación de las respuestas de otras personas para llegar a esta solución:

Revertir los cambios locales normales de SVN

svn revert -R .

Elimine cualquier otro cambio y admite la eliminación de archivos / carpetas con espacios, etc.

svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf

No olvides obtener los últimos archivos de SVN

svn update --force
Shaize
fuente
Muchas gracias Shaize, este es el sed más elegante, ... pipa que he visto hasta ahora para esto :) Especialmente cuidando los ignorados también.
matón
Funciona de maravilla. ¡Gracias!
Niilo Keinänen
28
svn revert -R .
svn cleanup . --remove-unversioned
lexa-b
fuente
No elimina archivos * .class, etc.
Trismegistos
2
si también desea eliminar archivos ignorados-svn cleanup . --remove-ignored
Kip
14

Si no tiene cambios, siempre puede ser realmente minucioso y / o perezoso y hacer ...

rm -rf *
svn update

Pero, en realidad no, ¡ no hagas eso a menos que estés realmente seguro de que la opción de ataque nuclear desde el espacio es lo que quieres! Esto tiene la ventaja de destruir también todos los archivos temporales de construcción, y cosas que SVN ignora.

La solución más correcta es usar el comando revertir:

svn revert -R .

La -R hace que la subversión se repita y revierta todo dentro y debajo del directorio de trabajo actual.

bbum
fuente
A menudo usé este truco, pero con SVN 1.7, donde los metadatos se almacenan solo en la raíz del WC, esta ya no es la solución limpia que era. Por ejemplo, los archivos eliminados permanecen eliminados.
Bart van Heukelom
8
svn nuke-from-space
Jason Swett
9

Ninguna de las respuestas aquí fue exactamente lo que quería. Esto es lo que se me ocurrió:

# Recursively revert any locally-changed files
svn revert -R .

# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
    perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
    tr '\n' '\0' | xargs -0 rm -rf

Probado en Linux; puede funcionar en Cygwin, pero depende (creo) de una extensión específica de GNU que permite dividir xargs en '\0'lugar de espacios en blanco.

La ventaja del comando anterior es que no requiere ninguna actividad de red para restablecer el entorno limitado. Obtiene exactamente lo que tenía antes y pierde todos sus cambios . (descargo de responsabilidad antes de que alguien me culpe por este código que destruye su trabajo) ;-)

Utilizo este script en un sistema de integración continua donde quiero asegurarme de que se realiza una compilación limpia después de ejecutar algunas pruebas.

Editar : no estoy seguro de que esto funcione con todas las versiones de Subversion. No está claro si el svn statuscomando siempre tiene un formato consistente. Úselo bajo su propio riesgo, como con cualquier comando que use dicho rmcomando general .

mpontillo
fuente
7

svn revert deshará los cambios locales que haya realizado

Sean
fuente
5

Puede usar el siguiente comando para revertir todos los cambios locales:

svn st -q | awk '{print $2;}' | xargs svn revert
Yaya
fuente
Recibo el mensaje de error "No hay suficientes argumentos" para svn revert
circular
4
svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

Eliminará cualquier archivo que haya sido modificado. Me parece recordar que tuve problemas con la reversión cuando se agregaron archivos y directorios.

Juan
fuente
0

Si está en Windows, el siguiente bucle for revertirá todos los cambios no confirmados realizados en su espacio de trabajo:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)

Si desea eliminar todos los cambios no confirmados y todos los objetos no versionados, necesitará 2 bucles:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
  svn rm --force "%%e"
)
David
fuente