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 stocké dans le référentiel? Quelque chose comme git reset --hard ou (ha, réinitialisation matérielle de Git ne supprime pas non plus les fichiers non versionnés!) rm -rf wc && svn co wc .

Mise à jour: je ne suis pas après un simple retour, car cela ne supprime pas les fichiers supplémentaires dans la copie de travail. Je veux vraiment quelque chose qui soit identique à la suppression de la copie de travail et à son réexamen, sans avoir à télécharger à nouveau les données. (Évidemment, cela ne me dérange pas de perdre tous les changements non engagés.)

Vous pouvez récursivement revenir comme ceci:

svn revert --recursive .

Il n’y a aucun moyen (sans écrire un script créatif) de supprimer des éléments qui ne sont pas sous le contrôle des sources. Je pense que le plus proche possible est d’itérer sur tous les fichiers, utilisez alors grep le résultat de svn list , et si le grep échoue, alors supprimez-le.

EDIT : La solution pour le script de création est ici: Supprimer automatiquement les fichiers sans version de Subversion

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

Pour annuler les fichiers suivis

 svn revert . -R 

Pour nettoyer les fichiers non suivis

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

Le -rf peut / devrait avoir l’air effrayant au début, mais une fois compris, ce ne sera pas pour les raisons suivantes:

  1. Seuls les répertoires entièrement non répertoriés correspondent au modèle transmis à rm
  2. Le -rf est requirejs, sinon ces répertoires ne seront pas supprimés

Pour revenir puis 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 à vos .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) ;)' 

Tout supprimer dans votre copie locale en utilisant:

 rm -r your_local_svn_dir_path/* 

Et le tout rétablit récursivement 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.

 svn revert . -R 

pour tout réinitialiser

 svn revert path/to/file 

pour un seul fichier

Solution Windows pure / 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 

Supprimez les fichiers sans version et annulez les modifications:

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

En dehors:

 DD:\tmp\sql\update\abc.txt 

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

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 à mes propres fins.

Et peut-être une bonne idée d’append –no-ignore à la commande svn

Pour supprimer des fichiers non suivis

J’ai pu répertorier tous les fichiers non suivis signalés par svn st dans bash en procédant comme suit:

 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 à la main les fichiers que vous souhaitez supprimer, si vous vous sentez moins chanceux.


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