web-dev-qa-db-fra.com

Comment puis-je supprimer toutes mes modifications dans mon répertoire de travail SVN?

J'ai un répertoire de travail SVN. J'ai fait quelques changements dans ce répertoire, et cela se voit dans svn status . Mais y a-t-il un moyen pour que je supprime toutes mes modifications et que je récupère tout du coffre en utilisant la ligne de commande?

184
n179911
svn revert -R .
svn up

Cela retournera de manière récursive le répertoire en cours et tout ce qu'il contient, puis se mettra à jour à la dernière version.

257
Mike McQuaid

J'ai utilisé une combinaison de réponses d'autres personnes pour trouver cette solution:

Annuler les modifications SVN locales normales

svn revert -R .

Supprimez toute autre modification et prend en charge la suppression de fichiers/dossiers avec des espaces, etc.

svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf

N'oubliez pas d'obtenir les derniers fichiers de SVN

svn update --force
86
Shaize
svn revert -R .
svn cleanup . --remove-unversioned
20
lexa-b

Si vous n'avez aucun changement, vous pouvez toujours être très complet et/ou paresseux et faire ...

rm -rf *
svn update

Mais, non vraiment, faites pas faites-le à moins que vous ne soyez vraiment sûr que l'option nucléaire de l'espace est ce que vous voulez! Cela présente l’avantage de détruire également tous les fichiers de construction, fichiers temporaires et éléments ignorés par SVN.

La solution la plus correcte consiste à utiliser la commande revert:

svn revert -R .

Avec -R, Subversion récrémente et rétablit tout ce qui se trouve dans et sous le répertoire de travail actuel.

13
bbum

Aucune des réponses ici était tout à fait ce que je voulais. Voici ce que je suis venu avec:

# Recursively revert any locally-changed files
svn revert -R .

# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
    Perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
    tr '\n' '\0' | xargs -0 rm -rf

Testé sur Linux; peut fonctionner dans Cygwin, mais repose (je crois) sur une extension spécifique à GNU qui permet à xargs de se scinder en fonction de '\0' au lieu d'espaces.

L'avantage de la commande ci-dessus est qu'elle ne nécessite aucune activité réseau pour réinitialiser le bac à sable. Vous obtenez exactement ce que vous aviez auparavant et vous perdez toutes vos modifications. (avertissement avant que quelqu'un me reproche de ce code détruisant leur travail) ;-)

J'utilise ce script sur un système d'intégration continue où je veux m'assurer qu'une nouvelle génération est effectuée après l'exécution de certains tests.

Edit: Je ne suis pas sûr que cela fonctionne avec toutes les versions de Subversion. Ce n'est pas clair si le svn status La commande est toujours formatée de manière cohérente. Utilisez-le à vos risques et périls, comme avec toute commande utilisant une telle commande globale rm.

9
mpontillo

svn revert annulera les modifications locales que vous avez apportées

7
Sean

Vous pouvez utiliser la commande suivante pour annuler toutes les modifications locales:

svn st -q | awk '{print $2;}' | xargs svn revert
5
NaN
svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

Supprime tout fichier modifié. Je semble me souvenir d’avoir eu des problèmes avec la restauration lorsque des fichiers et des répertoires ont été ajoutés.

4
Juan
1
Nick Van Brunt

Si vous êtes sur Windows, la boucle for suivante annulera toutes les modifications non validées apportées à votre espace de travail:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)

Si vous souhaitez supprimer toutes les modifications non validées et tous les objets non versionnés, il faudra 2 boucles:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
  svn rm --force "%%e"
)
0
David