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.
svn revert . -R
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:
rm
-rf
est requirejs, sinon ces répertoires ne seront pas supprimés svn revert . -R && svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}')
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
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 )