tutorial tortoise subversion subir repositorio proyecto español configurar con como clonar carpeta archivos agregar svn

subversion - svn tortoise import



¿Hay un comando de Subversion para restablecer la copia de trabajo? (9)

Para eliminar archivos sin seguimiento

Pude enumerar todos los archivos sin seguimiento informados por svn st in bash haciendo:

echo $(svn st | grep -P "^/?" | cut -c 9-)

Si te sientes afortunado, puedes reemplazar echo por rm para eliminar archivos sin seguimiento. O copie los archivos que desea eliminar a mano, si se siente con menos suerte.

(Utilicé la respuesta de @ abe-voelker para revertir los archivos restantes: https://stackoverflow.com/a/6204601/1695680 )

¿Hay un único comando de Subversion que "restablecería" una copia de trabajo exactamente al estado que está almacenado en el repositorio? Algo así como el git reset --hard o (¡ja, el restablecimiento de Git duro no elimina los archivos no versionados!) rm -rf wc && svn co <url> wc .

Actualización: no busco una reversión simple, ya que eso no elimina los archivos adicionales en la copia de trabajo. Realmente quiero algo que sería lo mismo que borrar la copia de trabajo y revisarla nuevamente, solo sin tener que volver a descargar los datos. (Obviamente no me importa perder todos los cambios no confirmados).


Para revertir los archivos rastreados

svn revert . -R

Para limpiar archivos sin seguimiento

svn status | rm -rf $(awk ''/^?/{$1 = ""; print $0}'')

El -rf puede / debe parecer aterrador al principio, pero una vez entendido, no será por estas razones:

  1. Solo los directorios totalmente sin seguimiento coincidirán con el patrón pasado a la rm
  2. Se requiere -rf , de lo contrario, estos directorios no se eliminarán

Para revertir, luego limpiar (la pregunta OP)

svn revert . -R && svn status | rm -rf $(awk ''/^?/{$1 = ""; print $0}'')

Para una facilidad de uso consistente

Agrega un alias permanente a tus .bash_aliases

alias svn.HardReset=''read -p "destroy all local changes?[y/N]" && [[ $REPLY =~ ^[yY] ]] && svn revert . -R && rm -rf $(awk -f <(echo "/^?/{print /$2}") <(svn status) ;)''


Eliminar la copia de trabajo del sistema operativo y revisarlo de nuevo es más simple, pero obviamente no es un solo comando.


Elimine todo dentro de su copia local usando:

rm -r your_local_svn_dir_path/*

Y revierte todo recursivamente usando el siguiente comando.

svn revert -R your_local_svn_dir_path

Esto es mucho más rápido que eliminar todo el directorio y luego realizar un nuevo proceso de pago, ya que los archivos se restauran desde los metadatos SVN locales. Ni siquiera necesita una conexión de red.


Muy rápido y simple y hace exactamente lo que quieres

svn status | awk ''{if($2 !~ /(config|/.ini)/ && !system("test -e /"" $2 "/"")) {print $2; system("rm -Rf /"" $2 "/"");}}''

El /(config|.ini)/ es para mis propios fines.

Y podría ser una buena idea agregar --no-ignore al comando svn


Solución pura de cmd / bat de Windows:

svn cleanup . svn revert -R . For /f "tokens=1,2" %%A in (''svn status --no-ignore'') Do ( If [%%A]==[?] ( Call :UniDelete %%B ) Else If [%%A]==[I] Call :UniDelete %%B ) svn update . goto :eof :UniDelete delete file/dir IF EXIST "%1/*" ( RD /S /Q "%1" ) Else ( If EXIST "%1" DEL /S /F /Q "%1" ) goto :eof


Usted puede revertir recursivamente así:

svn revert --recursive .

No hay forma (sin escribir un script creativo) de eliminar cosas que no están bajo control de fuente. Creo que lo más cercano que se puede hacer es iterar sobre todos los archivos, usar luego grep el resultado de svn list , y si el grep falla, entonces eliminarlo.

EDIT : la solución para el script de creatividad está aquí: eliminar automáticamente los archivos no versionados de Subversion

De modo que podría crear un script que combine una revert con la respuesta que mejor se ajuste a la pregunta vinculada.


Eliminar archivos no versionados y revertir cualquier cambio:

svn revert D:/tmp/sql -R svn cleanup D:/tmp/sql --remove-unversioned

Fuera:

D D:/tmp/sql/update/abc.txt


svn revert . -R

para reiniciar todo

svn revert path/to/file

para un solo archivo