web-dev-qa-db-fra.com

Existe-t-il une commande Subversion pour réinitialiser la copie de travail?

Existe-t-il une seule commande Subversion qui "réinitialise" une copie de travail exactement à l’état qui est stocké dans le référentiel? Quelque chose comme git reset --hard ou (ha, la réinitialisation matérielle de Git ne supprime pas non plus les fichiers non versionnés!) rm -rf wc && svn co <url> wc.

Mise à jour: Je ne suis pas après un simple retour, car cela ne supprime pas les fichiers supplémentaires de la copie de travail. Je souhaite vraiment quelque chose qui équivaudrait à supprimer et à extraire la copie de travail, sans avoir à télécharger à nouveau les données. (Évidemment, je ne crains pas de perdre tous les changements non validés.)

102
zoul

Vous pouvez revenir récursivement comme ceci:

svn revert --recursive .

Il est impossible (sans écrire un script de création) de supprimer des éléments qui ne sont pas sous contrôle de source. Je pense que le plus proche que vous puissiez faire est de parcourir tous les fichiers, utilisez ensuite grep le résultat de svn list, et si le grep échoue, supprimez-le.

[~ # ~] edit [~ # ~] : La solution pour le script de création est la suivante: Supprimer automatiquement les fichiers Subversion non-versionnés = =

Vous pouvez donc créer un script qui combine un revert avec la réponse à la question liée qui vous convient le mieux.

166
vcsjones

Pour revenir aux fichiers suivis

svn revert . -R

Pour nettoyer les fichiers non suivis

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

Le -rf peut/doit sembler effrayant au début, mais une fois compris, ce ne sera pas pour ces raisons:

  1. Seuls les répertoires entièrement non suivis correspondront au modèle passé à rm
  2. Le -rf est requis, sinon ces répertoires ne seront pas supprimés

Pour revenir ensuite nettoyer (la question OP)

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

Pour une facilité d'utilisation constante

Ajouter un alias permanent à votre .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) ;)'
33
niklauzg

Supprimez tout ce qui se trouve dans votre copie locale en utilisant:

rm -r your_local_svn_dir_path/*

Et le tout revenir de manière récursive en utilisant la commande ci-dessous.

svn revert -R your_local_svn_dir_path

Cela est bien plus rapide que de supprimer tout le répertoire et de procéder à une nouvelle extraction, car les fichiers sont en cours de restauration à partir de vos métadonnées SVN locales. Il n'a même pas besoin d'une connexion réseau.

22
Vivek Yadav
svn revert . -R

tout réinitialiser.

svn revert path/to/file

pour un seul fichier

7
Abe Voelker

Supprimez les fichiers non versionnés et annulez les modifications:

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

En dehors:

D         D:\tmp\sql\update\abc.txt
5
Denny Weinberg

Solution pure Windows cmd/bat:

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
3
Andriy F.

Supprimer la copie de travail du système d'exploitation et l'extraire à nouveau est la plus simple, mais évidemment pas une seule commande.

2
Neil Butterworth

Très rapide et simple et fait exactement ce que vous voulez

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

Le /(config|.ini)/ est pour mes propres besoins.

Et pourrait être une bonne idée d'ajouter --no-ignore à la commande svn

2
user1299374

Pour supprimer les fichiers non suivis

J'ai pu lister tous les fichiers non suivis signalés par svn st à bash en faisant:

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

Si vous vous sentez chanceux, vous pouvez remplacer echo par rm pour supprimer les fichiers non suivis. Ou copiez les fichiers que vous souhaitez supprimer à la main, si vous vous sentez moins chanceux.


(J'ai utilisé la réponse de @ abe-voelker pour rétablir les fichiers restants: https://stackoverflow.com/a/6204601/169568 )

1
ThorSummoner