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?
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?
Respuestas:
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.
Utilicé una combinación de las respuestas de otras personas para llegar a esta solución:
svn revert -R .
svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf
svn update --force
svn revert -R .
svn cleanup . --remove-unversioned
svn cleanup . --remove-ignored
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.
svn nuke-from-space
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 status
comando siempre tiene un formato consistente. Úselo bajo su propio riesgo, como con cualquier comando que use dicho rm
comando general .
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"
)