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.)
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.
svn revert . -R
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:
rm
-rf
est requis, sinon ces répertoires ne seront pas suppriméssvn revert . -R && svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}')
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) ;)'
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.
svn revert . -R
tout réinitialiser.
svn revert path/to/file
pour un seul fichier
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
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
Supprimer la copie de travail du système d'exploitation et l'extraire à 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 pour mes propres besoins.
Et pourrait être une bonne idée d'ajouter --no-ignore à la commande svn
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 )